V$SQLAREA
V$SQLAREA - быстрый обзор наиболее ресурсоемких (Top N) запросов в системе за текущий период работы экземпляра базы данных
Dynamic Performance Views
Поля
SQL_ID Уникальный идентификатор запроса. SQL_TEXT Собственно текст SQL-запроса (первые 1000 символов). EXECUTIONS Общее количество выполнений запроса с момента загрузки в кэш. ELAPSED_TIME Общее суммарное затраченное время (в микросекундах) выполнения всех запусков запроса. CPU_TIME Общее время ЦП (в микросекундах). BUFFER_GETS Общее количество логических чтений блоков. DISK_READS Общее количество физических чтений с диска. PARSE_CALLS Количество вызовов разбора (парсинга) запроса. ROWS_PROCESSED Общее количество обработанных строк. USERS_EXECUTING Количество активных пользователей, выполняющих этот запрос прямо сейчас. PLAN_HASH_VALUE Идентификатор текущего используемого плана выполнения.
-- сортировка по buffer_gets SELECT sql_id, PLAN_HASH_VALUE, SQL_PLAN_BASELINE, fetches, executions, disk_reads, buffer_gets FROM V$SQLAREA order by buffer_gets desc; -- сортировка по disk_reads SELECT sql_id, PLAN_HASH_VALUE, SQL_PLAN_BASELINE, fetches, executions, disk_reads, buffer_gets FROM V$SQLAREA order by buffer_gets desc;
Топ-5 запросов по общему затраченному времени (ELAPSED_TIME)
Этот запрос найдет запросы, которые дольше всего суммарно выполнялись (включая время ожидания), что часто является лучшим показателем общего влияния на производительность системы.
select * from
(SELECT
SQL_ID,
EXECUTIONS,
-- Переводим микросекунды в секунды и округляем
ROUND(ELAPSED_TIME / 1000000, 2) AS total_elapsed_sec,
-- Среднее время выполнения в секундах
ROUND((ELAPSED_TIME / 1000000) / DECODE(EXECUTIONS, 0, 1, EXECUTIONS), 3) AS avg_elapsed_sec,
BUFFER_GETS,
DISK_READS,
SQL_TEXT
FROM
V$SQLAREA
WHERE
-- Исключаем запросы без выполнений
EXECUTIONS > 0
-- Опционально: исключаем запросы самого администратора
AND PARSING_SCHEMA_NAME != 'SYS'
ORDER BY
ELAPSED_TIME DESC)
where rownum<5;
Топ-5 запросов по использованию CPU (CPU_TIME)
Этот запрос полезен для поиска запросов, которые создают наибольшую нагрузку на процессор сервера.
SELECT
SQL_ID,
SQL_TEXT,
EXECUTIONS,
ROUND(CPU_TIME / 1000000, 2) AS total_cpu_sec,
ROUND((CPU_TIME / 1000000) / DECODE(EXECUTIONS, 0, 1, EXECUTIONS), 3) AS avg_cpu_sec,
BUFFER_GETS
FROM
V$SQLAREA
WHERE
EXECUTIONS > 0
AND PARSING_SCHEMA_NAME != 'SYS'
ORDER BY
CPU_TIME DESC
FETCH FIRST 5 ROWS ONLY;
Топ-5 запросов по логическим чтениям (BUFFER_GETS)
BUFFER_GETS — это количество блоков данных, прочитанных из кэша памяти (SGA). Высокое значение часто свидетельствует о неэффективном использовании индексов или плохом плане запроса (например, слишком частые полные сканирования таблиц).
SELECT
SQL_ID,
SQL_TEXT,
EXECUTIONS,
BUFFER_GETS,
ROUND(BUFFER_GETS / DECODE(EXECUTIONS, 0, 1, EXECUTIONS), 1) AS avg_gets_per_exec,
DISK_READS
FROM
V$SQLAREA
WHERE
EXECUTIONS > 0
AND PARSING_SCHEMA_NAME != 'SYS'
ORDER BY
BUFFER_GETS DESC
FETCH FIRST 5 ROWS ONLY;
Топ-5 запросов по физическим чтениям с диска (DISK_READS)
Физические чтения с диска — самая медленная операция. Эти запросы напрямую влияют на производительность дисковой подсистемы (I/O).
SELECT
SQL_ID,
SQL_TEXT,
EXECUTIONS,
DISK_READS,
ROUND(DISK_READS / DECODE(EXECUTIONS, 0, 1, EXECUTIONS), 1) AS avg_reads_per_exec,
BUFFER_GETS
FROM
V$SQLAREA
WHERE
EXECUTIONS > 0
AND PARSING_SCHEMA_NAME != 'SYS'
ORDER BY
DISK_READS DESC
FETCH FIRST 5 ROWS ONLY;