Печать
Категория: Oracle Database
Просмотров: 20957

События ожидания – это статистики, значения которых увеличиваются серверным процессом (потоком), что бы указать, что он должен был ожидать завершения события, перед тем как продолжить обработку. Увеличение количества и продолжительности событий ожиданий может свидетельствовать о возникающих проблемах производительности. Мониторинг событий ожидания является важной составной частью работы администратора баз данных.

Классы событий ожидания

Для облегчения мониторинга ожиданий, все события ожидания oracle разделены на классы. Следующий список описывает каждый из этих классов:

Параметры событий ожидания

Большинство  событий ожидания имеют параметры, с помощью которых можно получить дополнительную информацию об ожидании. Некоторые из этих параметров специфичны для конкретного события ожидания, другие имеют общее предназначение. Ниже приведены наиболее часто встречающиеся общие параметры событий ожидания:

block#

Номер ожидаемого блока относительно начала файла.

break?

Если значение этого параметра равняется 0, был отправлен сброс клиенту. Ненулевое значение указывает, что было отправлено прерывание.

class

Класс блока описывает, как используется содержание блока. Например, класс 1 представляет блок данных, и класс 4 представляет заголовок сегмента.

dba

Параметр представляет из себя адрес блока данных, который в свою очередь состоит из числа файла и номера блока.

driver id

Адрес функции отсоединения используемого в настоящий момент драйвера.

file#

Номер файла базы данных.

id1

Первый идентификатор (id1) очереди с ожиданием или глобальной блокировки принимает своё значение от P2 или P2RAW. Значение идентификатора зависит от имени (P1).

id2

Второй идентификатор (id1) очереди с ожиданием или глобальной блокировки принимает своё значение от P3 или P3RAW. Значение идентификатора зависит от имени (P1).

le

Относительный индекс в V$GC_ELEMENT

mode

Параметр обычно хранится в младших байтах P1 или P1RAW и указывает на режим запроса очереди или глобальной блокировки. Существуют следующие значения этого параметра:

Значение режима

Описание
1 Null mode
2 Sub-Share
3 Sub-Exclusive
4 Share
5 Share/Sub-Exclusive
6 Exclusive

name and type

Имя или тип блокировки с очередью или глобальной блокировки может быть определены по двум старшим байтам P1 или P1RAW. Имя определяется всегда двумя символами.

session#

Идентификатор неактивного сеанса (SID).

waited

Общая сумма времени, которую ожидал сеанс, прежде чем закончиться.

Описания событий ожидания

Ниже перечислены названия событий ожидания, их краткие описания,  единицы измерения времени и параметры:

alter system set dispatcher

Сеанс выполнил оператор ALTER SYSTEM SET DISPATCHER = string и ожидает старта диспетчеров.

Время ожидания: сеанс будет ждать 1 / 100 секунды, чтобы затем проверить, стартовали ли диспетчеры. Если нет, сеанс ожидает их старта снова.

Параметры:

waited                 Показывает, сколько раз сеанс ожидал интервал в 1 / 100 секунды.

batched allocate scn lock request

Сеанс ожидает другой процесс, чтобы выделить системный номер изменения (SCN).  Если время, в течение которого приоритетный процесс ожидал получения другим процессом SCN, истекло, то такой приоритетный процесс получит SCN.

Время ожидания: составляет 1 секунду при условии, что для выделения SCN требуется меньше времени.

BFILE check if exists

Сеанс ожидает проверки на существование внешнего большого объекта (LOB).

Время ожидания: общее время, прошедшее с начала вызова exists

Параметры:  session#, waited

BFILE check if open

Сеанс ожидает открытия внешнего большого объекта (LOB).

Время ожидания: общее время, прошедшее с начала вызова isopen

Параметры:  session#, waited

BFILE closure

Сеанс ожидает закрытия внешнего большого объекта (LOB).

Время ожидания: общее время, прошедшее с начала вызова close

Параметры:  session#, waited

BFILE get length

Сеанс ожидает, чтобы проверить размер  внешнего большого объекта (LOB).

Время ожидания: общее время, прошедшее с начала вызова проверки размера

Параметры:  session#, waited

BFILE get name object

Сеанс ожидает, чтобы найти или сгенерировать внешнее имя внешнего большого объекта (LOB).

Время ожидания: общее время, прошедшее до завершения  make external file name.

Параметры:  session#, waited

BFILE get path object

Сеанс ожидает, чтобы найти или сгенерировать внешний путь внешнего большого объекта (LOB).

Время ожидания: общее время, прошедшее до завершения  make external path.

Параметры:  session#, waited

BFILE internal seek

Сеанс ожидает окончания позиционирования в пределах внешнего большого объекта (LOB).

Время ожидания: общее время, прошедшее до завершения seek.

Параметрыsession#, waited

BFILE open

Сеанс ожидает открытия внешнего большого объекта (LOB).

Время ожидания: общее время, прошедшее с начала вызова isopen.

Параметрыsession#, waited

BFILE read

Сеанс ожидает окончания чтения внешнего большого объекта (LOB).

Время ожидания: общее время, прошедшее до завершения read.

Параметрыsession#, waited

broadcast mesg queue transition

Процессы входят в "wait for broadcast mesg queue transition", когда очистка дескриптора канала публикатора обращается к надёжному  широковещательному каналу. Публикатор ответственен за перемещение сообщения в свободную очередь, но он не может это сделать, пока сообщение не находится в готовой очереди. Если сообщение всё ещё не находится в готовой очереди, то процесс ожидает при входе. Это ожидание события наиболее вероятно обнаружиться, когда процесс Oracle собирается нормально завершиться или когда PMON очищает мёртвый процесс. Переданное сообщение находится в очереди восстановления другого дескриптора канала (например, ch2).

Время ожидания: изменяется

Параметры:

channel handle -  указатель дескриптора канала публикатора

message -  указатель широковещательного сообщения

location -  число, указывающее на функцию в KSR, где процесс ожидает

>= 10.2 |

broadcast mesg recovery queue transition

Процессы входят в "wait for broadcast mesg recovery queue transition", когда очистка дескриптора канала публикатора обращается к надёжному  широковещательному каналу. Широковещательное сообщение находится в очереди восстановления другого дескриптора канала. Процесс ожидает при входе, если сообщение должно быть удалено из очереди восстановления другого дескриптора канала.  Это ожидание события наиболее вероятно обнаружиться, когда процесс Oracle собирается нормально завершиться или когда PMON очищает мёртвый процесс. Переданное сообщение находится в очереди восстановления другого дескриптора канала (например, ch2).

Время ожидания: изменяется

Параметры:

channel handle  -  указатель дескриптора канала публикатора.

message -  указатель широковещательного сообщения

location -  число, указывающее на функцию в KSR, где процесс ожидает

>= 10.2 |

buffer busy waits

Ожидание пока буфер не станет доступным. Событие происходит из-за того, что буфер  читается в буферный кэш другим сеансом (и сеанс ожидает этого чтения), или буфер находится в буферном кэше  в несовместимом режиме (то есть, другой сеанс изменяет этот буфер).

Время ожидания: Нормальное время ожидания составляет 1 секунду. Если сеанс уже ожидал буфер во время последнего ожидания, то следующее время ожидания будет 3 секунды.

Параметрыfile#, block#

Id - событие ожидания занятого буфера, вызываемое из различных мест в сеансе

buffer deadlock

Oracle в действительности не ожидает на этом событии, приоритетный процесс возвращает CPU. Поэтому возможность отловить это событие крайне мала. Это не взаимная блокировка вызванная приложением, а лишь предполагаемая взаимная блокировка на уровне кэша. Она возникает, когда слой кэша не может получить буфер в определенном режиме в пределах определенного количества времени.

Время ожидания: 0 секунд. Приоритетный процесс только возвращает CPU, после чего обычно помещается в конец CPU очереди выполнения.

Параметрыclass, mode, dba

Flag - флаг указывает на внутренние флаги, используемые сеансом, чтобы получить блок

buffer for checkpoint

Буфер не мог быть отмечен контрольной точкой, потому что некоторый процесс изменяет его. Это означает, что после ожидания, DBWR отсканирует буферный кэш снова. Данное событие могло произойти во время закрытия базы данных или после того, как пользователь сделал локальную контрольную точку. Во время этой ситуации не может быть закрыта база данных.

Время ожидания:          1 секунда.

Параметры:                     mode, dba

state – состояние указывает статус содержимого буфера

buffer# - индекс блока находящегося в буфферном кэше (V$BH)

 <= 10.1 |

buffer latch

Сеанс ожидает получения защёлки хешированной цепочки буферов (buffer hash chain).  Прежде всего, используется в подпрограммах получения дампа.

Время ожидания: 1 секунда.

Параметрыclass, mode, dba

latch addr – виртуальный адрес в SGA, где эта защёлка расположена.

chain# - индекс в массиве хешированной цепочки буферов. Когда индекс равен 0xfffffff,  приоритетный процесс ожидает защёлку LRU.

buffer read retry

Событие имеет место только тогда, когда экземпляр монтируется в разделяемом режиме (Oracle Real Application Cluster). Возникает, если во время чтения буфера его содержимое изменилось. Это означает одно из двух:

Блок будет повторно прочитан (может быть  до 3 неудачных попыток), после чего предполагается повреждение, и поврежденный блок выводится в файл трассировки.

Время ожидания: общее время чтения

Параметрыfile#, block#

checkpoint completed

Сеанс ожидает завершения контрольной точки. Событие может произойти, например, во время закрытия базы данных или во время выполнения локальной контрольной точки.

Время ожидания: 5 секунд.

cleanup of aborted processes

Когда порождаемый процесс прерывается в середине порождения, текущий сеанс должен ожидать, пока идентификатор (pid) нового процесса не заполниться. Как только pid будет заполнен, порождаемый процесс будет прерван.

Время ожидания: Обычно 3 секунды.

Параметры

location – местоположение ожидания

control file parallel write

Событие возникает тогда, когда сеанс осуществляет запись физических блоков во все контрольные файлы. Это происходит в следующих случаях:

Время ожидания: время, которое требуется, чтобы закончить все записи во все контрольные файлы.

Параметры

files – количество контрольных файлов в которые записывает сеанс

blocks – количество блоков, которые сеанс записывает в контрольный файл

requests – количество запросов ввода-вывода нужных сеансу для записи

control file sequential read

Чтение из контрольного файла. Может происходить, например при:

Время ожидания: общее время чтения.

Параметры

file# – номер контрольного файла из которого сеанс читает.

block# – номер блока в контрольном файле, с которого сеанс начинает чтение. Размер блока является физическим размером блока порта (обычно 512 байтов, у некоторых портов в UNIX может быть 1 или 2 Кбайта).

blocks – количество блоков, которые сеанс пытается прочитать.

control file single write

Ожидание происходит тогда, когда разделяемая информация контрольных файлов записывается на диск. Это атомарная операция защищаемая блокировкой с очередью (CF), для того чтобы только один сеанс  мог одновременно записывать записи в базу данных.

Время ожидания: общее время записи.

Параметры:

file# – номер контрольного файла в который сеанс записывает.

block# – номер блока в контрольном файле, с которого сеанс начинает запись. Размер блока является физическим размером блока порта (обычно 512 байтов, у некоторых портов в UNIX может быть 1 или 2 Кбайта).

blocks – количество блоков, которые сеанс пытается прочитать.

cursor: mutex S

Ожидание события возникает тогда, когда сеанс делает запрос на получения мьютекса (mutex)  курсора в разделяемом режиме, в то время как мьютекс на этот же курсор был ранее захвачен в монопольном режиме другим сеансом.

Параметры

P1 – Значение хэш-функции курсора

P2 – Значение mutex (верхние 2 байта содержат SID сеанса захватившего mutex в монопольном режиме, нижние 2 байта содержат значение 0)

P3 – Условие mutex (internal code locator) или Mutex Sleeps

cursor: mutex X

Ожидание события возникает тогда, когда сеанс делает запрос на получения мьютекса (mutex) курсора в монопольном режиме, в то время как мьютекс на этот же курсор был ранее захвачен в монопольном режиме другим сеансом или удерживается в разделяемом режиме несколькими сеансами. Для получения сеансом мьютекса на курсор в монопольном режиме, удержания мьютекса в других сеансах должны быть освобождены.

Параметры

P1 – Значение хэш-функции курсора

P2 – Значение mutex (верхние 2 байта содержат SID сеанса захватившего mutex в монопольном режиме, нижние 2 байта содержат значение 0)

P3 – Условие mutex (internal code locator) или Mutex Sleeps

cursor: pin S

Ожидание события возникает тогда, когда сеанс хочет обновить закрепление (pin) разделяемого мьютекса, в то время как другой сеанс обновляет закрепление разделяемого мьютекса для того же самого курсора. Обычно это событие наблюдается редко, так как обновление закрепления разделяемого мьютекса происходит очень быстро.

Время ожидания: микросекунды

Параметры

P1 – Значение хэш-функции курсора

P2 – Значение mutex (верхние 2 байта содержат SID сеанса захватившего mutex в монопольном режиме, нижние 2 байта содержат значение 0)

P3 – Условие mutex (internal code locator) или Mutex Sleeps

cursor: pin S wait on X

Ожидание события возникает тогда, когда сеанс запрашивает закрепление (pin) разделяемого мьютекса, в то время как другой сеанс удерживает закрепление мьютекса в монопольном режиме для того же самого курсора.

Время ожидания: микросекунды

Параметры

P1 – Значение хэш-функции курсора

P2 – Значение mutex (верхние 2 байта содержат SID сеанса захватившего mutex в монопольном режиме, нижние 2 байта содержат значение 0)

P3 – Условие mutex (internal code locator) или Mutex Sleeps

cursor: pin X

Ожидание события возникает тогда, когда сеанс делает запрос на закрепление мьютекса (mutex) курсора в монопольном режиме, в то время как закрепление мьютекса в монопольном режиме на этот же курсор был ранее получено другим сеансом или удерживается в разделяемом режиме несколькими сеансами. Для получения сеансом закрепления мьютекса в монопольном режиме на курсор, закрепления мьютекса в других сеансах должны быть освобождены.

Время ожидания: микросекунды

Параметры

P1 – Значение хэш-функции курсора

P2 – Значение mutex (верхние 2 байта содержат SID сеанса захватившего mutex в монопольном режиме, нижние 2 байта содержат значение 0)

P3 – Условие mutex (internal code locator) или Mutex Sleeps

Data Guard: process clean up

Ожидание события возникает во время аварийного завершения процесса Data Guard. Data Guard будет ждать одну секунду для освобождения ресурсов процесса.

Data Guard: process exit

Ожидание события возникает во время аварийного завершения процесса Data Guard. Data Guard будет ждать завершения процесса перед любой очисткой ресурсов процесса, которая может понадобиться. При необходимости  он будет засыпать на одну секунду до следующей проверки на завершение процесса.

Data Guard Broker: single instance

Процесс  Data Guard Broker (DMON) ожидает полной остановки других экземпляров в кластере перед продолжением операций брокера.

Время ожидания: зависит от числа экземпляров, но не превышает 30 секунд

db file parallel read

Данное событие ожидания происходит во время восстановления. Так же оно может возникать во время упреждающей выборки блоков данных в виде оптимизации (вместо того что бы выполнять множественные одноблочные чтения). Блоки базы данных должны, которые должны подлежать восстановлению читаются параллельно из базы данных.

Время ожидания: ожидание пока все операции ввода-вывода не завершаться

Параметры

files – число файлов из которых читает сеанс

blocks– общее количество блоков, которые будут  считаны

requests– общее количество запросов ввода-вывода (равное количеству блоков)

db file parallel write

Событие возникает в DBWR. Оно показывает, что DBWR выполняет параллельную запись в файлы и блоки. Когда выполняется последний ввод –вывод на диск, возникает ожидание окончания операции.

Время ожидания: Ожидание пока операция ввода-вывода не завершится

Параметры

requests - общее количество запросов ввода-вывода (равное количеству блоков)

interrupt

timeout - значение тайм-аута в сотых частях секунды (до завершения операции ввода-вывода).

db file scattered read

Событие подобно “db file sequential read” за исключением того, что сеанс читает несколько блоков данных.

Время ожидания: время требуемое для завершения всех операций ввода-вывода.

Параметрыfile#, block#

Blocks– Число блоков которые сеанс пытается считать из file#, начиная с блока block#

db file sequential read

Сеанс ожидает, пока выполняется последовательное чтение из базы данных. Это событие также используется  для восстановления контрольного файла, дампа и получения заголовков файлов данных.

Время ожидания: время, требуемое для завершения всех операций ввода-вывода.

Параметрыfile#, block#

Blocks – Число блоков, которые сеанс пытается считать (должно равняться 1).

db file single write

Событие ожидания используется при записи в заголовки файлов.

Время ожидания: фактическое время, требуемое для завершения всех операций ввода-вывода.

Параметрыfile#, block#

Blocks – Число блоков, которые сеанс пытается записать в file#, начиная с блока block#

DFS db file lock

Событие имеет место только для DBWR в Real Application Clusters. Каждый DBWR в каждом экземпляре держит глобальную блокировку (DF) в разделяемом режиме на каждый файл. Экземпляр, который пытается перевести файл в offline режим, расширяет глобальную блокировку от разделяемого до монопольного режима. Событие сигнализирует другим экземплярам, что надо синхронизировать их SGA и контрольные файлы, перед тем как файл будет переведён в  offline режим. 

Время ожидания: 1 секунда в цикле. DBWR ожидает в цикле (sleep, check) пока другие экземпляры не понизят блокировки до NULL режима.  В это время, DBWR не может выполнять другие задачи, например, такие как запись буферов.

Параметрыfile#

DFS lock handle

Сеанс ожидает получения дескриптора блокировки для запроса глобальной блокировки. Дескриптор блокировки идентифицирует глобальную блокировку. С этим дескриптором могут быть выполнены другие операции на этой глобальной блокировке (так как он идентифицирует глобальную блокировку в будущих операциях, таких как, например операции преобразования или освобождения). Глобальная блокировка поддерживается DLM.

Время ожидания: Сеанс ожидает в цикле, пока не получит дескриптор блокировки из DLM. Длительность ожидания в цикле 0.5 секунд.

Параметрыname, mode, id1, id2

direct path read

Во время операций прямого доступа, данные асинхронно читаются из файлов базы данных. На некотором этапе сеанс должен удостовериться, что весь асинхронный ввод-вывод на диск был завершён. Событие так же может произойти, если во время прямого чтения нет больше доступных слотов для хранения невыполненных запросов загрузки (запрос загрузки мог состоять из нескольких операций ввода-вывода).

Время ожидания: 10 секунд. Сеанс будет осведомлён о завершении асинхронного ввода-вывода. Сеанс не будет ожидать все 10 секунд.  Ожидание длиться в цикле, пока все операции ввода-вывода не завершатся.  

Параметры:

descriptor address - указатель на контекст незавершённых  операций прямого ввода-вывода, завершения которых ожидает сеанс.

first dba – адрес блока (dba) самой первой операции ввода-вывода в контексте, на который ссылается адрес дескриптора.

block cnt – Число корректных буферов в контексте на который ссылается адрес дескриптора.

direct path sync

Во время операций прямого доступа, данные асинхронно пишутся в файлы базы данных. В некоторый момент времени сеанс должен гарантировать, что весь ожидающий асинхронный ввод-вывод был завершён на диск. В это время Unix fsync команда, которая синхронизует данные с диском, подтверждает, что все записи завершились и все данные на диске.

Время ожидания: время, потраченное на завершение операций fsync, которое обычно является временем, потраченным, чтобы завершить ожидающий ввод-вывод.

Параметры: file#

flags - флаги используемые для отладки

direct path write

Во время операций прямого доступа, данные асинхронно пишутся в файлы базы данных. В некоторый момент времени сеанс должен гарантировать, что весь ожидающий асинхронный ввод-вывод был завершён на диск. Событие так же может произойти, если во время прямой записи нет больше доступных слотов для хранения невыполненных запросов загрузки (запрос загрузки мог состоять из нескольких операций ввода-вывода).

Время ожидания: 10 секунд. Сеанс будет осведомлён о завершении асинхронного ввода-вывода. Сеанс не будет ожидать все 10 секунд.  Ожидание длиться в цикле, пока все операции ввода-вывода не завершатся.  

Параметры:

descriptor address - указатель на контекст незавершённых  операций прямого ввода-вывода, завершения которых ожидает сеанс.

first dba – адрес блока (dba) самой первой операции ввода-вывода в контексте, на который ссылается адрес дескриптора.

block cnt – Число корректных буферов в контексте на который ссылается адрес дескриптора.

Disk file operations I/O

Событие ожидания используется для файловых операций (к примеру, open, close, seek, resize).  Оно так же может использоваться и для различных операций ввода-вывода, таких как дамп блока и доступ к файлу паролей.

Время ожидания: фактическое время, которое требуется для того, чтобы сделать ввод-вывод.

Параметры:

FileOperation – тип файловой операции

fileno – идентификационный номер файла

filetype – тип файла (для примера, файл данных, файл журнала)

dispatcher shutdown

Во время завершения работы (normal, immediate) экземпляр должен ожидать завершения работы диспетчеров. Сеанс, который инициировал завершение работы экземпляра, посылает сигналы каждому диспетчеру и ожидает завершения диспетчерского процесса.

Время ожидания: 1 секунда

Параметры:

waited - Указывает на общее время ожидания. После истечения 5 минут сеанс записывает в alert файл и файлы трассировки сообщение о возможной проблеме.

dispatcher timer

Событие в основном означает, что диспетчер неактивен и ожидает некоторой работы.

Время ожидания: 60 секунд

Параметры:

sleep time – Задаваемое время засыпания. Диспетчер быстрее возвратиться к работе, если получит сообщение от данных полученных из сети или процессов разделяемого сервера о том, что данные надо отослать обратно клиенту.

duplicate cluster key

Данное событие может возникнуть при создании нового кластерного ключа. Если обнаруживается, что другой процесс  вставил кластерный ключ в блок данных или индекса, то сеанс ожидает, чтобы потом повторить вставку ключа. При повторной попытке должен быть найден корректный кластерный ключ.

Время ожидания: 0.01 секунды

Параметры:

dba – адрес блока, в который сеанс пытается вставить кластерный ключ

enq: OW – initialization

Сеанс будет ожидать на этом событии, если он пытается инициализировать  database wallet, когда другой сеанс уже начал инициализацию.

Время ожидания:  Общее время, необходимое для инициализации контекста wallet

enq: OW – termination

Сеанс будет ожидать на этом событии, если он пытается завершить  database wallet, когда другой сеанс уже начал завершение.

Время ожидания: Общее время, необходимое для освобождения памяти  используемой контекстом wallet и завершения контекста.

enqueue

Сеанс ожидает локальной блокировки. Ожидание зависит от имени блокировки.

Время ожидания:  зависит от имени блокировки

Параметры: name, mode