В этом приложении предлагаются рекомендации, помогающие улучшить производительность некоторых задач, которые приходится регулярно выполнять АБД. Рассматриваются советы по настройке утилит Oracle
ехру imp
иSQI* Loader.
Кроме того, дается пример файла инициализации Oracle (init.ora) на основе релевантных (относящиеся к рассматриваемому вопросу) параметров, упоминающихся в книге, которые собраны в функциональные группы, а также для справочных целей организуется единый файл. И последнее по порядку, но не по степени значимости, представлен раздел, из которого можно брать дополнительную информацию для дальнейшей помощи в ваших трудах по настройке.Настройка утилиты Export
До появления Oracle 7.3 было всего несколько возможностей для настройки производительности утилиты экспорта. Одна из них — использование большего размера параметра buffer для выборки нескольких строк в память и записи их в экспортируемый файл дампа. Другая — создание для утилиты экспорта исполнимого модуля single-task, который задействует меньше ресурсов.
В Oracle 7.3 значительное улучшение производительности было достигнуто благодаря применению нового параметра —
direct.
Прямой экспорт минует Oracle SGA и выполняет запись непосредственно в экспортируемый файл дампа. Этот параметр необходимо задать явно, т. к. его значение по умолчанию равно п (что означает отсутствие прямого экспорта). Чтобы иметь возможность проводить экспорт в прямом режиме, задайтеДругой параметр, можно использовать в соединении со стандарт-
ным (в этом случае применяется Oracle SGA) или прямым путем экспорта. Значение по умолчанию для этого параметра равно размеру буфера операционной системы
{bufsiz)m
зависит от платформы. Установкаrecordlength
равным или кратным размеру блока базы данных помогает увеличить производительность экспорта.В приводимой ниже таблице суммируются результаты наших тестов, для того чтобы показать, как эти параметры влияют на производительность. Тесты проводились для базы данных Oracle 8.1.7, эксплуатирующейся на сервере с ОС АГХ 4.3.3. Других пользователей у сервера не было, и база данных стартовала заново перед проведением каждого теста. Все приводимые времена являются средними по итогам трех тестов с применением каждого параметра. Для получения значений времени использовалась команда Экспорту подвергались .4 952 153 строки таблицы.
Использовавшиеся параметры
Стандартный (без каких-либо ■ параметров)
recordlength- 16384
buffer=1048576
buffer=1048576 recordlength=16384 buffer= 1048576 recordlength=65535
direct=y
direct=y recordlength=16384 direct=y recordlength=65535 recordlength установлен равным значению DB_BLOCK_SIZE
recordlength принимается равным своему значению по умолчанию
recordlength устанавливается равным DB_BLOCK_SIZE.
recordlength устанавливается равным максимальному значению для платформы
recordlength принимается равным своему значению по умолчанию
recordlength устанавливается равным
значению DB_BLOCK_SIZE
Настройка утилиты Import
У АБД имеется довольно мало параметров, пригодных для настройки производительности утилиты импорта. Мы полагаем, что таблицы всегда создаются с подходящей фразой storage, прежде чем в них будут импортироваться данные. При таком поведении мы получаем полный контроль над размерами и размещением экстентов. Если это необходимо, распределите экстенты предварительно, чтобы минимизировать динамическое выделение экстентов во время процесса импорта. Импортируя данные, не забудьте использовать параметр
ignore:
чтобы проигнорировать любые ошибки при создании таблицы, связанные с существованием таблицы.Рассмотрим использование установки
значение по умолчанию
полнять операцию commit), пока не будут импортированы (вставлены) все
строки таблицы. Обратная сторона медали для установки
в том, что если операция импорта заканчивается придется либо обре-
commit=y
при импорте данных. Oracle будет выдавать командуcommit
после каждой вставки массива. Это уменьшит вероятность бесконтрольного роста размера сегментов отката. Если используетсязначение по умолчанию
(commit
и). Oracle не станет фиксировать данные (вы-полнять операцию commit), пока не будут импортированы (вставлены) все
строки таблицы. Обратная сторона медали для установки
(commii=y\
заключаетсяв том, что если операция импорта заканчивается придется либо обре-
зать таблицу, либо вовсе вычеркнуть ее, прежде чем начнется рестарт процесса
импорта, так как Oracle не откатывает зафиксированные данные таблицы.
Не импортируйте индексы вместе с данными. Установите во время процесса
импорта
сы после того, как будут импортированы данные. Это обеспечит намного луч-
ший контроль над производительностью построения индексов за счет
корректировки параметров и
импорта
inde.xes=n
(значение по умолчанию \mport---y)
Можно создать все индек-сы после того, как будут импортированы данные. Это обеспечит намного луч-
ший контроль над производительностью построения индексов за счет
корректировки параметров и
благодаря использованию соответственно сконфигурированной памяти для
временного табличного пространства и локально управляемого табличного
пространства. Можно также для еще большего ускорения течения процесса рас-
смотреть вопрос о создания индексов и применении атрибутов
пространства. Можно также для еще большего ускорения течения процесса рас-
смотреть вопрос о создания индексов и применении атрибутов
nobgging
илиunrecoverable.
Приходилось ли вам когда-нибудь слышать, чтобы пользователи жаловались
на низкую производительность после того, как была проделана работа по реор-
ганизации таблицы в течение длинных выходных? Если ответ утвердительный,
то виной всему является установка по умолчанию
(в Эти параметры оценивают статистику для импортируемых
на низкую производительность после того, как была проделана работа по реор-
ганизации таблицы в течение длинных выходных? Если ответ утвердительный,
то виной всему является установка по умолчанию
statistics=estimate
(в Огас1е7) или(в Эти параметры оценивают статистику для импортируемых
объектов. Следует в зависимости от используемой версии Oracle использовать
или Это не только избавит всех от привычного хаоса по
или Это не только избавит всех от привычного хаоса по
утрам в понедельник, но и повысит производительность импорта. Помните, что надо анализировать импортированные объекты, используя обычные процедуры после того, как будет успешно завершен импорт.
Следует также рассмотреть вариант с увеличением значения по умолчанию
параметра
сива х Если на сервере имеется достаточное количество свобод-
параметра
buffer.
Он вычисляется по формуле (число_строк_вставляемого_мас-сива х Если на сервере имеется достаточное количество свобод-
ной памяти, рассмотрите вопрос о назначении части этой памяти параметру
buffer.
В нашем тестировании импорта параметрbuffer
обеспечивает (до известного предела) значительное увеличение производительности.В приводимой ниже таблице подводятся итоги тестирования, показывающие, как данные параметры влияют на производительность импорта. Тесты проводились для базы данных Oracle 8.1.7, работающей на сервере АГХ 4.3.3. На сервере не было других пользователей, а база данных заново стартовала перед каждым тестом. Все приведенные значения времени определялись как среднее для трех прогонов теста с использованием каждой опции. Для сбора значений времени была использована команда timex. Таблица, в которую выполнялся импорт, содержала 4 952 153 строки. Средний размер строки был равен 65 байт.
Используемые параметры
Затраченное время Замечания
в сек.
commit=y indexes=n ignore y
commit=y indexes=n ignore=y buffer= 1043576
commit=y indexes=n ignore=y buffer=5242880
commit=y indexes=n ignore=y buffer=10485760
594,88 312,96
289,55
288,12
В массиве вставки примерно 16131 строка
В массиве вставки примерно 80860 строк
В массиве вставки примерно 161320 строк 1
Как можно видеть, увеличение значения параметра
buffer
сверх5
Мбайт для таблицы из нашего теста уже не приводит к заметному улучшению производительности. Однако, используя параметрbuffer,
нам удалось сократить время выполнения импорта почти вдвое по сравнению с аналогичным временем, когдаbuffer
не использовался. Кроме того, установлено, что использование параметраrecordlength
не улучшает производительности (по крайней мере, сколько-нибудь существенно).Настройка утилиты SQL'Loader
Oracle предлагает два метода загрузки данных в таблицы с использованием утилиты SQL*Loader. Один из них называется
традиционным
методом, второй —прямым.
При традиционном методе Oracle подготавливает данные вмассиве
связи для их вставки с применением обычного оператораinsert
(DML). Этот метод поддерживает функции SQL для форматирования данных (или массажа) во время процесса загрузки данных.При использовании прямого метода Oracle подготавливает данные в структуре массива столбцов для вставки и форматирования в блоки данных, которые напрямую будут записываться в файлы данных. Прямой метод не использует
SGA и всегда вставляет данные выше максимальной отметки таблицы. Однако этим методом нельзя воспользоваться при загрузке данных некоторых типов данных, например LOB, BLOBS, вложенных таблиц и т. п.
Прямой метод выбирается, если параметр
Параметр
ся в таблицу. Оно влияет на частоту операций сохранения данных, поэтому дол-
жно быть установлено равным какому-нибудь подходящему большому числу для
уменьшения числа сохранений данных. Для больших (по определению пользо-
вателя) таблиц следует рассмотреть параллельную загрузку, для чего достаточно
задать Это следует делать только в том случае, если файл входны-
direct
принимает значение TRUE.Параметр
raws
представляет число строк, которые будут одновременно вставлять-ся в таблицу. Оно влияет на частоту операций сохранения данных, поэтому дол-
жно быть установлено равным какому-нибудь подходящему большому числу для
уменьшения числа сохранений данных. Для больших (по определению пользо-
вателя) таблиц следует рассмотреть параллельную загрузку, для чего достаточно
задать Это следует делать только в том случае, если файл входны-
ми данными сегментирован на несколько частей. Очевидно, что при этом
придется запустить несколько сеансов загрузки. Если операцию загрузки можно повторить, следует рассмотреть применение параметра
unrecoverable
для дальнейшего ускорения процесса загрузки. Если мы проводим загрузку в секционированные таблицы, в которых уже имеются данные, необходимо перед загрузкой данных сделать секционированные индексы неиспользуемыми(unusable),
что позволит избежать поддержания индексов во время загрузки данных.При использовании традиционного пути загрузки большинство АБД пытаются увеличить производительность загрузки, увеличивая значение параметра
rows.
Oracle использует для определения объема памяти, который необходимо выделить для массива связи, значенияrows
иbind/size.
Каждая операция вставки добавляет в таблицу столько записей, сколько их в массиве связи(bind array).
Другой параметр,readsize,
введенный в Oracle 8.0.5, управляет размером буфера чтения, который используется для заполнения таблицы данными, прочитанными из входного файла.51084 bytes (2 rows)
24063 30 1999 1999
В следующем примере пока ыно несколько последних строк из файла протокола SQJL*Loaderc различными значениями
bindsize и readsize.
Сложность с этими двумя параметрами заключается в том, что если один из них принимает значение, не совпадающее со значением по умолчанию, Oracle присваивает другому такое же значение. В наших тестах мы дали возможность утилите вычислять значение ROWS на основании значения bindsize и размера одной строки. Параметрамbindsize
иreadsize были
оставлены их значения по умолчанию (65535 байт):Space allocated for bind array: Total logical records read: Total logical records rejected: Run began on Wed Nov 10 18:30:22 Run ended on Wed Nov 10 18:37:18
Elapsed time was: 00:06:56.51
CPU time was: 00:01:34.72
1047222 bytes (41 rows)
24063 30 1999 1999
Когда
bindsize и readsize
был и сделаны равными 1048576 байт (1 Мбайт), получилось следующее:О Space allocated for bind array: Total logical records read: Total logical records rejected: Run began on Thu Nov 11 00:02:23 Run ended on Thu Nov 11 00:05:06
Elapsed time was: 00:02:42/25
CPU time was: 00:01:14.59
CPU time was: 00:01:14.59
Заметили ли вы разницу между затраченным временем и числом строк в мас-
сиве связи в этих примерах? Очевидно, что значения, назначаемые параметрам
bindsize, read-size
иrows,
могут заметно влиять на производительность загрузки. Этот тест был выполнен, когда мы исследовали (и изучали) методики улучшения производительности SQL? Loader в 1999 г.Подробное объяснение упомянутых выше параметров, а также методы вычислений подходящих для них значений можно найти в статье Стефана Андерта (Stephen Andert.
SQBLoader:A Case Study in Tuning)
по адресу http://oracle.oreilly. com/news/oradesq!load_040J.html. Стефан Аидерт был техническим рецензентом книги Джонатана Дженника и Саньяя Мишры, опубликованной издательством O'Reilly & Associates (Jonathan Gennick, Sanjay Mishra.Oracle SQBLoader: The Definitive Guide).
Мы отсылаем вас к этой книге для тщательного разбора возможностей утилиты SQIfLoadei и способов увеличения ее производительности.Пример параметров инициализации Oracle
Ниже приводится подборка большинства релевантных параметров инициализации Oracle, рассматриваемых в книге. Чтобы облегчить понимание относящихся к обсуждаемым вопросам параметров и функциональных возможностей, которые они поддерживают, мы разделили эти параметры по их функциям. Кроме того, эти функциональные группы параметров напоминают о потенциальном системном влиянии (позитивном или негативном) на конкретные компоненты, возникающем при их изменении. Значения этих параметров приведены
толъкп в справочных иша
ине могут быть
использованы в реальной жизни в том виде, как они представлены, без тщательного мониторинга и тестирования вашей системы.В данном листинге конфигурированы параметры неско-
лько и He рекомендуется использовать их
все одновременно. Описание любого параметра есть в книге "Справочное руководство по Oracle". Для этой же цели можно задать запрос к представлению V$PARAMETER и изучить столбец выходных данных Description.
# initMYDB.ora
Modification History
Name
Kirti Gaja
Date
04/16/2001 04/17/2001
Action
Created the file
Cleaned up, added some parameters
Parameters to optimize the Database Buffer Cache and I/O db_block_buffers = 10000
buffer_pool_keep = (buffers:500, lru_latcb.es: .1) # 0racle8 and above
buffer_pool_recycle = (buffers:1000, lru_latches:2) # 0racle8 and above db_file_multiblock_read_count = 16
db_writers = 10 # Oracle 7.3 and below
dbwr_writer_processes = 1 # Oracle 8 and above
dbwr_io_slaves =10 # 0racle8 and above
disk_asynch_io = TRUE # 0racle8 and above
use_direct_io = TRUE # Platform specific
use_ism = TRUE # Sun Solaris, Obsolete in 8i
db_files = 200
Parameters to optimize the Shared Pool Area
shared_pool_size = 134217728 shared_pool_reserved_size = 10485760
shared_pool_reserved_min_alloc = 5242880 # Obsolete in Oracle 8.1.3
java_pool_size = 20971520 # 0racle8i and above
java_pool_size = 20971520 # 0racle8i and above
large_pool_size = 10485760
large j>ool_min_alloc = 8192 # Obsolete in Oracle 8.1.3
lock_sga = TRUE ft Platform specific
mlock_sga = TRUE ft Platform specific
dml_locks = 300 sequence_caehe_entries = 100
Parameters to optimize Hash Joins
hash_area_size = 10485760 hash_multiblock_io_count = 16 hash_join_enabled = TRUE
Parameters to optimize Redo Log Buffer, ARCH and
#
log_buffer - 131072
log_archive_dest = /u06/oradata/MYDB/archive log_archive..format - arch_%s.log log_archive_start - TRUE
log_archive_buffer_size = 128 # Obsolete in Oracle 8.1.3
log_archive_buffers =5 # Obsolete in Oracle 8.1.3
# and introduced a few additional parameters to manage more
# than one log archive destination and conditions for copying log files
s to them. Please refer to Oracle documentation for additional information.
Parameters to configure Latches
#
log„sinnjitaneous„coDi8s - 8 8 Obsolete in Oracle
db_block„lru_l8tches = 8
# Parameters to optimize Checkpoints
4+
log_checkpoini._interval = 0 log_checkpoint_timeout = 1800 log_checkpoints_to_alert = TRUE
Parameters to optimize Cursors and Library Cache Performance
cursor_,space..ror_time = FALSE
row_cache_cursor=128 # Obsolete in Oracle 8.1.3
session_cached_cursors = 64
open_cursors = 256
Parameters to select Mode and tune Optimizer
optimizerjsode = choose optiw2er_oarallel_percent = 0
optimizer_max_permutations = 79000 # Oracle 8.0.5 and above
optimizer_index_cost_adj = 1 # Oracle 8.0.5 and above
optimizer_search_limit = 1 I Oracle 8.0.5 and above
optimizer_search_limit = 1 I Oracle 8.0.5 and above
optimizer_index_caching = 99 tt Oracle 8.0.5 and above -
partition_view_enabled = true
always_anti_join = HASH
ft Parameters to optimize Parallel Query Option
parallel._max_servers = 16 para]lel_min_servers = 4
parallel_min_percent =50
parallel_server_idle_time = 5 # Obsolete in Oracle 8.1.3
parallel_automatic_tuning = FALSE # 0racle8i and above
Parameters to optimize Sort Performance
sort_area_size = 1048576 sort_area_retained_size = 1048576
sort_direct_writes = TRUE # Obsolete in 8.1.3
sort_write_buffers = 8
it
Obsolete in 8.1.3
sort_write_buffer_size = 32768 it Obsolete in 8.1.3
sort_multiblock_read_count =2 # 0racle8i and above
Pointer to the conficjMYDB.ora file that stores static parameters
db_block_size = 8192 processes = 100 timed_statistics = TRUE
The following parameter enables public read access to trace
_trace_files_public = TRUE
global_names = TRUE
compatible = 8.1.6.1 rollback_segments = (rs1,rs2,rs3,rs4) u'b_naine = MYDB
control_files = (7u03/oradata/MYDB/cntrl1.ctl,\
/u04/oradata/MYDB/cntrl2.ctl) user_duinp_dest = /u01/oracle / a d m i n / MYOB/ud и :. p со r e_duipp_dest = /uC1/oracle/adra i n / M Y D В /' cdu m p background, .di j mp_ d est = /и 01 / о г а с 1 e,/ a d m i n / M YDB / b d и го p
service name = MYOB
< Предыдущая | Следующая > |
---|