З огляду на певний тип очікування, як дізнатися, які запити спричиняють ці очікування безпечно на виробництві сервера SQL 2008 R2?
У цьому конкретному випадку мені цікаво async_network_io
.
З огляду на певний тип очікування, як дізнатися, які запити спричиняють ці очікування безпечно на виробництві сервера SQL 2008 R2?
У цьому конкретному випадку мені цікаво async_network_io
.
Відповіді:
Мій улюблений спосіб перевірити це - використовувати чудову програму sp_WhoIsActive, що зберігається Адамом Маханічем. Ось відео про те, як його використовувати та посилання для завантаження коду:
http://www.brentozar.com/archive/2010/09/sql-server-dba-scripts-how-to-find-slow-sql-server-queries/
Проблема полягає в тому, що вам доведеться періодично запускати її, щоб перевірити результати. Якщо ви хочете періодично збирати ці дані, перегляньте навчальний посібник Кендра Літтла щодо відображення результатів sp_WhoIsActive до таблиці:
http://www.littlekendra.com/2011/02/01/whoisactive/
Нарешті, якщо ви хочете щось запустити, коли запит чекає на async_network_io, ви можете використовувати новий інструмент під назвою Extended Events. Це як точки налагодження всередині двигуна SQL Server, де ви можете зробити магію. Відверто кажучи, зараз це трохи болісно використовувати у 2008 році.
'async_wait_io' - це не тип очікування. Можливі типи очікування ASYNC%:
Кілька хороших посилань для типів очікування:
Мій запит на пошук поточних очікувань:
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 = '?'