-- =================================================================================================================== -- Collector: WaitSamplingCollector ("wait-sampling") -- =================================================================================================================== -- Hvad: Active session sampling: hvad ventende brugerrequests venter på. Bruges af tidsvindue-analysen i -- web-UI'et, ikke af nogen regel. -- Fil: src/SQLInsight.Collectors/Performance/WaitSamplingCollector.cs -- Interval: 15 sek som standard (SQLInsight:CollectorIntervals:wait-sampling) -- Versioner: SQL Server 2005 og nyere -- -- Rettigheder til agentens login (se db/permissions/grant-least-privilege.sql; [agent] = agentens login): -- GRANT VIEW SERVER STATE TO [agent]; -- SQL Server 2005-2019 -- GRANT VIEW SERVER PERFORMANCE STATE TO [agent]; -- SQL Server 2022+ (erstatter VIEW SERVER STATE) -- GRANT VIEW SERVER SECURITY STATE TO [agent]; -- SQL Server 2022+ -- -- Bruges af: Ingen regel (kun web-UI'ets analyse). -- Read-only: Ja: kun SELECT samt SET-sessionsindstillinger. Intet ændrer data, indstillinger eller objekter. -- Kørsel: Kør i SSMS som agentens login. Hver variant er sin egen batch (GO); en variant for en anden SQL Server-version -- end din kan fejle - det er forventet. Agenten kører altid med sessionsindstillingerne i _collectors/InstanceProbe.sql. -- =================================================================================================================== -- Variant: SQL Server 2008 og nyere -- Kilde: WaitSamplingCollector.Sql2008 -- Kode: src/SQLInsight.Collectors/Performance/WaitSamplingCollector.cs : WaitSamplingCollector.Sql2008 SELECT r.session_id, r.wait_type, r.wait_time, DB_NAME(r.database_id), r.blocking_session_id,CASE WHEN r.query_hash IS NULL OR r.query_hash = 0x0000000000000000 THEN NULL ELSE CONVERT(varchar(20), r.query_hash, 1) END, CAST(SUBSTRING(st.text, r.statement_start_offset / 2 + 1, CASE WHEN r.statement_end_offset = -1 THEN 4000 ELSE (r.statement_end_offset - r.statement_start_offset) / 2 + 1 END) AS nvarchar(4000)) FROM sys.dm_exec_requests r JOIN sys.dm_exec_sessions s ON s.session_id = r.session_id OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) st WHERE s.is_user_process = 1 AND r.session_id <> @@SPID AND r.wait_type IS NOT NULL AND (s.program_name IS NULL OR s.program_name NOT LIKE N'SQLInsight Pro%') GO -- Variant: SQL Server 2005 -- Kilde: WaitSamplingCollector.Sql2005 -- Kode: src/SQLInsight.Collectors/Performance/WaitSamplingCollector.cs : WaitSamplingCollector.Sql2005 SELECT r.session_id, r.wait_type, r.wait_time, DB_NAME(r.database_id), r.blocking_session_id,CASE WHEN r.sql_handle IS NULL THEN NULL ELSE sys.fn_varbintohexstr(r.sql_handle) + ':' + CAST(r.statement_start_offset AS varchar(12)) + ':' + CAST(r.statement_end_offset AS varchar(12)) END, CAST(SUBSTRING(st.text, r.statement_start_offset / 2 + 1, CASE WHEN r.statement_end_offset = -1 THEN 4000 ELSE (r.statement_end_offset - r.statement_start_offset) / 2 + 1 END) AS nvarchar(4000)) FROM sys.dm_exec_requests r JOIN sys.dm_exec_sessions s ON s.session_id = r.session_id OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) st WHERE s.is_user_process = 1 AND r.session_id <> @@SPID AND r.wait_type IS NOT NULL AND (s.program_name IS NULL OR s.program_name NOT LIKE N'SQLInsight Pro%') GO