zoukankan      html  css  js  c++  java
  • SQLSERVER:PREEMPTIVE_OS_GETPROCADDRESS等待类型的困惑

    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

  • 相关阅读:
    #2019120500009-LG 数据结构 优先队列(1)
    #2019120500008-LG 数据结构 栈(1)
    2019D1T1 格雷码
    #2019120500006-LG 迷宫
    #2019120500004-LG 单词方阵
    #2019110700005
    hdu 1827强连通分量
    HDU 5691 状压dp
    HDU 4734--基础数位dp(递推)
    HDU 4638--莫队算法
  • 原文地址:https://www.cnblogs.com/lyhabc/p/3437350.html
Copyright © 2011-2022 走看看