## Kedy použiť Keď aplikácia zamrzla, server má vysoké CPU alebo dotaz trvá dlhšie ako obvykle. ## Ako čítať výsledok Vysoké `cpu_ms` = request pracuje. Vysoké `elapsed_ms` pri nízkom `cpu_ms` = request väčšinou čaká – pozri `wait_type` a `blocking_session_id`. > [!WARNING] > DMV ukazuje len práve bežiace requesty, nie históriu. Hodnoty CPU a trvania nie sú synchronizované na mikrosekundu. **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 - [Aktuálne čakania na úrovni taskov](script.php?id=17&s=aktualne-cakania-na-urovni-taskov) - [sp_WhoIsActive](script.php?id=10&s=sp-whoisactive-kto-co-prave-robi-na-serveri)
Skript
Dlho bežiace požiadavky – čo práve beží
Aktuálne requesty nad zvolený čas: trvanie, CPU, čítania, čakanie, blocker a presný práve vykonávaný statement.
Parametre skriptu doplň a kopíruj hotový skript
/* DeadlockCafe | Dlho bežiace požiadavky – čo práve beží
Účel: Aktuálne requesty nad zvolený čas: trvanie, CPU, čítania, čakanie, blocker a presný práve vykonávaný statement.
Režim: READ ONLY | SQL Server 2016 – 2022, on-premises
*/
SET NOCOUNT ON;
DECLARE @MinElapsedSeconds int = {{MinElapsedSeconds:10}};
SELECT r.session_id, r.request_id,
s.login_name, s.host_name, s.program_name,
DB_NAME(r.database_id) AS database_name,
r.status, r.command, r.start_time,
r.total_elapsed_time AS elapsed_ms,
r.cpu_time AS cpu_ms,
r.logical_reads, r.reads, r.writes,
r.wait_type,
r.wait_time AS wait_ms,
r.blocking_session_id,
SUBSTRING(t.text,
(r.statement_start_offset / 2) + 1,
((CASE WHEN r.statement_end_offset = -1 OR r.statement_end_offset IS NULL
THEN DATALENGTH(t.text) ELSE r.statement_end_offset END
- r.statement_start_offset) / 2) + 1) AS active_statement,
t.text AS full_batch
FROM sys.dm_exec_requests AS r
JOIN sys.dm_exec_sessions AS s ON s.session_id = r.session_id
OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
WHERE r.session_id <> @@SPID
AND s.is_user_process = 1
AND r.total_elapsed_time >= @MinElapsedSeconds * 1000
ORDER BY r.total_elapsed_time DESC;