V$SQLAREA

Материал из sysadm
Перейти к навигации Перейти к поиску

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;