Чтобы получить самое полное представление о том, что именно мешает настраиваемой системе показать оптимальную производительность, нужно поближе познакомиться с динамическим представлением производительности Это представление предлагает взгляд с высоты птичьего полета на все события в системе Oracle. И хотя в V$SYSTEM_EVENT нет специфической информации уровня сеанса (текущей или из прошлых прогонов), в нем
суммируются все ожидания, начиная с момента последнего запуска экземпляра.
Имеющаяся в этом динамическом представлении статистика обнуляется при каждом запуске экземпляра. По этой причине информацию из этого и всех других представлений V$ необходимо выбирать через какие-то интервалы времени.
• Столбцы динамического представления производительности V$SYSTEM_EVENT содержат следующую информацию:
• Event Имя события. Наиболее типичными событиями являются ожидание постановки в очередь, ожидание типа "буфер занят", ожидание "защелка свободна", ожидание прямого чтения из файла БД, ожидание последовательного чтения из файла БД и ожидание типа
"буфер свободен".
Total_Waits Общем число ожиданий названного выше события с момента запуска экземпляра.
Total_Timeouts Общее число для указанного выше события с момента запуска экземпляра.
'• Time_Waited Общее время ожидания (в сотых долях секунды, эта
единица также известна под именем данного события для
единица также известна под именем данного события для
всех сеансов, имевших место после последнего запуска экземпляра.
• Average ...Wait Среднее время ожидания (в сотых долях секунды) данного события для всех сеансов, имевших место после последнего запуска экземпляра. AverageWait = (time_waited/total_waits).
Приведенный ниже скрипт поможет при определении дельты текущих ожида-
ний внутри временного интервала каждого из ожидаемых событий в
системе (другими словами, приращение измеряемой величины. —
ний внутри временного интервала каждого из ожидаемых событий в
системе (другими словами, приращение измеряемой величины. —
Прим. пер.):
С! table BEGIN .SYS.EVENT;
drop table END_SYS_EVENT; /* Create Begin Table at Time T1 »/ create table BEGIN_SYS_EVENT as select * from V$SYSTEM EVENT; /* Wait n seconds or n minutes */ /* Create End Table at Time T2 */ .create table END_SYS_EVENT as
select * from V$SYSTEM_EVENT; /* View delta numbers for wait events between Begin (T1) and End (T2) */ select T1. Event, (T2.Total_Waits-T1.Total.Waits) "Delta Waits",
(T2.Total_Timeouts-T1.Total_Timeouts) "Delta Timeouts",
(T2.Time Jtaited-T1.Time Jtfaited) "Delta Тшз Waited",
(T2.Average_Wait-T1.Average_Wait) "Delta Average Wait"
from BEGIN_SYS_EVENT-T1, END_SYS_EVENT T2 where T1.Event =
12.
Event;После просмотра этой информации легко выбрать представляющие интерес области. Посмотрите на элементы с самыми большими временами ожидания и попытайтесь распределить их по категориям. Может быть, это ориентированные на ввод/вывод события, вроде выборочного чтения файла БД, последовательного чтения файла БД или ожидания свободного буфера? Или же это привязанные к памяти события типа ожидания "буфер занят"? Теперь перейдем к системным ресурсам, нуждающимся в увеличении. Но прежде чем приступить к изменению параметров системы, нужно ознакомиться с дополнительными представлениями V$.
Рассмотрим V$SESSION_EVENT
Представление V$SESSION_EVENT предлагает ту же информацию, что и V$SYSTEM_EVENT, но на уровне сеанса. Конечно, в нем содержатся сведения о сеансе, например SID. Если использовать их для соединения с V$SESSION, можно увидеть, как работают индивидуальные сеансы. Искать в
те же самые события, которые были признаны проблемными на системном
уровне, — это хорошая идея. Иногда удается обнаружить, что многие события системного уровня можно свести всего к одному или нескольким сеансам, в рамках которых выполняются одни и те же или аналогичные работы. Вот пример простого запроса для погружения на уровень сеансов:
Select S. User-name. 8 Program. 8 Si:,H::s.
SE.Event, SE.Total_Waits, SE.Total_Timeouts, SE.Time_Waited, SE.Average_Wait
from V$SESSION S, V$SESSION_EV£NT SE where S.Sid = 8t SjcI and SE. Event not like -SOUNetSS' and 3.Status = 'active' and S.Username is not null;
Замечание
Из результатов предыдущего запроса исключена информация, у которой имя пользователя в V$SESSION содержит значение NULL. Если мы хотим увидеть, какие события связаны с такими фоновыми процессами, как PMON и SMON, эту строку следует удалить. После просмотра выходных данных V$SESSION_EVENT и сравнения результатов с V$SYSTEM_EVENT нам может понадобиться погрузиться еще глубже.
Ниже приведен образец форматированных выходных данных предыдущего
запроса без столбцов Program Name и TimeOuts:
□ USERNAME STATUS EVENT TOTAL_WAITS TIME_WAITED AVERAGE_WAIT
UREG ACTIVE db file scattered read 15 10 ,66666667
AREG ACTIVE latch free 12 27 ,44444444
< Предыдущая | Следующая > |
---|