热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

SQLSERVER:PREEMPTIVE

SQLSERVER:PREEMPTIVE_OS_GETPROCADDRESS等待类型的困惑翻译自:troubleshootingsql.com20110720preemptive_os_getprocaddress-are-you-confusing-mePREEMPTIVE_OS_GETPROCADDRESS等待类型在SQLSERVER2008里是一个新的等待类型这个等待类

SQLSERVER:PREEMPTIVE_OS_GETPROCADDRESS等待类型的困惑 翻译自: http://troubleshootingsql.com/2011/07/20/preemptive_os_getprocaddress-are-you-confusing-me/ PREEMPTIVE_OS_GETPROCADDRESS 等待类型在SQLSERVER2008里是一个新的等待类型 这个等待类

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

推荐阅读
author-avatar
吕兵涛_836
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有