Diberikan jenis menunggu tertentu, bagaimana Anda menemukan kueri mana yang menyebabkan mereka menunggu dengan aman pada SQL Server 2008 R2 produksi?
Dalam kasus khusus ini saya bertanya-tanya async_network_io
.
sumber
Diberikan jenis menunggu tertentu, bagaimana Anda menemukan kueri mana yang menyebabkan mereka menunggu dengan aman pada SQL Server 2008 R2 produksi?
Dalam kasus khusus ini saya bertanya-tanya async_network_io
.
Cara favorit saya untuk memeriksa ini adalah dengan menggunakan sp_WhoIsActive disimpan pro Adam Machanic yang sangat baik. Berikut video tentang cara menggunakannya dan tautan untuk mengunduh kode:
http://www.brentozar.com/archive/2010/09/sql-server-dba-scripts-how-to-find-slow-sql-server-queries/
Tangkapannya adalah Anda harus menjalankannya secara berkala untuk memeriksa hasil. Jika Anda ingin data ini dikumpulkan untuk Anda secara berkala, lihat tutorial Kendra Little tentang menangkap hasil sp_WhoIsActive ke tabel:
http://www.littlekendra.com/2011/02/01/whoisactive/
Terakhir, jika Anda menginginkan sesuatu untuk diaktifkan setiap kali permintaan menunggu async_network_io, Anda dapat menggunakan alat baru yang disebut Extended Events. Ini seperti titik debug di dalam mesin SQL Server di mana Anda dapat membuat keajaiban terjadi. Terus terang, ini agak menyakitkan untuk digunakan sekarang di tahun 2008.
'async_wait_io' bukan tipe menunggu. Kemungkinan jenis ASYNC% menunggu adalah:
Beberapa tautan baik untuk jenis tunggu:
Pergi ke kueri untuk menemukan menunggu saat ini:
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 = '?'