文章出處

SQLSERVER:PREEMPTIVE_OS_GETPROCADDRESS等待類型的困惑

翻譯自:http://troubleshootingsql.com/2011/07/20/preemptive_os_getprocaddress-are-you-confusing-me/

PREEMPTIVE_OS_GETPROCADDRESS等待類型在SQLSERVER2008里是一個新的等待類型

這個等待類型的作用是當GetProcAddress跟蹤SQLSERVER實例調用擴展存儲過程的時候加載DLL的入口點所花費的時間

然而,這個等待類型跟蹤這個等待時間的方式有一些問題,這個問題在Rob Dorr的博客里有所記載

 

根據Twitter上面一個帖子的討論,我發現了可以證明這個問題的一個例子

我使用下面的命令去列出我的C盤下面的子目錄:

1 exec master..xp_dirtree 'C:\'

然后,我使用下面的TSQL腳本去監視系統中執行這個擴展存儲過程的那個會話的等待信息,這個TSQL腳本每隔一秒執行一次

 1 SET NOCOUNT ON
 2 WHILE (1=1)
 3 BEGIN
 4 SELECT [session_id], [status], [command], [start_time], [cpu_time], [reads], [writes], [wait_resource], [wait_time], [last_wait_type], [wait_type]
 5 FROM sys.dm_exec_requests
 6 WHERE [session_id] = 53 -- Session ID that is executing the Extended Stored Procedure
 7  
 8 WAITFOR DELAY '00:00:01'
 9 RAISERROR ('', 10, 1, N'Waits');
10  
11 END

按CTRL+T然后執行上面的SQL腳本,把結果粘貼出來

正如你在上面看到的,等待時間不斷遞增

我們能夠看到會話為了輸出下面的結果正在努力工作:

1、在SSMS里,執行這個擴展存儲過程的那個會話的結果窗口輸出執行結果

2、使用procmon這個工具跟蹤SQLSERVER進程對于C盤的文件系統的活動

 

您能夠使用SQLSERVER2008或者SQLSERVER2008R2,執行任何擴展存儲過程來重現這個問題

當我知道會話正在工作的時候,有兩樣東西我會檢查一下是否存在資源瓶頸:1、內存 2、I/O

如果一些文件系統的活動跟一些正在工作的擴展存儲過程有關。我見過的大部分問題都是因為這個等待類型引起的

 

 #sqlhelp,Extended Stored Procedures,PREEMPTIVE_OS_GETPROCADDRESS

 

如有不對的地方,歡迎大家拍磚o(∩_∩)o


文章列表


不含病毒。www.avast.com
全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()