sql >> Databáze >  >> RDS >> Database

Hlavní použití sys.dm_os_wait_stats

Jak víte, hlavní odpovědnost správce databáze spočívá ve sledování výkonu SQL Serveru a zasahování ve stanoveném čase. Na trhu můžete najít několik nástrojů pro sledování výkonu SQL Server, ale někdy potřebujeme další informace o výkonu SQL Serveru, abychom mohli diagnostikovat a řešit problémy s výkonem. Musíme tedy mít dostatek informací o SQL Server Dynamic Management Views, abychom mohli řešit problémy se SQL Serverem.

Dynamic Management View (DMV) je koncept, který nám pomáhá objevovat metriky výkonu SQL Server Engine. DMV byl poprvé oznámen ve verzi SQL Server 2005 a poté pokračoval ve všech verzích SQL Server. V tomto příspěvku budeme hovořit o konkrétních DMV, jejichž správce databáze musí mít dostatek informací. Toto je sys.dm_os_wait_stats .

sys.dm_os_wait_stats

sys.dm_os_wait_stats podporuje základní metriky pro diagnostiku problémů s výkonem serveru SQL Server. Pokud máte nějaké problémy (CPU, paměť, I/O, zámek, Latch atd.) v SQL Server Engine, data sys.dm_os_wait_stats nás vedou k definování problému. Sledování aktivity v SQL Server Management Studio obsahuje panel s názvem „Čekání na zdroje “. „Resource Waits“ získává tyto metriky ze speciální uložené procedury. Název této dočasně uložené procedury je „#am_generate_waitstats “ a používá sys.dm_os_wait_stats. Tuto dočasně uloženou proceduru najdete v „tempdb“. V tomto bodě bych rád přidal několik poznámek o dočasně uložené proceduře. Protože tento typ uložené procedury nemá běžné použití.

Dočasně uložená procedura se neliší od trvale uložených procedur. Má dva typy:lokální a globální jako dočasné tabulky. Místní uložená procedura zůstane aktivní v aktuální relaci a po ukončení relace je zrušena. Může být vytvořen takto:

CREATE PROCEDURE #LocalTestSP
AS
PRINT Hello Local Stored Procedure

Globální uložená procedura také zůstane aktivní ve všech relacích a bude zrušena po uzavření vytvořené relace. Globální uloženou proceduru lze vytvořit jako:

CREATE PROCEDURE ##GlobalTestSP
AS
PRINT Hello Global Stored Procedure

Tip: Když otevřeme Monitor aktivity, vytvoří se #am_generate_waitstats dočasně uloženou proceduru a po uzavření ji zahodí.

Nyní se podíváme na hlavní myšlenku a podrobnosti sys.dm_os_wait_stats . Níže uvedený dotaz vrátí všechna data o SQL Serveru „Wait Statistics“. Tento dotaz je v nejčistší podobě. Je nepohodlné detekovat problémy s takovým formulářem. V následujících částech najdete užitečnější dotazy než sys.dm_os_wait_stats. Nyní vysvětlíme popis sloupců „Wait Statistics“ SQL Serveru:

SELECT *
FROM sys.dm_os_wait_stats
ORDER BY wait_time_ms DESC

Sloupec wait_type obsahuje definici nebo název statistiky čekání. data sloupce wait_type jsou pro nás významná, protože definice statistiky čekání, která označuje hlavní důvod problému. wait_tasks_count označuje frekvenci typu čekání, ke kterému došlo na serveru SQL Server.

wait_time_ms označuje celkovou dobu čekání. Měrnou jednotkou je milisekunda.

max_wait_time_ms označuje maximální dobu čekání.

signal_wait_time_ms je v MSDN popsána jako „Rozdíl mezi časem, kdy bylo čekající vlákno signalizováno, a časem, kdy začalo běžet“. Zvláště vysoká hodnota tohoto sloupce se podepisuje na tlaku CPU. Dotaz tedy čeká ve spustitelné frontě a je připraven ke spuštění, ale CPU je zaneprázdněn jinými dotazy. Z tohoto důvodu dotaz čeká ve frontě. Když jsou prostředky CPU k dispozici, CPU získá nový dotaz ze spustitelné fronty a zahájí zpracování. Stručně můžeme popsat signal_wait_time_ms jako čekací dobu v runnable frontě, což je stav, kdy je možné spustit běh.

Tip: V nejlepší praxi je několik statistik čekání nejdůležitějších než ostatní. Ty mohou být uvedeny jako:

• PAGEIOLATCH_*
• WRITELOG
• ASYNC_NETWORK_IO
• CXPACKET
• CPU
• LCK_M_*
• PREEMPTIVE_*
• PAGELATCH_*

Podívejte se na Pinal Dave nebo Paul S. Randal čekající na statistické dotazy. Ve svých dotazech odstranili několik typů statistik čekání. Níže uvedené typy čekání na zdroje lze eliminovat v sys.dm_os_wait_stats dotazy:

• BROKER_EVENTHANDLER
• BROKER_RECEIVE_WAITFOR
• BROKER_TASK_STOP
• BROKER_TO_FLUSH
• BROKER_TRANSMITTER
• CHECKPOINT_QUEUE
• CEVLR_AUTENTO_MANU>AL
• CLR_SEMAPHORE
• DBMIRROR_DBM_EVENT
• DBMIRROR_DBM_MUTEX
• DBMIRROR_EVENTS_QUEUE
• DBMIRROR_WORKER_QUEUE
• DBMIRRORING_CMD
• DISPOZICE DISPOZICE_PHDIRTY_PAGE_SEATCH_PHELP />• EXECSYNC
• FSAGENT
• FT_IFTS_SCHEDULER_IDLE_WAIT
• FT_IFTSHC_MUTEX
• HADR_CLUSAPI_CALL
• HADR_FILESTREAM_IOMGR_IOCOMPLETION
HADRAPLE_WAIT_FIDR>_FICUE_QUEBRIDLE_FIDR> • HADR_TIMER_TASK
• HADR_WORK_QUEUE
• LAZYWRITER_SLEEP
• LOGMGR_QUEUE
• MEMORY_ALLOCATION_EXT
• ONDEMAND_TASK_QUEUE
• PREEMPTIVE_HADROSSM_AUTENTH_• PREEMPTIVE_HADROSSM.
• PREEMPTIVE_OS_COMOPS
• PREEMPTIVE_OS_CREATEFILE
• PREEMPTIVE_OS_CRYPTOPS
• PREEM Ptive_os_deviceops
• preemptive_os_fileops
• preemptive_os_genericops
• preumpetive_os_libraryops
• preemptive_os_pipeops
• preemptive_wortest • PREEMPTIVE_SP_SERVER_DIAGNOSTICS
• PREEMPTIVE_XE_GETTARGETSTATE
• PWAIT_ALL_COMPONENTS_INITIALIZED
• PWAIT_DIRECTLOGCONSUMER_GETNEXT
• QDS_ASYNC_QUEUE
• QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP
• QDS_PERSIST_TASK_MAIN_LOOP_SLEEP
• QDS_SHUTDOWN_QUEUE
• REDO_THREAD_PENDING_WORK
• REQUEST_FOR_DEADLOCK_SEARCH
• RESOURCE_QUEUE
• SERVER_IDLE_CHECK
• SLEEP_BPOOL_FLUSH
• SLEEP_DBSTARTUP
• SLEEP_DBSTARTUP
• DUPLEEP_DCOMSTART SLEEP_MASTERMDREADY
• SLEEP_MASTERUPGRADED
• SLEEP_MSDBSTARTUP
• SLEEP_SYSTEMTASK
• SLEEP_TASK
• SP_SERVER_DIAGNOSTICS_SLEEP
• SQLTRACE_BUFFER>• SQLTRACE
• SQLTRACE_WAIT_ENTRIES
• UCS_SESSION_REGISTRATIO
• WAIT_FOR_RESULTS
• WAIT_XTP_CKPT_CLOSE
• WAIT_XTP_HOST_WAIT_WAIT_WAIT_WAIT_PROGRAM>• RECENZ_XTP_HOST_WAIT_WAIT_WAIT_LOG••CK_BRUS br />• WAITFOR_TASKSHUTDOW
• XE_TIMER_EVENT
• XE_DISPATCHER_WAIT
• XE_LIVE_TARGET_TVF

Tip: SQL Server začne shromažďovat data DMV při svém spuštění nebo restartu. SQL Server automaticky resetuje statistiku čekání při restartu a níže uvedený dotaz vynutí resetování statistiky čekání od posledního restartu SQL Server:

DBCC SQLPERF('sys.dm_os_wait_stats', CLEAR)

Klíčovým bodem je navíc přesnost měření čekacích statistik. V tomto bodě můžeme uvažovat o dvou přístupech:

• Resetujte statistiku čekání a znovu shromážděte statistiku čekání.

• Zachyťte dvě různé „statistiky čekání“ a změřte rozdíl hodnot.

Podle mého názoru je zachycování a ukládání statistik čekání pro jakýkoli přístup k tabulce historie lepší než jiné. Touto metodou můžete měřit zejména časový interval a neztrácet čekací statistiky historických dat.

Nyní uděláme ukázku zachycování statistik čekání a ukážeme zachycená data v Power BI s grafikou.

Vytvoříme tabulku historie pro uložení statistik čekání:

CREATE TABLE [dbo].[HistoryOfWaitStatistics](
[SQLStartTime] [datetime] NULL,
[Dt] [datetime] NOT NULL,
[WaitType] [nvarchar](60) NOT NULL,
[WaitTimeSecond] [numeric](25, 6) NULL,
[ResourcesWaitSecond] [numeric](25, 6) NULL,
[SignalWaitSecond] [numeric](25, 6) NULL
) ON [PRIMARY]

Níže uvedený skript vloží „statistiku čekání“ do tabulky historie. Tento dotaz však musíte naplánovat v SQL Server Agent pro uložení tabulky historie:

DROP TABLE IF exists #eliminate_WS
CREATE TABLE #eliminate_WS (wait_type NVARCHAR(100));
INSERT INTO #eliminate_WS VALUES ('ASYNC_IO_COMPLETION');
INSERT INTO #eliminate_WS VALUES ('CHECKPOINT_QUEUE');
INSERT INTO #eliminate_WS VALUES ('CHKPT');
INSERT INTO #eliminate_WS VALUES ('CXPACKET');
INSERT INTO #eliminate_WS VALUES ('DISKIO_SUSPEND');
INSERT INTO #eliminate_WS VALUES ('FT_IFTS_SCHEDULER_IDLE_WAIT');
INSERT INTO #eliminate_WS VALUES ('IO_COMPLETION');
INSERT INTO #eliminate_WS VALUES ('KSOURCE_WAKEUP');
INSERT INTO #eliminate_WS VALUES ('LAZYWRITER_SLEEP');
INSERT INTO #eliminate_WS VALUES ('LOGBUFFER');
INSERT INTO #eliminate_WS VALUES ('LOGMGR_QUEUE');
INSERT INTO #eliminate_WS VALUES ('MISCELLANEOUS');
INSERT INTO #eliminate_WS VALUES ('PREEMPTIVE_XXX');
INSERT INTO #eliminate_WS VALUES ('REQUEST_FOR_DEADLOCK_SEARCH');
INSERT INTO #eliminate_WS VALUES ('RESOURCE_QUERY_SEMAPHORE_COMPILE');
INSERT INTO #eliminate_WS VALUES ('RESOURCE_SEMAPHORE');
INSERT INTO #eliminate_WS VALUES ('SOS_SCHEDULER_YIELD');
INSERT INTO #eliminate_WS VALUES ('SQLTRACE_BUFFER_FLUSH ');
INSERT INTO #eliminate_WS VALUES ('THREADPOOL');
INSERT INTO #eliminate_WS VALUES ('WRITELOG');
INSERT INTO #eliminate_WS VALUES ('XE_DISPATCHER_WAIT');
INSERT INTO #eliminate_WS VALUES ('XE_TIMER_EVENT');


INSERT INTO HistoryOfWaitStatistics
SELECT 
(SELECT sqlserver_start_time FROM sys.dm_os_sys_info ) as SQLStartTime,GETDATE() AS Dt,Wait_type as WaitType,
wait_time_ms / 1000. AS WaitTimeSecond,

(wait_time_ms - signal_wait_time_ms)/1000. AS ResourcesWaitSecond,
signal_wait_time_ms/1000. AS SignalWaitSecond 
FROM sys.dm_os_wait_stats
WHERE wait_type IN(SELECT wait_type FROM #eliminate_WS)

Po uložení historických dat otevřeme Power BI a vytvoříme řídicí panel statistiky čekání.

Klikněte na Získat data a vyberte SQL Server :

Nastavte nastavení připojení a poté napište dotaz do příkazu SQL (volitelné, vyžaduje databázi) . Klikněte na OK .

Klikněte na Importovat z Marketplace

Najděte Sparkline od OKViz vizuální komponentu a Přidat Power BI

Přidejte Sparkline na panel návrhu Power BI a přetáhněte sloupce datové sady jako na obrázku níže:

Přidejte k filtrování dvě součásti tabulky:SQLStartTime a WaitType . Nakonec by měl řídicí panel vypadat takto:

Jak toDiagnosis problém s čekáním na zdroj:

V této části se zmíníme o metodice a disciplíně diagnostiky problémů s čekací statistikou. Zejména musíme zjistit jeden bod ohledně statistiky čekání:jednoduše definuje hlavní strukturu problému, ale nikdy neuvádí podrobnosti. Z tohoto důvodu musíme prozkoumat podrobnosti a důvody čekání. Proto nám „čekací statistika“ umožňuje obrátit náš výzkum tímto směrem. Poté bychom měli k definování přesných problémů použít další nástroje (PerfMon, Extended Events, monitorovací nástroje třetích stran atd.) a další DMV.

Za předpokladu, že pozorujeme ASYNC_NETWORK_IO na serveru SQL Server, toto čekání na prostředek souvisí s pomalým síťovým připojením ze strany klienta k serveru. Tyto informace však nepomohou vyřešit hlavní důvod problému, protože můžeme mít několik konfigurací sítě mezi serverem a klientskou stranou. Pro tento příklad se musíme podívat na:

• Dotazy na velké sady výsledků

• Konfigurace síťové karty

• Nastavení síťového prostředí mezi stranami serveru a stranou klienta.

• Zkontrolujte šířku pásma síťového adaptéru.

Jak můžete vidět na příkladu, potřebujeme dokončit některé úkoly, abychom přesně definovali problém. Statistiky čekání neoznačují cíl problému.

Závěry

V tomto příspěvku jsme hovořili o hlavním konceptu pohledu dynamické správy sys.dm_os_wait_stats. Zároveň jsme diskutovali o jednoduchosti použití a významných bodech, kterým je třeba věnovat pozornost.

Užitečný nástroj:

dbForge Monitor – doplněk pro Microsoft SQL Server Management Studio, který umožňuje sledovat a analyzovat výkon SQL Serveru.


  1. Sníží se výkon SQLite, pokud je velikost databáze větší než 2 gigabajty?

  2. Úvod do PL/SQL VARRAY v databázi Oracle

  3. Jak získat vstup od uživatele za běhu

  4. Jak aktualizovat primární klíč