Při ladění dotazu v SQL Serveru máme mnoho pokročilých možností, nicméně v jednoduchosti je někdy síla. Pomocí jednoduchého triku si můžeme zobrazit základní informace a námi laděném dotazu a pravidelně tak ověřovat, zda jsme při jeho ladění úspěšní či nikoliv.
Ukážeme si jak na to s několika základními sloupci pro základní analýzu. Nebude zkoumat exekuční plány ani další detaily, zajímá nás opravdu jen to, jak si dotaz vede.
Základní kód vypadá takto:
SET NOCOUNT ON DECLARE @StartTime DATETIME DECLARE @CPU INT DECLARE @TotalElapsedTime INT DECLARE @QueryMemmory INT DECLARE @Reads INT DECLARE @Writes INT DECLARE @LogicalReads INT DECLARE @RowCount INT DECLARE @LastWaitType NVARCHAR(60) SELECT @StartTime = start_time, @CPU = cpu_time, @TotalElapsedTime = total_elapsed_time, @QueryMemmory = granted_query_memory, @Reads = reads, @Writes = writes, @LogicalReads = logical_reads , @LastWaitType = last_wait_type, @RowCount = row_count FROM sys.dm_exec_requests WHERE session_id = @@SPID -- QUERY TO TEST-- SELECT COUNT(*) NumOfCols FROM sys.columns --/QUERY -- SELECT CONVERT(NVARCHAR(20), @StartTime, 114) StartTime, cpu_time - @CPU CPU, total_elapsed_time - @TotalElapsedTime TotalElapsedTime, @QueryMemmory QueryMemmory, reads - @Reads Reads, writes - @Writes Writes, logical_reads - @LogicalReads LogicalReads, last_wait_type LastWaitType, row_count - @RowCount RowCnt FROM sys.dm_exec_requests WHERE session_id = @@SPID GO
Vše je opravdu velmi jednoduché:
- Nejprve si před vykonáním samotného dotazu uložíme do proměnných stav klíčových sloupců s dynamického systémovou pohledu sys.dm_exec_requests. Pomocí podmínky WHERE session_id = @@SPID zajistíme, že si uložíme hodnoty pouze pro naše aktivní připojení.
- Vykonáme dotaz, který sledujeme.
- Znovu si načteme ze sys.dm_exec_requests hodnoty sloupců tak, jak vypadají po vykonání dotazu a odečteme od nich hodnoty před spuštěním dotazu uložené v proměnných.
Které sloupce ze systémového pohledu si přidáme, případně zda využijeme i další systémové pohledy a získáme komplexní přehled, je již jen na nás.