Тем, кто занимается настройкой, очень важно познакомиться с событиями, которые встречаются в большинстве систем. Очень хороший источник информации буквально обо всех событиях в системе приведен в приложении А справочному руководству по Oracle. Мы рекомендуем изучить это руководство, так как оно крайне важно для понимания того, что означает каждое событие ожидания. В таблице 2.1 перечисляются некоторые часто встречающиеся события, с которыми нам в последние годы часто приходилось сталкиваться при исследовании систем. Столбец таблицы 2.1 "Смысл/Релевантность" не следует рассматривать как истину в последней инстанции для конкретного события ожидания. Можно считать, что таблица 2.1 — это общее, но вовсе не исчерпывающее описание каждого события, она предназначена для использования в качестве контрольной таблицы.
Таблица 2.1.
Ожидаемые события и ситуации, к которым они относятся
Смысл/Релевантность
Имя события ожидания
buffer busy waits
db file parallel write
db file scattered read db file sequential read db file single write direct path read
Индицирует ожидание буфера в буферном кэше базы данных. Это означает, что сеанс считывает этот буфер в кэш и/или модифицирует его. Может также служить симптомом нехватки списков свободных участков таблиц, поддерживающих множество параллельно выполняющихся операций INSERT.
Индицирует ожидания, относящиеся к процессам DBWR. Может быть связан с числом конфигурированных процессов DBWR или подчиненных процессов ввода/вывода DBWR. Может также означать низкую или высокую конкуренцию устройств.
Индицирует ожидания, ассоциируемые со сканированием всей таблицы. Может означать конкуренцию ввода/вывода или чрезмерное количество операций ввода/вывода.
Индицирует (наряду с другими вещами) ожидания, ассоциируемые
со сканированием индекса. Может означать конкуренцию ввода/вывода или
чрезмерное количество операций ввода/вывода.
Индицирует ожидания, ассоциируемые с записью в заголовок во время контрольной точки. Типично для среды со слишком большим числом файлов данных.
Индицирует ожидания, ассоциируемые с разрешенным прямым
вводом/выводом. Обычно указывает на конкуренцию ввода/вывода за
устройства.
вводом/выводом. Обычно указывает на конкуренцию ввода/вывода за
устройства.
Таблица 2.1 (тлродоттжение)
Имя события Смысл/Релевантность
ожидания
direct path write To же, что и выше. Относится к операциям чтения.
enqueue Индицирует ожидания, ассоциируемые с внутренним механизмом работы с
очередями для блокировок различных ресурсов и компонентов Oracle. Полный список ситуаций, связанных с постановкой в очередь в Oracle, можно найти в Приложении В к справочному руководству по Orace.
free buffer inspected Индицирует ожидания, ассоциируемые с процессом идентификации
свободного буфера в буферном кэше базы данных для переноса в него данных.
free buffer waits Индицирует недостаток свободных буферов в буферном кэше базы данных.
Это может означать одно из двух: либо буферный кэш базы данных слишком мал, либо "грязный список" (список модифицированный блоков кэша) не переписывается на диск достаточно быстро. Если дело в этом, сконфигурируйте большее количество процессов DBWR или подчиненных процессов ввода/вывода, в зависимости от обстоятельств. Это событие
происходит, когда инспектирующее свободные буферы событие не находит ни
одного свободного буфера.
latch free Индицирует конкуренцию за защелку (внутреннюю блокировку) для
конкретного номера защелки (latch#). Убедитесь, что число защелок было настроено на максимально разрешенное значение, для чего проверьте релевантные (относящиеся к делу) параметры файла init.ora. Если проблема остается, необходимо определить, что вызывает конкуренцию за защелку. Событие latch free - это всего лишь симптом более серьезной проблемы. Например, если получающийся в результате номер защелки является защелкой библиотечного кэша (при этом коллективный пул настроен должным образом), ситуация может означать значительный объем жесткого синтаксического анализа. Это обычно является проблемой для приложений, содержащих в себе жестко закодированные значения. Необходимо либо переписать приложение, используя переменные связи, либо перейти к 0racle8i и использовать CURSOR_SHARING=force (или искать другие способы).
library cache load lock Требуется для загрузки объектов в библиотечный кэш. Такое событие ожидания может произойти, если имеет место значительное число загрузок/перезагрузок (обычно подобное происходит вследствие либо недостаточного многократного использования операторов SQL, либо из-за
неправильно выбранного размера области коллективного пула).
library cache lock Индицирует ожидания, ассоциируемые с одновременным выполнением
нескольких процессов, обращающихся к библиотечному кэшу. Может означать
неправильный выбор размера области коллективного пула, так как эту блокировку необходимо захватить для размещения объектов в библиотечном
кэше.
Таблица 2.1
(продолжение)
Имя события ожидания
Смысл/Релевантность
library cache pin
log buffer space
log file parallel write
log file single write
log file switch
(требуется архивирование)
log file switch
(незавершенная контрольная точка)
log file sync
Сообщение SQL*Net от клиента/клиенту
Индицирует ожидания, которые ассоциируются с одновременными обращениями к библиотечному кэшу и могут происходить в тех случаях, когда необходимо модифицировать или проверить конфетный обьект в библиотечном кэше.
Индицирует потенциальную проблему: не способен поддерживать
скорость записи серверными процессами в буфер журнала обновлений. Обычно означает, что имеет место проблема с размером буфера журнала (он слишком мал), или слишком медленно работает устройство (а), или имеется
конкуренция устройств, на которых размещаются работающие в онлайновом режиме журналы обновлений.
Индицирует ожидания, ассоциируемые с переписью записей протокола из
буфера журнала обновлений на диск. Обычно означает медленную работу
устройств (а) или наличие конкуренции на тех устройствах, где размещаются
работающие в онлайновом режиме журналы обновлений.
Индицирует запись в блок заголовка журнальных файлов. Может означать ожидания, возникающие во время выполнения контрольных точек.
Ожидание означает, что ARCH не работает синхронно с LGWR. Может
произойти из-за того, что онлайновые журналы обновлений слишком малы, устройства медленны или высока конкуренция за устройства (обычно
возникающая вследствие размещения журнальных файлов на тех же устройствах, что и файлы данных). Имеет смысл изучить возможность создания нескольких процессов ARCH или подчиненных процессов
ввода/вывода, в зависимости от обстоятельств.
Индицирует ожидания, ассоциируемые с неверно заданными размерами журнальных файлов (обычно слишком малыми).
Индицирует ожидания, ассоциируемые со сбрасыванием на диск буферов
журналов при выполнении операции фиксирования транзакции, Если ожидания являются устойчивыми, это может означать конкуренцию устройств,
на которых размещены онлайновые файлы журналов обновлений и/или медленную работу устройств.
Индицирует затраченное в процессе взаимодействия
пользовательского и серверного процессов. В некоторых довольно редких случаях указывает на проблемы при передаче по сети, но по большей части может быть проигнорировано. Если приложение поддерживает конфигурацию ■ARRAYSIZE (например, Oracle Forms, SQL*Plus, Рго*С и т. д.), конфигурирование ARRAYSIZE на значение, превосходящее значение по умолчанию, может потенциально уменьшить ожидания для этого события.
Таблица 2.1
(продолжение)
Имя события ожидания
Смысл/Релевантность
Сообщение SQL*Net от dblink
таймер в sksawat
transaction
undo segment extension
write complete waits
Индицирует ожидание, ассоциируемое с распределенной обработкой (выполнением SELECT из других баз данных). Это событие происходит, когда онлайновые просмотры других баз данных выполняются через DBUNKS. Если просматриваемые данные главным образом статические, их пересылка в локальную (расположенную на этой же ЭВМ) таблицу и ее обновление по мере необходимости могут дать существенное увеличение производительности.
Индицирует медленный процесс ARCH либо вследствие одновременного
выполнения множества компонентов базы данных, либо из-за недостаточного количества процессов ввода/вывода (или подчиненных процессов) для выполнения архивирования.
Индицирует ожидания, ассоциируемые с блокировкой транзакций операциями
отката.
Индицирует динамическое выделение экстентов и расширение сегментов отката. Это может означать нехватку (недостаточность) заданного числа сегментов отката или слишком малое значение оптимального числа MINEXTNTS для этих сегментов.
Индицирует ожидания, связанные с буферами, которые необходимо
переписать на диск. Такая запись может быть вызвана обычным старением
блоков из буферного кэша базы данных
переписать на диск. Такая запись может быть вызвана обычным старением
блоков из буферного кэша базы данных
Замечание
.Полезно отметить, что интерфейс ожидания Oracle (Oracle Wait Interface) не идентифицирует непосредственно события ожидания, ассоциированные с операциями с памятью, операциями ЦП и даже логическими вызовами ввода/вывода. Однако список таких событий весьма невелик, и его существование ни в коей мере не должно помешать использованию интерфейса ожидания Oracle. Дело в том, что если событие не видно в интерфейсе ожидания, это косвенно приводит к обнаружению областей, содержащих проблемы. Располагая тем, что мы ранее назвали подходом "вилки" ("двухзубым" подходом), в котором второй "зубец" представляет статистику и мониторинг операционной системы, мы обязательно найдем виновника ситуации либо в Oracle, либо в операционной системе. Крайне редко встречаются ситуации, когда проблема, пройдя через все проверки, остается не обнаруженной ни одним из "зубцов".
Очень важно
*—г Хотя нашей основной целью должно быть выполнение
корректирующих действий для событий ожидания, имеющих
значение параметра STATEWAITED_KNOWN_TIME, нужно отметить, что если в системе имеется существенное количество сеансов, ожидающих события и находящихся в состоянии (STATE) WAITED_SHORT_TIME (меньше 1/100 с), необходимо вычислить взвешенное среднее значение времени ожидания таких сеансов. Если результирующее число превышает 1/100 долю секунды, уделите внимание тем событиям, которые первоначально были проигнорированы из-за того, что у них в столбце STATE стояло значение WAITED_SHORTTIME.
Прочие источники увеличения производительности
Множество ключей к управлению производительностью Oracle можно найти в файлах трассировки и журналах предупреждений. Эти файлы служат первым сигналом о том, что что-то идет не так, как намечено. В частности, мониторинг файла предупреждений должен стать рутинной частью ежедневных работ по отслеживанию состояния базы данных. Необходимо искать любые виды ошибок. В журналах предупреждений осматривайте взаимные блокировки. Здесь перечислены все ошибки выделения памяти и пресловутые ошибки ОRACLE-00600. Некоторые из них появляются время от времени, и это можно считать нормальным явлением. Частое повторение подобных событий может стать поводом для беспокойства.
Добавление параметра LOG_CHECKPOINTS_TO_ALERT = TRUE вызовет запись в журнале предупреждений о событиях типа контрольной точки. Если новая контрольная точка начинает выполняться еще до того, как завершится предыдущая, должно появиться некое уведомление. При рутинном просмотре этих файлов иногда складывается впечатление, что экземпляр стартует, чтобы сбиться, или что разработчики пишут коды, в которых совершенно не учитываются лучшие достижения механизма блокировок Oracle.
< Предыдущая | Следующая > |
---|