DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Справочник по фиксированным представлениям

Несмотря на недостатки, фиксированные представления Oracle во мно­гих случаях представляют ценность для аналитика по производитель­ности. В этом разделе описан ряд представлений, понимание которых необходимо аналитику. Все представленные здесь описания объектов относятся к версии Oracle 9.0.1.0.0.
V$SQL
Не исключено, что самое важное из фиксированных представлений для аналитика по производительности - это V$SQL. Оно показывает не­сколько важных характеристик команд SQL, чьи заголовки в данный момент находятся в разделяемом пуле. Представление содержит сле­дующие столбцы:

SQL> desc v$sql

Name
Null?      Type
SQL_TEXT
VARCHAR2(1000)
SHARABLE_MEM
NUMBER
PERSISTENT_MEM
NUMBER
RUNTIME_MEM
NUMBER
SORTS
NUMBER
LOADED_VERSIONS
NUMBER
OPEN_VERSIONS
NUMBER
USERS_OPENING
NUMBER
EXECUTIONS
NUMBER
USERS_EXECUTING
NUMBER
LOADS
NUMBER
FIRST_LOAD_TIME
VARCHAR2(19)
INVALIDATIONS
NUMBER
PARSE_CALLS
NUMBER

DISK_READS
NUMBER
BUFFER_GETS
NUMBER
ROWS_PROCESSED
NUMBER
COMMAND_TYPE
NUMBER
OPTIMIZER_MODE
VARCHAR2(10)
OPTIMIZER_COST
NUMBER
PARSING_USER_ID
NUMBER
PARSING_SCHEMA_ID
NUMBER
KEPT_VERSIONS
NUMBER
ADDRESS
RAW(4)
TYPE_CHK_HEAP
RAW(4)
HASH_VALUE
NUMBER
PLAN_HASH_VALUE
NUMBER
CHILD_NUMBER
NUMBER
MODULE
VARCHAR2(64)
MODULE_HASH
NUMBER
ACTION
VARCHAR2(64)
ACTION_HASH
NUMBER
SERIALIZABLE_ABORTS
NUMBER
OUTLINE_CATEGORY
VARCHAR2(64)
CPU_TIME
NUMBER
ELAPSED_TIME
NUMBER
OUTLINE_SID
NUMBER
CHILD_ADDRESS
RAW(4)
SQLTYPE
NUMBER
REMOTE
VARCHAR2(1)
OBJECT_STATUS
VARCHAR2(19)
LITERAL_HASH_VALUE
NUMBER
LAST_LOAD_TIME
VARCHAR2(19)
IS_OBSOLETE
VARCHAR2(1)
Можно даже посмотреть, как применение переменных связывания влияет на эффективность команд SQL:
В этом запросе :len указывает длину префикса текста SQL, по которо­му определяется «схожесть» двух различных команд. Например, при
Представление V$SQL позволяет ранжировать команды SQL по объему выполняемой работы или по любому другому критерию эффективности (см. раздел «Обнаружение неэффективного SQL» ниже в этой главе). Запрос к V$SQLTEXT_WITH_NEWLINES обеспечивает получение полного тек­ста команды SQL, а не только первых 1000 байт, хранящихся в V$SQL. SQL TEXT:
:len=8, строки select salary,... и select s.program,... считаются похожи­ми, т. к. первые восемь символов в них совпадают. Обычно интересные результаты получаются при таких значениях, как 32, 64 и 128. Значе­ние :threshold определяет допустимое количество похожих команд в библиотечном кэше. Как правило, значение threshold равно трем или больше, потому что наличие всего двух схожих команд SQL в биб­лиотечном кэше не вызывает проблем. Если система выходит из-под контроля во время работы с разделяемым SQL, то можно увеличить
:threshold, чтобы поначалу сосредоточиться на исправлении лишь не­скольких неразделяемых команд.
V$SESS_IO
V$SESS_IO - это простое фиксированное представление, позволяющее измерить логический и так называемый физический ввод/вывод, по-
Информация в V$SESS_IO хорошо коррелирует co статистическими дан­ными расширенной трассировки SQL:
BLOCK_GETS
Соответствует статистике cu необработанных трассировочных дан­ных.
CONSISTENT_GETS
Соответствует статистике cr необработанных трассировочных дан­ных.
PHYSICAL_READS
Соответствует статистике p необработанных трассировочных дан­ных.
Количество операций логического ввода/вывода (LIO) равно сумме
значений BLOCK_GETS и CONSISTENT_GETS. Когда сеанс Oracle потребляет
очень много процессорного времени, а регистрируемые события ожи­дания возникают лишь изредка, возникает ощущение, что трассиров­ка сеанса «замирает». Периодическое исполнение приведенного ниже запроса позволяет следить, выполняет ли сеанс вызовы LIO в те мо­менты, когда не генерируются данные трассировки:
select block_gets, consistent_gets from v$sess_io where sid=:sid
V$SYSSTAT
Фиксированное представление V$SYSSTAT - одно из первых, которые мне довелось применять. Его структура проста:
SQL> desc v$sysstat
Каждая строка V$SYSSTAT содержит одну из статистик уровня экземп­ляра. Большинство из них - это счетчики выполнения операций с мо­мента последнего старта экземпляра. Строки V$SYSSTAT подвержены влиянию ошибок переполнения.
Денормализованная структура V$SYSSTAT позволяет легко, не устанав­ливая соединений, определить, что происходило в системе с момента последнего запуска экземпляра. Приведенный ниже запрос, выпол­ненный в Oracle9i, показывает примерно 250 значений, описывающих деятельность экземпляра на протяжении его жизни:
select name, value from v$sysstat order by 1
Следующий запрос выводит ряд значений статистики, имеющих отно­шение к разбору:
select name, value from v$sysstat where name like 'parse%'
V$SESSTAT
Как уже говорилось в главе 3, при сборе диагностических данных об­ласть операций, как правило, не должна распространяться на всю сис­тему. Представление V$SESSTAT содержит те же статистические данные, что и V$SYSSTAT, но применительно к сеансам:
Каждая строка V$SESSTAT содержит счетчик, показывающий, сколько раз выполнялось приращение соответствующей статистики с момента создания сеанса.
Представление V$SESSTAT в отличие от V$SYSSTAT не денормализовано, поэтому для получения наименования статистики необходимо соеди­нение с V$STATNAME. Приведенный запрос показывает все статистики, собранные для сеанса с момента его рождения:
Следующий запрос выводит приблизительное количество процессор ного времени (в сотых долях секунды), израсходованного данным се ансом:
V$SYSTEM_EVENT
Фиксированное представление V$SYSTEM_EVENT содержит агрегирован­ную статистику о выполнении кода, оснащенного средствами измере­ния, с момента последнего запуска экземпляра:
Каждая строка V$SYSTEM_EVENT содержит информацию о возникновении определенного события за время жизни экземпляра.
Можно заметить, что в V$SYSTEM_EVENT нет столбца MAX_WAIT. Этот полезный столбец при желании можно добавить к определению V$SYSTEM_EVENT, следуя инструкциям, приведенным в [Lewis (2001b) 577-581].
Oracle7 и Oracle8i позволяют получить статистику потребления всех ресурсов, за исключением ЦПУ, с помощью такого запроса:
В Oracle9ту же статистику, выраженную в микросекундах, дает сле­дующий запрос:
V$SESSION_EVENT
Еще раз напомню, что при сборе диагностических данных область опе­раций, как правило, не должна включать в себя всю систему. Представ­ление V$SESSION_EVENT позволяет получать диагностические данные о выполнении различных участков кода ядра для определенного сеанса:
Каждая строка V$SESSION_EVENT содержит информацию о выполнении определенного участка кода ядра Oracle («событий ожидания») для за­данного сеанса с момента его рождения. Таким образом, V$SESSION_EVENT содержит агрегированные значения данных, получаемых при расширенной трассировке SQL:
EVENT
Имя события ожидания Oracle. Обратите внимание, что все значе­ния EVENT соответствуют значениям nam в строках WAIT расширенной трассировки.
TOTAL_WAITS
Количество строк WAIT, содержащих nam='x', где - значение поля EVENT данной строки.
TIMEWAITED
Сумма значений ela для всех строк WAIT, содержащих nam='x', где -значение поля EVENT данной строки.
Фиксированное представление V$SESSION_EVENT не содержит записей о потреблении сеансом процессорного времени. За этими данными придется обращаться к V$SESSTAT.
Данные о событиях ожидания, произошедших за время существова­ния указанного сеанса Oracle9i, можно получить таким запросом:
Следующий запрос выводит данные о событиях ожидания, произо­шедших за время существования указанного сеанса Oracle8i:
V$SESSION_WAIT
Если вы спросите кого-нибудь, что такое «интерфейс ожидания», то, скорее всего, вам расскажут о V$SESSION_WAIT. В отличие от фиксиро­ванных представлений V$SYSTEM_EVENT и V$SESSION_EVENT, V$SESSION_WAIT
не накапливает данные об имевших место событиях. Зато оно позволя­ет увидеть, чем занимается указанный сеанс в данный момент:
SQL> desc v$session_wait

Name
Null?    Type
SID
NUMBER
SEQ#
NUMBER
EVENT
VARCHAR2(64)
P1TEXT
VARCHAR2(64)
P1
NUMBER
P1RAW
RAW(4)
P2TEXT
VARCHAR2(64)
P2
NUMBER
P2RAW
RAW(4)
P3TEXT
VARCHAR2(64)
P3
NUMBER
P3RAW
RAW(4)
WAIT_TIME
NUMBER
SECONDS_IN_WAIT
NUMBER
STATE
VARCHAR2(19)
Строки V$SESSION_WAIT содержат информацию о текущем состоянии се­анса. Предлагаемая V$SESSION_WAIT статистика включает:
SEQ#
Каждый раз при завершении события ядро Oracle последовательно увеличивает это значение.
WAIT_TIME
В начале измеряемого события ожидания ядро Oracle обнуляет зна­чение WAIT_TIME. Оно остается нулевым вплоть до завершения данно­го события, когда ядро присваивает ему одно из значений, приве­денных в табл. 8.2. Учтите, что в качестве единицы измерения вы­ступает сотая доля секунды, даже в Oracle9i. Столбца WAIT_TIME_MICRO нет, по крайней мере, в версиях до 9.2.0.2.1 включительно, хотя значения WAIT_TIME получены из представленных в микросекундах значений представления X$.
SECONDS_IN_WAIT
В начале измеряемого события ожидания ядро Oracle обнуляет зна­чение SECONDS_IN_WAIT. Сам сеанс никогда не изменяет это значение

 









jAntivirus