Preskočiť na obsah
Skript

Najpomalšie dotazy podľa priemerného trvania (plan cache)

Statementy z plan cache s najvyšším priemerným trvaním, s CPU a čítaniami na jedno vykonanie.

najpomalsie-dotazy-podla-priemerneho-trvania-plan-cache.sql 23 riadkov · T-SQL
Parametre skriptu doplň a kopíruj hotový skript
/* DeadlockCafe | Najpomalšie dotazy podľa priemerného trvania (plan cache)
   Účel:  Statementy z plan cache s najvyšším priemerným trvaním, s CPU a čítaniami na jedno vykonanie.
   Režim: READ ONLY | SQL Server 2016 – 2022, on-premises
*/
SET NOCOUNT ON;

DECLARE @MinExecutions bigint = {{MinExecutions:3}};

SELECT TOP (30)
       qs.execution_count, qs.last_execution_time,
       CAST(qs.total_elapsed_time / 1000.0 / NULLIF(qs.execution_count, 0) AS decimal(18,2)) AS avg_duration_ms,
       CAST(qs.max_elapsed_time / 1000.0 AS decimal(18,2))                                     AS max_duration_ms,
       CAST(qs.total_worker_time / 1000.0 / NULLIF(qs.execution_count, 0) AS decimal(18,2))  AS avg_cpu_ms,
       CAST(qs.total_logical_reads * 1.0 / NULLIF(qs.execution_count, 0) AS decimal(18,1))   AS avg_logical_reads,
       DB_NAME(t.dbid) AS compilation_database,
       SUBSTRING(t.text, qs.statement_start_offset / 2 + 1,
          ((CASE WHEN qs.statement_end_offset = -1 THEN DATALENGTH(t.text)
                 ELSE qs.statement_end_offset END - qs.statement_start_offset) / 2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS t
WHERE qs.execution_count >= @MinExecutions
ORDER BY qs.total_elapsed_time * 1.0 / NULLIF(qs.execution_count, 0) DESC;
## Kedy použiť

Keď používatelia hlásia pomalé transakcie, ale celkové CPU servera je nízke.

## Ako čítať výsledok

`avg_duration_ms` výrazne väčšie než `avg_cpu_ms` = dotaz väčšinou čaká (zámky, I/O, pamäť), nie počíta.

> [!WARNING]
> Plan cache nie je história – po reštarte, recompile alebo vyhodení plánu sa údaje strácajú. Parameter `MinExecutions` skrýva jednorazové dotazy; pri hľadaní jedného dlhého behu ho zníž na 1.

**Oprávnenia:** `VIEW SERVER STATE` (na SQL Server 2022 stačí aj `VIEW SERVER PERFORMANCE STATE`).  
**Režim:** READ ONLY · **Verzia:** SQL Server 2016 – 2022

## Súvisiace recepty

- [Top 20 dotazov podľa CPU](script.php?id=5&s=top-20-dotazov-podla-cpu)
- [Query Store – top dotazy podľa CPU](script.php?id=25&s=query-store-top-dotazy-podla-cpu)