Код IT
← Каталог

Подсказки оптимизатору (query hints) — Мониторинг и обслуживание

Фрагмент из «Подсказки оптимизатору (query hints)»: Мониторинг и обслуживание.

SQL main.sql
-- Регулярный мониторинг производительности запросов с подсказками
-- Создание представления для отслеживания медленных запросов
CREATE VIEW slow_queries_with_hints AS
SELECT 
    query_id,
    query_text,
    execution_count,
    total_elapsed_time / execution_count AS avg_elapsed_time_ms,
    total_logical_reads / execution_count AS avg_logical_reads,
    total_physical_reads / execution_count AS avg_physical_reads,
    CASE 
        WHEN query_text LIKE '%/*+%' THEN 'Contains hints'
        ELSE 'No hints'
    END AS hint_status
FROM query_stats
WHERE total_elapsed_time / execution_count > 1000  -- Среднее время выполнения более 1 секунды
ORDER BY avg_elapsed_time_ms DESC;

-- Регулярная проверка планов выполнения для запросов с подсказками
SELECT 
    qs.query_id,
    qs.query_text,
    qp.query_plan,
    qs.last_execution_time,
    qs.execution_count
FROM query_stats qs
CROSS APPLY query_plan qp
WHERE qs.query_text LIKE '%/*+%'
  AND qs.last_execution_time > DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)
ORDER BY qs.last_execution_time DESC;
-- Регулярный мониторинг производительности запросов с подсказками
-- Создание представления для отслеживания медленных запросов
CREATE VIEW slow_queries_with_hints AS
SELECT 
    query_id,
    query_text,
    execution_count,
    total_elapsed_time / execution_count AS avg_elapsed_time_ms,
    total_logical_reads / execution_count AS avg_logical_reads,
    total_physical_reads / execution_count AS avg_physical_reads,
    CASE 
        WHEN query_text LIKE '%/*+%' THEN 'Contains hints'
        ELSE 'No hints'
    END AS hint_status
FROM query_stats
WHERE total_elapsed_time / execution_count > 1000  -- Среднее время выполнения более 1 секунды
ORDER BY avg_elapsed_time_ms DESC;

-- Регулярная проверка планов выполнения для запросов с подсказками
SELECT 
    qs.query_id,
    qs.query_text,
    qp.query_plan,
    qs.last_execution_time,
    qs.execution_count
FROM query_stats qs
CROSS APPLY query_plan qp
WHERE qs.query_text LIKE '%/*+%'
  AND qs.last_execution_time > DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)
ORDER BY qs.last_execution_time DESC;