V$SQLAREA: различия между версиями
Admin (обсуждение | вклад) |
Admin (обсуждение | вклад) |
||
| (не показаны 2 промежуточные версии этого же участника) | |||
| Строка 54: | Строка 54: | ||
ELAPSED_TIME DESC) | ELAPSED_TIME DESC) | ||
where rownum<5; | where rownum<5; | ||
| + | |||
| + | -- для Oracle 12+ вместо вложенного запроса, можно использовать конструкцию FETCH FIRST 5 ROWS ONLY; | ||
</pre> | </pre> | ||
| Строка 61: | Строка 63: | ||
<pre> | <pre> | ||
| − | SELECT | + | select * from |
| + | (SELECT | ||
SQL_ID, | SQL_ID, | ||
| − | |||
EXECUTIONS, | EXECUTIONS, | ||
ROUND(CPU_TIME / 1000000, 2) AS total_cpu_sec, | ROUND(CPU_TIME / 1000000, 2) AS total_cpu_sec, | ||
ROUND((CPU_TIME / 1000000) / DECODE(EXECUTIONS, 0, 1, EXECUTIONS), 3) AS avg_cpu_sec, | ROUND((CPU_TIME / 1000000) / DECODE(EXECUTIONS, 0, 1, EXECUTIONS), 3) AS avg_cpu_sec, | ||
| − | BUFFER_GETS | + | BUFFER_GETS, |
| + | SQL_TEXT | ||
FROM | FROM | ||
V$SQLAREA | V$SQLAREA | ||
| Строка 75: | Строка 78: | ||
ORDER BY | ORDER BY | ||
CPU_TIME DESC | CPU_TIME DESC | ||
| − | FETCH FIRST 5 ROWS ONLY; | + | ) |
| + | where rownum<5; | ||
| + | |||
| + | -- для Oracle 12+ вместо вложенного запроса, можно использовать конструкцию FETCH FIRST 5 ROWS ONLY; | ||
</pre> | </pre> | ||
| Строка 83: | Строка 89: | ||
<pre> | <pre> | ||
| − | SELECT | + | select * from |
| + | (SELECT | ||
SQL_ID, | SQL_ID, | ||
| − | |||
EXECUTIONS, | EXECUTIONS, | ||
BUFFER_GETS, | BUFFER_GETS, | ||
ROUND(BUFFER_GETS / DECODE(EXECUTIONS, 0, 1, EXECUTIONS), 1) AS avg_gets_per_exec, | ROUND(BUFFER_GETS / DECODE(EXECUTIONS, 0, 1, EXECUTIONS), 1) AS avg_gets_per_exec, | ||
| − | DISK_READS | + | DISK_READS, |
| + | SQL_TEXT | ||
FROM | FROM | ||
V$SQLAREA | V$SQLAREA | ||
| Строка 96: | Строка 103: | ||
AND PARSING_SCHEMA_NAME != 'SYS' | AND PARSING_SCHEMA_NAME != 'SYS' | ||
ORDER BY | ORDER BY | ||
| − | BUFFER_GETS DESC | + | BUFFER_GETS DESC) |
| − | FETCH FIRST 5 ROWS ONLY; | + | where rownum < 5; |
| + | |||
| + | -- для Oracle 12+ вместо вложенного запроса, можно использовать конструкцию FETCH FIRST 5 ROWS ONLY; | ||
</pre> | </pre> | ||
| Строка 105: | Строка 114: | ||
<pre> | <pre> | ||
| − | SELECT | + | select * from |
| + | (SELECT | ||
SQL_ID, | SQL_ID, | ||
| − | |||
EXECUTIONS, | EXECUTIONS, | ||
DISK_READS, | DISK_READS, | ||
ROUND(DISK_READS / DECODE(EXECUTIONS, 0, 1, EXECUTIONS), 1) AS avg_reads_per_exec, | ROUND(DISK_READS / DECODE(EXECUTIONS, 0, 1, EXECUTIONS), 1) AS avg_reads_per_exec, | ||
| − | BUFFER_GETS | + | BUFFER_GETS, |
| + | SQL_TEXT | ||
FROM | FROM | ||
V$SQLAREA | V$SQLAREA | ||
| Строка 118: | Строка 128: | ||
AND PARSING_SCHEMA_NAME != 'SYS' | AND PARSING_SCHEMA_NAME != 'SYS' | ||
ORDER BY | ORDER BY | ||
| − | DISK_READS DESC | + | DISK_READS DESC) |
| − | + | where rownum<5; | |
| + | -- для Oracle 12+ вместо вложенного запроса, можно использовать конструкцию FETCH FIRST 5 ROWS ONLY; | ||
</pre> | </pre> | ||
Текущая версия на 15:53, 9 декабря 2025
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;
-- для Oracle 12+ вместо вложенного запроса, можно использовать конструкцию FETCH FIRST 5 ROWS ONLY;
Топ-5 запросов по использованию CPU (CPU_TIME)
Этот запрос полезен для поиска запросов, которые создают наибольшую нагрузку на процессор сервера.
select * from
(SELECT
SQL_ID,
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,
SQL_TEXT
FROM
V$SQLAREA
WHERE
EXECUTIONS > 0
AND PARSING_SCHEMA_NAME != 'SYS'
ORDER BY
CPU_TIME DESC
)
where rownum<5;
-- для Oracle 12+ вместо вложенного запроса, можно использовать конструкцию FETCH FIRST 5 ROWS ONLY;
Топ-5 запросов по логическим чтениям (BUFFER_GETS)
BUFFER_GETS — это количество блоков данных, прочитанных из кэша памяти (SGA). Высокое значение часто свидетельствует о неэффективном использовании индексов или плохом плане запроса (например, слишком частые полные сканирования таблиц).
select * from
(SELECT
SQL_ID,
EXECUTIONS,
BUFFER_GETS,
ROUND(BUFFER_GETS / DECODE(EXECUTIONS, 0, 1, EXECUTIONS), 1) AS avg_gets_per_exec,
DISK_READS,
SQL_TEXT
FROM
V$SQLAREA
WHERE
EXECUTIONS > 0
AND PARSING_SCHEMA_NAME != 'SYS'
ORDER BY
BUFFER_GETS DESC)
where rownum < 5;
-- для Oracle 12+ вместо вложенного запроса, можно использовать конструкцию FETCH FIRST 5 ROWS ONLY;
Топ-5 запросов по физическим чтениям с диска (DISK_READS)
Физические чтения с диска — самая медленная операция. Эти запросы напрямую влияют на производительность дисковой подсистемы (I/O).
select * from
(SELECT
SQL_ID,
EXECUTIONS,
DISK_READS,
ROUND(DISK_READS / DECODE(EXECUTIONS, 0, 1, EXECUTIONS), 1) AS avg_reads_per_exec,
BUFFER_GETS,
SQL_TEXT
FROM
V$SQLAREA
WHERE
EXECUTIONS > 0
AND PARSING_SCHEMA_NAME != 'SYS'
ORDER BY
DISK_READS DESC)
where rownum<5;
-- для Oracle 12+ вместо вложенного запроса, можно использовать конструкцию FETCH FIRST 5 ROWS ONLY;