Waitstats 2005/2008 21 april 2012. Wat gaan we doen? • Even voorstellen • Performance problemen...

Post on 13-May-2015

216 views 4 download

Transcript of Waitstats 2005/2008 21 april 2012. Wat gaan we doen? • Even voorstellen • Performance problemen...

Waitstats 2005/200821 april 2012

Wat gaan we doen?

• Even voorstellen• Performance problemen• Een veel gebruikte aanvliegroute• Wat zijn waitstats• Execution model• De DMV’s• Hoe lang duurt een query• Waar zijn de stats te vinden• Indien een performance probleem zich aandoet• Hoe de waitstats DMV uit te vragen• Veel voorkomende waittypes• Demo• Ask

Even voorstellen

Ronald Bijl

Werkzaam met SQL Server vanaf versie 6.0

BeheerOntwikkelingBI analyse/ontwerp/bouwSQL Server Docent

r.bijl@xmsnet.nlhttp://axeprofit.blogspot.com

Performance problemen

Enige oorzaken van performance problemen

• Hardware voldoet (niet) meer• Netwerk• Verkeerde configuratie SQL Server• Verkeerde configuratie Windows Server• Code ontwikkeld op kleine datasets• Inefficiente code

Een veel gebruikte aanvliegroute

• PerfmonPLEBuffer cache hit ratioDisk latency (avg disk queue length)Page faultsTotal memory vs Target memoryFull scans/sec

• Resource monitor

• Profiler– ProfilerTSql duration– TSQL SPs

Wat zijn waitstats

• “Statistieken” die worden bijgehouden• hoe lang processen (queries) binnen SQL Server moeten wachten om de

verschillende fasen binnen het executie model te doorlopen• per wait type• cumulatief

Execution model (1)

Execution model (2)

Execution model (3)

De DMV’s

• Running list (cpu time)– -> sys.dm_exec_requests (where status = ‘running’)

query(s) welke word(en) uitgevoerd (CPU execution)

• Runnable queue (signal wait time (< 25%))– -> sys.dm_exec_requests (where status = ‘runnable’)

query(s) die uitgevoerd kunnen worden maar wachten op CPU-tijd

• Waiter list (query wait time)– -> sys.dm_os_waiting_tasks

query(s) die wachten op een resource

Hoe lang duurt een query?

Query execution time = Query Wait Time + Query Signal Time + CPU Time

Waar zijn de stats te vinden

• DMV:

SYS.DM_OS_WAIT_STATS

• Er zijn geen standaard reports voor aanwezig in de management studio

• Omdat ze cumulatief zijn: delta’s berekenen en interpreteren

Indien een performance probleem zich voordoet

Kan de situatie gereproduceerd en geisoleerd worden (test-instance)1. Clear waitstats (DBCC SQLPERF ('sys.dm_os_wait_stats', CLEAR))2. Draai de vertragende processen (indien bekend)3. Interpreteer de waitstats

Indien dit niet mogelijk is (zeer waarschijnlijk):4. Clear waitstats (DBCC SQLPERF ('sys.dm_os_wait_stats', CLEAR))5. Insert de waitstats frequent (bijvoorbeeld iedere minuut) in een usertable6. Interpreteer na enige tijd de waitstats

Hoe de waitstats DMV uit te vragen• WITH Waits AS • ( • SELECT • wait_type, • wait_time_ms / 1000. AS wait_time_s, • 100. * wait_time_ms / SUM(wait_time_ms) OVER() AS pct, • ROW_NUMBER() OVER(ORDER BY wait_time_ms DESC) AS rn • FROM sys.dm_os_wait_stats recompile• WHERE wait_type • NOT IN • ('BROKER_TASK_STOP','Total','SLEEP','BROKER_EVENTHANDLER', 'BROKER_RECEIVE_WAITFOR', 'BROKER_TRANSMITTER',• 'CHECKPOINT_QUEUE','CHKPT','CLR_AUTO_EVENT','CLR_MANUAL_EVENT','KSOURCE_WAKEUP','LAZYWRITER_SLEEP', • 'LOGMGR_QUEUE','ONDEMAND_TASK_QUEUE','REQUEST_FOR_DEADLOCK_SEARCH','RESOURCE_QUEUE','SERVER_IDLE_CHECK',• 'SLEEP_BPOOL_FLUSH','SLEEP_DBSTARTUP','SLEEP_DCOMSTARTUP','SLEEP_MSDBSTARTUP','SLEEP_SYSTEMTASK',• 'SLEEP_TASK', 'SLEEP_TEMPDBSTARTUP','SNI_HTTP_ACCEPT','SQLTRACE_BUFFER_FLUSH','TRACEWRITE',• 'WAIT_FOR_RESULTS','WAITFOR_TASKSHUTDOWN','XE_DISPATCHER_WAIT','XE_TIMER_EVENT','WAITFOR',• 'CLR_SEMAPHORE','BROKER_TO_FLUSH', 'DISPATCHER_QUEUE_SEMAPHORE','FT_IFTS_SCHEDULER_IDLE_WAIT', • 'FT_IFTSHC_MUTEX', 'XE_DISPATCHER_JOIN', 'SQLTRACE_INCREMENTAL_FLUSH_SLEEP') -- filter out additional irrelevant waits • )

SELECT convert(varchar(40),W1.wait_type) wait_type, CAST(W1.wait_time_s AS DECIMAL(12, 2)) AS wait_time_s,

CAST(W1.pct AS DECIMAL(12, 2)) AS pct, CAST(SUM(W2.pct) AS DECIMAL(12, 2)) AS running_pct

FROM Waits AS W1 INNER JOIN Waits AS W2 ON W2.rn <= W1.rn

GROUP BY W1.rn, W1.wait_type, W1.wait_time_s, W1.pct

HAVING SUM(W2.pct) - W1.pct < 95

Veel voorkomende wait types• ASYNC_IO_COMPLETION

– Wachten op IO• ASYNC_NETWORK_IO

– Vertraging in netwerk of in verwerking aanroepende applicatie• CXPACKET

– Parallelle processor afhandelingen• PAGEIOLATCH_EX

– Exclusive latches (kan niet locken in memory (buffer) door vertraagde IO)• PAGEIOLATCH_SH

– Shared latches (kan niet locken in memory (buffer) door vertraagde IO)• SOS_SCHEDULER_YIELD

– Executing task staat zijn plek af -> onderaan in de runnable queue (non-preemptive (cooperative))• Resource_Semaphore

– Memory pressure• BackupIO of BackupBuffer

– Backup loopt vertraging op, mogelijk door langzame backupmedia• WRITELOG

– Logflush na een commit of een checkpoint

Demo

Questions?