分享
 
 
 

SQL Server了解你的服务器的状态

王朝mssql·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

想知道到底哪一个运行T-SQL的连接阻塞了其他的连接?是的,你可以运行sp_who或者查询syslockinfo表,但是如果你想了解更多有关如何调试这个问题的信息怎么办?例如,你如何才能判断阻塞进程运行的是哪一个T-SQL,或者阻塞进程在等待哪一个资源?

唉,对于老一些版本的SQL Server来说,要获得这些问题的答案可是不易。历史上,数据库管理系统并不是由于它的透明度而被人们所认识。系统表提供了一些可见性,数据库控制台命令(DBCC)提供得多一些,还有更多的是通过各种没有文档的渠道获得。但是要将这些资源集中到一个单个的查询中,即使是回答一个表面化的简单的问题都是一项巨大的工程。

进入数据库管理视图

如果你看过我以前写的有关SQL Server 2005 分类视图的贴士,你可以了解系统表在最后一版的数据库管理系统中进行了较大的升级。但是关于这个升级的最有趣的组件是一个叫做“动态管理视图(DMV)”的东西。尽管分类视图允许你检索有关静态数据库对象的信息,例如表和存储过程,动态管理视图却可以展示更多的动态信息。

现在你可以访问以前只能通过性能计数器访问的信息了;通过使用动态管理视图,你可以发现更多的详细信息,并且用它来做更多的事情。例如,这里有5个与查询计划存储区有关的SQL Server性能计数器,还有更多的几个应用在缓冲存储器上。但是这些计数器是合计的,他们无法告诉你,例如,哪个计划被存储了或者由于每个缓冲存储区条目引起的磁盘I/O的数量。动态管理视图可以。查看sys.dm_exec_cached_plans视图就可以获得有关查询计划存储区的信息,还有sys.dm_os_memory_cache_entries视图可以提供非常具体的缓冲存储区的信息。

与性能计数器类似,通过动态管理视图检索到的信息也不是你访问当时的最新信息。根据视图的查询情况,这些视图提供的数据每秒钟被更新了数千次。所以阅读并理解一段时间的输出的关键就是取样。如果你需要监控某种条件,那么不要通过动态管理视图来捕捉每个时刻的状态。采用常见的快照来寻找一般的或者变化的趋势。或取少量的数据不但可以帮助你头脑清醒,还可以防止可能让你的服务器崩溃的数据采集。

使用数据库管理视图

那么你可以在哪里找到这些权威的视图呢?启动SQL Server Management Studio,打开对象浏览器。找到“主”数据库,然后打开它的视图层次,然后打开系统视图。向下滚动,直到你看到以dm_开头的视图——这些就是动态管理视图了。还可以通过Table-valued函数的形式进入。打开Programmability这个层次,然后在函数下面,系统函数,最终是Table-valued函数。你可以看到有关的动态管理函数。这些函数可以在连接视图的时候用于特殊的帮助任务。

你要注意的第一件事情就是,动态管理视图是基于他们所属的10个类别命名的。例如,dm_broker视图包含了有关SQL Server Broker(代理)的信息;dm_fts视图显示了可以帮助管理员进行全文本搜索的信息。但是不要认为来自某个分类的视图就不可以加入来自其他分类的信息——这就是动态管理视图的真正强大之处。

让我们回顾本文早先提到的一个问题:你不但可以判断,一个阻塞进程运行了什么T-SQL,还可以判断这个进程在等待什么?

从“exec”(execution)视图分类开始,特别是sys.dm_exec_requests视图。通过查看blocking_session_id字段了解阻塞的进程。如果字段是非空的, session_id字段标识的那个会话就是被另一个由blocking_session_id字段标识的会话阻塞了(查看微软在线书籍了解更多详细描述)。现在,回到同一个视图,查询阻塞会话的sql_handle字段的数值。将这个字段作为sys.dm_exec_sql_text函数的输入,检索阻塞了其他进程的T-SQL连接。

现在,你如何获知被阻塞的资源?跳过“os”(SQLOS)视图分类,查询sys.dm_os_waiting_tasks视图。这个视图恰好拥有一个名为session_id的字段,——惊喜,惊喜——你可以用它来使该行与sys.dm_exec_requests视图的blocking_session_id字段产生关联。

你如何将其放在一起来找到当前哪个查询阻塞了其他的查询,还有他们在等待什么资源?以下的查询是一个不错的起始点。

SELECT

blocked_query.session_id AS blocked_session_id,

blocking_query.session_id AS blocking_session_id,

sql_text.text AS blocking_text,

waits.wait_type AS blocking_resource

FROM sys.dm_exec_requests blocked_query

JOIN sys.dm_exec_requests blocking_query ON

blocked_query.blocking_session_id = blocking_query.session_id

CROSS APPLY

(

SELECT *

FROM sys.dm_exec_sql_text(blocking_query.sql_handle)

) sql_text

JOIN sys.dm_os_waiting_tasks waits ON

waits.session_id = blocking_query.session_id

很遗憾,本文篇幅所限,只能略为涉及动态管理视图提供的强大功能的皮毛。关注本网站,阅读后续的贴士,里面包含更多有深度的场景,它可以帮助你追踪微妙的性能和利用率问题。与此同时,开始探索吧!数据库管理系统内部工作机制的这种级别的可见度对于SQL Server数据库管理员们来说,可是一个新的景象,这些信息可以加以无穷的利用。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有