it-swarm-eu.dev

Najděte dotazy, které způsobují čekání

Jak zjistíte, s určitým druhem čekání, které dotazy způsobují tyto čekání na produkčním serveru SQL 2008 R2 bezpečně?

V tomto konkrétním případě jsem přemýšlel o async_network_io.

34
Kyle Brandt

Můj oblíbený způsob, jak to zkontrolovat, je použít vynikající uložený proces Adam Machanic sp_WhoIsActive. Zde je video o tom, jak ho použít a odkaz ke stažení kódu:

http://www.brentozar.com/archive/2010/09/sql-server-dba-scripts-how-to-find-slow-sql-server-queries/

Úlovek je ten, že jej musíte pravidelně spouštět, abyste zkontrolovali výsledky. Pokud chcete, aby se tato data pravidelně shromažďovala, podívejte se do výuky Kendra Little o zachycení výsledků sp_WhoIsActive do tabulky:

http://www.littlekendra.com/2011/02/01/whoisactive/

A konečně, pokud chcete, aby se něco spustilo pokaždé, když dotaz čeká na async_network_io, můžete použít nový nástroj s názvem Rozšířené události. Je to jako ladicí body uvnitř SQL Serveru, kde můžete dosáhnout magie. Upřímně řečeno, je to trochu bolestivé používat hned teď v roce 2008.

32
Brent Ozar

'async_wait_io' není typ čekání. Možné typy čekání na ASYNC% jsou:

  • ASYNC_IO_COMPLETION
  • ASYNC_NETWORK_IO
  • ASYNC_DISKPOOL_LOCK

Několik dobrých odkazů pro typy čekání:

Můj dotaz na nalezení aktuálních čekání:

SELECT  req.session_id
       ,blocking_session_id
       ,ses.Host_name
       ,DB_NAME(req.database_id) AS DB_NAME
       ,ses.login_name
       ,req.status
       ,req.command
       ,req.start_time
       ,req.cpu_time
       ,req.total_elapsed_time / 1000.0 AS total_elapsed_time
       ,req.command
       ,req.wait_type
       ,sqltext.text
FROM    sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext
JOIN    sys.dm_exec_sessions ses
        ON ses.session_id = req.session_id
WHERE req.wait_type IS NOT NULL
--WHERE req.wait_type = '?'