|
|
|||||||||||||||||||||||||||||
|
Использование средств автоматической настройки БД OracleИсточник: oracloid
Дональд K. Бурлесон, BEI Oracle Consulting Средства динамического распределения памяти СУБД Oracle9 i позволяют создавать самонастраивающиеся базы данных. В данной статье рассматривается использование пакета STATSPACK для мониторинга и настройки (в зависимости от потребностей обработки в сервере и базе данных) зон памяти, размеры которых задаются следующими параметрами: sort_area_size (размер области сортировки), large_pool_size (размер большого пула), pga_aggregate_target (максимальная суммарная память PGA), sga_max_size (максимальный размер SGA) и db_cache_size (размер пула буферов). Мы также рассмотрим мониторинг с помощью пакета STATSPACK использования зон памяти и создание интеллектуального механизма для автоматического реконфигурирования Oracle9i в зависимости от текущих потребностей обработки. После установки параметра pga_aggregate_target Oracle будет автоматически управлять распределением памяти PGA, основываясь на конкретных потребностях каждого соединения с Oracle. В Oracle9 i также можно динамически модифицировать параметр pga_aggregate_target на уровне экземпляра с помощью оператора alter system, поэтому АБД может динамически управлять распределением памяти, доступной Oracle9 i .
Рассмотрим более подробно новые средства Oracle9 i и скрипты, которые позволяют разобраться в деталях использования памяти PGA. Использование представления v$sysstat в Oracle9i Следующий запрос выдает общее количество и проценты количества выполнений в трех режимах (оптимальном, однопроходном и многопроходном) начиная с запуска экземпляра. Work_area.sql select
Вывод этого запроса может быть примерно следующим: PROFILE CNT PERCENTAGE
АБД может использовать этот запрос для определения, когда нужно динамически изменить значение параметра pga_aggregate_target . В общем, значение pga_aggregate_target нужно увеличивать, если процент количества выполнений в многопроходном режиме (workarea executions - multipass) больше 0, и уменьшать, если процент количества выполнений в оптимальном режиме (workarea executions - optimal) равен 100%. Использование представления v$pgastat в Oracle9i Представление v$pgastat содержит суммарные статистики (на уровне экземпляра) использования PGA и работы автоматического диспетчера памяти (automatic memory manager). Для выдачи суммарных статистик для всех соединений с Oracle9 i можно использовать следующий скрипт: check_pga.sql
Вывод этого запроса может быть примерно следующим: NAME VALUE
В этом выводе из v$pgastat мы видим следующие статистики:
Расширение представления v$process в Oracle9i В представление v$process добавлено несколько новых столбцов, показывающих автоматическое выделение процессам памяти PGA, включая столбцы pga_used_mem, pga_alloc_mem и pga_max_mem . Запрос, выдающий значения этих столбцов: select
Вывод этого запроса может быть примерно следующим: PROGRAM PGA_USED_MEM PGA_ALLOC_MEM PGA_MAX_MEM
Здесь мы видим выделенную ( pga_alloc_mem ), используемую ( pga_used_mem ) и максимальную ( pga_max_mem ) память для всех соединений с Oracle. Мы видим запросы памяти для всех фоновых процессов, а также для индивидуальных соединений. Заметим, запросы памяти конкретными соединениями можно анализировать более детально, соединяя представление v$process с таблицей v$sql_plan . Использование представления v$sql_workarea_active в Oracle9i Два новых представления показывают активное пространство рабочих областей: v$sql_workarea и v$sql_workarea_active . Представление v$sql_workarea_active содержит информацию о всех рабочих областях, активных в экземпляре в данный момент. Заметим, небольшие сортировки (меньше 65 535 байтов) из представления исключены. select
Пример вывода этого запроса: SID OPERATION WSIZE ESIZE MEM MAX MEM PASS
Здесь видно, что в сеансе 44 (см. столбец SID) выполняется хеш-соединение (hash-join) и его рабочая область обрабатывается в однопроходном режиме (столбец PASS). В этой рабочей области в данное время используется 2 мегабайта памяти PGA (столбец MEM), а до этого было использовано до 6.5 мегабайтов памяти PGA (столбец MAX MEM). Это представление очень полезно для анализа текущих операций с рабочими областями, для получения более подробной информации о сеансах это представление можно соединять с представлениями v$process и v$session , используя для этого столбец SID. Анализ использования памяти для конкретных операторов SQL В Oracle9 i можно получать информацию об использовании памяти вместе с информацией о планах выполнения. Для этого по представлению v$sql нужно сначала определить адрес требуемого оператора. Например, если запрос работает с таблицей NEW_CUSTOMER, для определения адреса можно выполнить следующий запрос: select
Теперь у нас есть адрес и мы можем вставить его в следующий скрипт для извлечения информации о плане выполнения и использовании памяти PGA для данного оператора SQL. plan_mem.sql
Вывод этого скрипта: OPERATION OPTIONS NAME input(MB) LAST_MEM OPT_MEM ONEPASS_MEM O/1/M
Эта информация о плане выполнения и использовании памяти PGA - новое достижение в Oracle9 i , которое позволяет АБД получать подробную информацию о внутреннем выполнении операторов SQL. Переход к самонастраивающейся базе данных Oracle9 i Новые возможности динамического управления SGA в Oracle9 i позволяют использовать архитектуру, при которой АБД Oracle может выполнять мониторинг использования памяти в ОС UNIX и реконфигурировать SGA и зоны памяти PGA в зависимости от текущих профилей использования. Уровень автоматической настройки задается новым параметром pga_aggregate_target. В Oracle9 i для управления памятью используется сложный алгоритм, который повышает скорость выполнения операций, интенсивно использующих память, таких, как хеш-соединения и большие сортировки. Сейчас АБД Oracle может динамически перераспределять память. Изменение конфигурации памяти скриптами ОС UNIX В среде UNIX очень легко планировать запуск заданий, изменяющих конфигурацию памяти при изменении характера обработки. Например, много баз данных Oracle работают в дневное время в режиме OLTP, а ночью запускаются пакетные задания для подготовки отчетов, интенсивно использующие память. Как уже было отмечено, базы данных в режиме OLTP должны иметь высокое значение параметра db_cache_size , а задачи, интенсивно использующие память, должны иметь высокое значение параметра pga_aggregate_target . Приведенные ниже скрипты UNIX могут быть использованы для реконфигурирования SGA без остановки экземпляра. В этом примере мы предполагаем, что у нас отдельный сервер Oracle с 8 гигабайтами памяти, 20% которой мы резервируем для UNIX, оставляя 6 гигабайтов для СУБД Oracle и соединений с Oracle. Эти скрипты предназначены для работы в ОС HP/UX или Solaris, в качестве аргумента в них задается $ORACLE_SID. Скрипт dss_config.ksh будет запускаться каждый вечер в 6:00 для реконфигурирования Oracle для работы в режиме DSS (запуск задач, интенсивно использующих память). dss_config.ksh
Скрипт oltp_config.ksh будет запускаться каждое утро в 6:00 для реконфигурирования Oracle для работы в режиме OLTP. oltp_config.ksh
Замечание: для планирования этих событий реконфигурирования можно использовать пакет dbms_job . Сейчас, когда мы видим общий подход к изменению конфигурации Oracle, становится понятно, что мы можем разработать механизм постоянного мониторинга запросов процессов Oracle, на основании которого можно выполнять операторы alter system для реконфигурирования памяти в зависимости от текущих запросов процессов. На пути к созданию самонастраивающихся баз данных Oracle9 i развивается в направлении создания полностью самонастраивающейся архитектуры, но АБД Oracle несут ответственность за настройку конфигурации памяти в соответствии с характером ее использования. В общем, для определения времени изменения характеристик работы можно использовать запросы v$ -представлений и пакет STATSPACK. Мы видим три подхода к автоматизации настройки:
Правила изменения размеров памяти Существует три условия, влияющие на принятие решения об изменении размеров зон памяти Oracle: одно - для кеша буферов, другое - для разделяемого пула, третье - для памяти PGA:
Рассмотрим каждое условие более подробно. Мы можем захотеть динамически изменить значение параметра pga_aggregate_target , если выполняется одно из следующих условий:
Изменение значения параметра shared_pool_size По опыту работы с Oracle8 мы знаем, что для определения правильности установки размера разделяемого пула можно использовать несколько запросов. Коэффициент непопаданий в библиотечный кеш (library cache miss ratio), представляющий собой отношение количества перезагрузок библиотечного кеша (library cache reloads) к количеству попаданий (pins), позволяет определить необходимость изменения размеров разделяемого пула. В общем, если значение коэффициента непопаданий в библиотечный кеш превышает 1%, нужно рассмотреть вопрос об увеличении значения параметра shared_pool_size . Непопадания в библиотечный кеш возникают во время разбора и подготовки планов выполнения операторов SQL. Выполнение операторов SQL состоит из двух фаз: фаза разбора и фаза выполнения. Во время фазы разбора Oracle сначала проверяет, содержится ли разобранное представление оператора в библиотечном кеше. Если не содержится, Oracle выделит в библиотечном кеше разделяемую область SQL, а затем выполнит разбор оператора. Во время выполнения Oracle проверяет, содержится ли разобранное представление оператора в библиотечном кеше. Если не содержится, Oracle выполнит повторный разбор оператора, а затем выполнит сам оператор. Следующий скрипт пакета STATSPACK вычисляет коэффициент непопаданий в библиотечный кеш. Заметим, в скрипте суммируются значения для всех отдельных компонентов библиотечного кеша и на уровне экземпляра оценивается общее состояние библиотечного кеша.
set lines 80; column mydate heading 'Yr. Mo Dy Hr.' format a16 break on mydate skip 2; select
Вывод из скрипта показан ниже. Сам скрипт легко приспособить для оповещения АБД о чрезмерной количестве непопаданий в библиотечный кеш.
Пакет STATSPACK позволяет выдавать детализированные отчеты о поведении объектов библиотечного кеша. В этом примере ясно видно: нехватка памяти библиотечного кеша наблюдается каждое утро с 9:00 до 10:00. В таком случае мы можем на этот период времени динамически реконфигурировать библиотечный кеш, увеличив его размер (параметр shared_pool_size) за счет уменьшения размера кеша буферов (параметр db_cache_size ). Изменение размера кеша буферов Следующий ниже отчет STATSPACK показывает, когда значение коэффициента попаданий в кеш буферов падает ниже заданного порогового значения. Это весьма полезно для определения периодов времени, когда выполняются запросы в режиме DSS, так как большое количество полных просмотров больших таблиц приводит к уменьшению коэффициента попаданий в кеш буферов. Этот скрипт также выдает отчет о всех трех буферах данных, включая пулы KEEP (удерживающий) и RECYCLE (рециклирующий), и его можно приспособить для подготовки отчетов об отдельных пулах, так как пул KEEP должен всегда иметь достаточное количество блоков данных для кеширования всех строк таблиц, а пул RECYCLE должен иметь очень низкий коэффициент попадания в кеш. Если значение коэффициента попадания в кеш буферов меньше 90%, можно увеличить значение параметра db_cache_size ( db_block_buffers в Oracle8i и более ранних версиях).
yr. mo dy Hr. Name bhr
Здесь мы видим периоды времени, для которых можно динамически увеличить значение параметра db_cache_size . В данном случае это можно делать каждый день с 8:00 до 10:00 (за счет уменьшения значения параметра pga_aggregate_target ). Использование представления Oracle9i v$db_cache_advice В Oracle9 i появилось новое представление v$db_cache_advice, которое позволяет прогнозировать эффект от увеличения размера кеша буферов. Это представление показывает предполагаемые непопадания в кеш буферов для двенадцати потенциальных размеров кеша буферов в диапазоне от 10% текущего размера до 200% текущего размера. Эта новая возможность очень похожа на средства Oracle7, используемые для прогнозирования эффекта от увеличения размера кеша буферов. Для этого в Oracle7 использовались представления x$kcbrbh (оценка попаданий в кеш) и x$kcbcbh (оценка непопаданий в кеш). Так же, как и в Oracle7, для сбора статистик в представлении v$db_cache_advice требуется дополнительная память. Для включения сбора статистик нужно установить в параметре db_cache_advice файла init.ora значение "on" или "ready". Их можно устанавливать динамически (без остановки экземпляра) оператором alter system. Предупреждение: если АБД устанавливает dba_cache_advice=on , Oracle для сбора статистик будет использовать страницы разделяемого пула, что может оказать нежелательное влияние на библиотечный кеш. Например, если в параметре db_cache_size установлено 500 Мб, Oracle будет использовать существенный объем памяти разделяемого пула. Чтобы избежать этой проблемы, нужно предварительно в файле init.ora установить db_cache_advice=ready . В таком случае Oracle будет выделять память во время запуска экземпляра. После включения сбора статистик ( dba_cache_advice=on ) и достаточно продолжительного времени работы базы данных для выдачи прогноза можно выдать следующий запрос:
select
Вывод из скрипта показан ниже. Заметим еще раз, что диапазон значений
Здесь при увеличении количества буферов не наблюдается никаких пиковых изменений дискового ввода-вывода и маргинальных трендов. Это очень типично для хранилищ данных, в которых читаются большие таблицы в режиме полного просмотра. Следовательно, нет никаких "оптимальных" значений параметра db_cache_size . Другими словами, Oracle проявляет "ненасытный аппетит" при потреблении буферов данных: чем больше значение параметра db_cache_size , тем меньше будет операций дискового ввода-вывода. [В Руководстве по оптимизации производительности Oracle9i по аналогичному примеру делается более умеренный вывод: увеличение текущего размера кеша не приведет к значительному повышению производительности. - прим. А.П.Соколова.]
Как правило, нужно настраивать всю доступную память сервера, значение параметра db_cache_size следует устанавливать по точке "сокращающихся доходов" (diminishing returns) - точки, после которой увеличение количества буферов блоков данных не приводит к существенному увеличению коэффициента попадания в кеш буферов (рис. 2). Этот подход позволяет АБД Oracle определять оптимальное количество буферов. Рис. 2. Определение оптимального значения параметра: db_cache_size. Общее правило увеличения значения параметра db_cache_size простое: если увеличение количества буферов приводит к повышению коэффициента попаданий в кеш и есть свободная память, значение параметра db_cache_size нужно увеличивать. Увеличение количества буферов приводит к увеличению объема требуемой оперативной памяти, но для СУБД не всегда можно использовать всю память машины. Поэтому АБД должен аккуратно оценивать объем доступной памяти и определять оптимальное количество буферов блоков. Совет: для сбора статистик в представлении v$db_cache_advice требуется предварительное выделение буферов данных (включается установкой параметра db_cache_advice ), поэтому может оказаться целесообразным только одноразовое включение сбора статистик для определения оптимального размера кеша буферов. Помните: для сбора аналогичной информации вы можете использовать коэффициент попаданий в кеш буферов данных. В более сложных базах данных Oracle9 i можно управлять не только количеством буферов блоков, но и размером блоков. Например, некоторые блоки могут быть очень большими, что позволит уменьшить конкуренцию ввода-вывода. Помните: затраты на ввод-вывод блока размером 32К не существенно превышают затраты на ввод-вывод блока размером 4К. Если приложение "кластеризует" записи в блоках базы данных, проектировщик базы данных для минимизации ввода-вывода может принять решение об увеличении размера некоторых блоков данных. Более подробно об использовании блоков данных разного размера см. главу 8 Концепций ). Когда нужно начинать динамическую реконфигурацию Если вы с помощью своих скриптов обнаружили перезагруженную область памяти, вам нужно будет принять решение о выборе области памяти, размер которой можно уменьшить, чтобы расширить перезагруженную область памяти.
На практике выбор области памяти, размер которой можно уменьшить, заключается в выборе между разделяемым пулом и суммарной памятью PGA (см. рис. 3). Дело в том, что размер разделяемого пула почти всегда меньше размера памяти для буферов данных и PGA. Рис. 3. Типичная конфигурация памяти баз данных Oracle. Заключение Средства автоматической настройки Oracle9 i предоставляют АБД беспримерную возможность управления размерами зон памяти любых компонентов SGA и PGA. По мере развития Oracle9 i будут разрабатываться механизмы автоматической реконфигурации памяти в зависимости от потребностей обработки.
|
|