12 вариант 2 (954078), страница 21
Текст из файла (страница 21)
SQL_TRACE Будучи установленным в TRUE, заставляет записывать файл трассировки для каждого пользователя, подключившегося к базе данных. В связи с увеличением потребности в дисковом пространстве и издержек базы данных им следует пользоваться осторожно.
TIMED_STATISTICS Будучи установленным в TRUE, заставляет базу данных собирать статистику базы данных TRUE. Он вызывает непроизводительные издержки, равные 4—8 процентам.
USER_DUMP_DEST Путь каталога, где должны быть записаны файлы трассировки. 'Установив эти параметры INIT.ORA, можно вызвать утилиту SQL*Trace вручную. Если установлен параметр SQLJTRACE, вызывать SQLTrace вручную не требуется, поскольку файл трассировки будет записан автоматически, однако принято вызывать эту утилиту вручную. Чтобы вызвать SQL*Trace, используйте либо SQL, либо PL/SQL.
Используйте SQL, чтобы проанализировать определенный запрос. Например:
% sqlplus SQL> ALTER SESSION SET SQL_TRACE = TRUE;
SQL> @/tmp/enter_your_query.sql
SQL> ALTER SESSION SET SQL_TRACE = FALSE;
SQL> EXIT
Можно либо набрать запрос в подсказке SQL, либо подать его на вход из внешнего файла, содержащего запрос. -»
Во многих случаях, особенно в таких приложениях, как SQL*Forms, необходимо вызывать утилиту трассировки с использованием PL/SQL. Это особенно полезно во время работы с приложением стороннего разработчика, в коде SQL которого сложно разобраться. Для вызова SQL'Trace используйте следующий оператор PL/SQL:
BEGIN
DBMS_SESSION.SET_SQL_TRACE (TRUE);
/* Здесь должен быть код PL/SQL */
Как и при использовании SQL*Plus, трассировка собирает информацию, пока сеанс не будет отключен или выведен из активного состояния.
/* Здесь должен быть код PL/SQL */
DBMS_SESSION.SET_SQL_TRACE (FALSE) ;
END;
Полученный файл трассировки необходимо преобразовать в удобный для чтения формат. В Oracle для этой цели предусмотрена утилита TKPROF, позволяющая преобразовать необработанный файл трассировки? в удобный для чтения отчет.
Найдя файл трассировки, необходимо выполнить для него утилиту TKPROF для получения удобного для чтения вывода. Эта информация статистическая и показывает, как выполняются запросы на уровне, базы данных и операционной системы. Отчет, выработанный TKPROF, содержит показатели загрузки процессора и использования диска, а также число строк, возвращенных запросом (или запросами), которые включены в вывод файла трассировки. Можно также заставить TKPROF возвратить информацию EXPLAIN PLAN из каждого запроса в трассе. Утилиту TKPROF можно вызвать следующим образом:
% tkprof ora_4952.trc ora_4952.1og
Этот оператор получает входные данные из файла трассировки SQL*Trace ORA_4952.TRC и направляет свой вывод в файл ORA_4952.LOG. Данный конкретный оператор не вырабатывает EXPLAIN PLAN
для запросов, содержащихся в файле трассировки. Управлять объемом вырабатываемой информации позволяют дополнительные опции:
EXPLAIN Позволяет указать имя пользователя и пароль для получения EXPLAIN PLAN каждого запроса, проанализированного утилитой TKPROF
INSERT Указывает, что нужно вывести в дамп и операторы SQL в файле трассировки, и данные, содержащиеся в операторах вставки
PRINT Показывает число запросов, которые должны быть обработаны в файле трассировки, — особенно полезна для файлов трассировки, содержащих много операторов SQL RECORD Позволяет указать выходной файл, который будет содержать все операторы в файле трассировки
SORT Дает возможность управлять порядком отображения проанализированных запросов SYS Показывает, учитывать ли в выводе трассировки запросы к таблицам SYS (словарю данных)
TABLE Указывает таблицу schema, tablename для использования при выработке отчета с опцией EXPLAIN
После обработки файла трассировки утилитой TKPROF вырабатывается отчет. Например:
************************************************************
select o.ordid, p.partid, o.qty, p.cost, (o.qty * p.cost) from part p, order о where o.partid = p.partid
call count cpu elapsed disk query current rows
Parse 1 0.02 0.02 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 4 0.03 0.03 1 20 10 50
total 6 0.05 0.05 1 20 10 50
Misses in library cache during parse: 0
Misses in library cache during execute: 1
Optimizer hint: CHOOSE
Parsing user id: 22 (MERLIN)
***********************************************************
Как и при анализе отчета utibstat/utlestat и EXPLAIN PLAN, анализ результатов, выработанных TKPROF SQL*Trace, — это, скорее, искусство, чем наука. Полезны следующие рекомендации:
• Итоги столбцов query и current представляют объем логического ввода/вывода (в блоках), накопленный запросом. Сравните их с итогом столбца rows. За исключением особых случаев, число блоков логического ввода/вывода должно быть меньше числа возвращенных строк. Оптимальное соотношение составляет примерно 1:2.
• В большинстве случаев значение execute (выполнение) должно быть выше значения parse (интерпретация). Если число операций интерпретации равно числу операций выполнения, это может указывать на необходимость увеличить размер совместно используемого пула.
• Сравните объем физического ввода/вывода (итог столбца disk) с объемом логического ввода/вывода (сумма итогов столбцов query и current). Объем логического ввода/вывода должен намного превышать физический ввод/вывод.
Динамические таблицы производительности (V$)
Еще одним полезным инструментальным средством настройки базы данных являются динамические таблицы производительности, именуемые также таблицами V$ (несмотря на это название, в действитель-ности они являются представлениями). Представления V$ создаются на таблицах Х$ Oracle — структурах памяти, которые хранятся в SGA и создаются базой данных при запуске. Эти таблицы и их представления изменяются в реальном времени в процессе работы базы данных и дают DBA возможность получить всю информацию о текущем состоянии базы данных. Некоторые приложения независимых разработчиков исполььзуют таблицы V$ для доступа к данным контроля статистики или производительности. Эти представления используются также компонентом monitor программы Oracle Server*Manager. Сразу после создания базы данных к таблицам V$ может обращаться только пользователь по имени SYS (привилегированная учетная запись пользователя Oracle, владеющая таблицами V$), который может предоставить разрешения на доступ к ним другим пользователям.
Представления V$ применяются во многих приложениях, таких как резервное копирование и восстановление, в административном текущем контроле и настройке производительности. Ниже приведены некоторые наиболее широко используемые представления, которые относятся к настройке производительности:
V$DB_OBJECT_CACHE | Содержит информацию обо всех объектах базы данных, существующих в настоящее время в библиотечном кэше SGA |
V$FILESTAT | Содержит число физических операций чтения и записи, выполненных на конкретном файле данных, относящемся к базе данных. |
V$LATCH | Содержит текущую статистику по всем защелкам в базе данных |
V$LATCHHOLDER | Содержит имя текущего владельца каждой защелки, указанной в V$LATCHNAME Содержит имя каждой защелки в представлении V$LATCH |
V$LIBRARYCACHE | Содержит статистику общей производительности области библиотечного кэша SGA |
V$ROLLSTAT | Содержит статистику всех оперативных сегментов отката базы данных |
V$ROLLCACHE | Содержит статистическую информацию о производительности кэша словаря данных SGA |
V$SESSION_WAIT | Предоставляет информацию о сеансах, ожидающих другие сеансы для завершения задачи или события |
VSSESSTAT | Содержит текущую статистическую информацию для каждого активного сеанса базы данных, |
V$SESS_IO | Содержит текущую информацию логического и физического ввода/вывода для каждого активного сеанса базы данных |
V$SGASTAT | Содержит итоговую статистическую информацию для всей SGA |
VSSQLAREA | Содержит статистическую информацию о кэше курсора SGA |
V$STATNAME | Содержит имена всех статистических показателей в V$SESSTAT |
V$WA1TSTAT | Содержит информацию о конкуренции за блоки — представление активно, только если параметр TIMEDJSTATISTICS установлен в TRUE |
Поскольку накопление статистики происходит в течение определенного времени, только что запущенная база данных не содержит достаточного объема статистики для получения какой-либо информации настройки. Статистика, собранная на недавно запущенной базе данных, вводит в заблуждение и не позволяет обнаружить действительные проблемы производительности. Как правило, база данных должна поработать несколько часов, и только после этого можно приступать к сбору статистики производительности.
Ниже приведен запрос, использующий представления V$. Он отображает имя и текущее значение каждого статистического показателя базы данных. Он применим для быстрого просмотра состояния работы базы данных.
select n.statistic* , п.name , s.value
from v$statname n , v$sysstat s
where n.statistic# = s.statistic# and value > 0 /
Существует гораздо больше представлений V$, чем я смог здесь указать. Многие из них собирают статистику ввода/вывода, кэша и буферизации, весьма полезную при настройке производительности.
Настройка SGA базы данных
Проблемы приложений базы данных часто связаны с памятью и дисководами. Если производительность процессора превышает пропускную способность устройств ввода/вывода (например, дисководов), систему называют ограниченной по вводу/выводу, если наоборот — систему называют ограниченной по процессору.
Большинство систем ограничены по вводу/выводу, поэтому легко списать низкую производительность на низкую пропускную способность устройств ввода/вывода. В связи с этим многие DBA для оптимизации производительности пытаются уравновесить нагрузку и устранить конкуренцию. Однако при этом они забывают, что зачастую многие проблемы производительности усугубляются плохим управлением оперативной памятью. Нерациональное использование доступной памяти может внести свой вклад в уменьшение пропускной способности. Например, можно оптимизировать операции сортировки, чтобы они выполнялись в оперативной памяти, а не на диске, или уменьшить страничный обмен операционной системы и выгрузку процессов на диск.
Поэтому важно понимать, как работает единственная, занимающая наибольший объем оперативной памяти составная часть RDBMS Oracle — системная глобальная область (SGA). По определению, SGA, обеспечивающая работу базы данных, — это просто сочетание буферов и кэшей, хранящихся в виртуальной памяти. Для обеспечения эффективности Oracle выполняет большинство операций в памяти и записывает на диск только большими объемами, чтобы свести к минимуму потерю производительности. Это выгодно, поскольку с точки зрения разработки программного обеспечения доступ к дисководу является дорогим, а выполнение процесса в памяти — дешевым (если говорить об оплате производительности).
Как показано на рис. 1, SGA состоит из трех основных компонентов:
• Буфер журнала обновлений
• Буферный кэш базы данных
• Совместно используемая область SQL (совместно используемый пул)
РИСУНОК 1. Архитектура SGA Oracle.
Важно убедиться в том, что SGA достаточно велика, чтобы все ее объекты полностью разместились в существующей оперативной памяти системы. Она должна быть также достаточно мала, чтобы сосуществовать с другими приложениями и не занимать больше памяти, чем ей требуется. Столь же важно следить за наличием достаточного объема совместно используемой памяти — семафоров — для поддержки экземпляра базы данных. Как и во всех других аспектах настройки производительности, управление памятью сводится к соблюдению равновесия между доступными и необходимыми ресурсами и к достижению действенного компромисса.
Изучение текущей SGA