it-swarm.asia

ابحث عن الاستفسارات التي تسبب الانتظار

بالنظر إلى نوع معين من الانتظار ، كيف يمكنك العثور على الاستعلامات التي تتسبب في تلك الانتظار بأمان على خادم إنتاج SQL 2008 R2؟

في هذه الحالة بالذات أتساءل عن async_network_io.

34
Kyle Brandt

الطريقة المفضلة للتحقق من هذه هي استخدام sp_WhoIsActive proc proc ممتازة لآدم Machanic. إليك مقطع فيديو حول كيفية استخدامه ورابط لتنزيل الرمز:

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 ، فيمكنك استخدام أداة جديدة تسمى الأحداث الموسعة. إنها مثل نقاط التصحيح داخل محرك SQL Server حيث يمكنك تحقيق السحر. بصراحة ، من المؤلم قليلاً استخدامه الآن في عام 2008.

32
Brent Ozar

إن 'async_wait_io' ليس من نوع الانتظار. أنواع الانتظار المحتملة لـ ASYNC٪ هي:

  • ASYNC_IO_COMPLETION
  • ASYNC_NETWORK_IO
  • ASYNC_DISKPOOL_LOCK

بعض الروابط الجيدة لأنواع الانتظار:

انتقل إلى الاستعلام للعثور على الانتظار الحالي:

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 = '?'
14
Eric Humphrey - lotsahelp