Waitstats 2005/2008 21 april 2012. Wat gaan we doen? • Even voorstellen • Performance problemen...
-
Upload
adam-vermeiren -
Category
Documents
-
view
216 -
download
4
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
[email protected]://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?