All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
对C#中的TreeView添加背景图_[Asp.Net教程]
十天学会ASP.net,第三天_.net资料_编程技术
delphi类型文件声明方式
规范设计数据库应注意的14个技巧_[SQL Server教程]
正确理解PHP程序编译时的错误信息_php资料_编程技术
Zope的优点和Apache+PHP+MySQL的比较_php资料_编程技术
Sql Server 2005 数据库维护计划_[SQL Server教程]
ASP.NET服务器控件之视图状态_[Asp.Net教程]
全面接触SQL语法(5)_[SQL,Server教程]
安全技巧:用PHP,4.2书写安全的脚本_php资料_编程技术
Reading number is top 10 pictures
关于海盗的研究2
西方气质的东方美女3
徐若瑄展示美丽胸围1
2012 national geographic daily picture3
清醇靓丽的美眉
Absolutely shocked. National geographic 50 animal photographys8
男人,就要活出棱角
西游四格漫画(五)
穷哥们向美女求婚攻略
The real super beauty13
Download software ranking
艳兽都市
圣殿祭司的ASP.NET.2.0.开发详解-使用C#
The hero
Eclipse 4.2.2 For Win32
Red cliff
Proficient in JavaScript
株洲本地在线棋牌游戏
Boxer's Top ten classic battle8
虚拟机5.5.3版
Boxer's Top ten classic battle10
归海一刀 published in(发表于) 2014/2/1 0:12:02 Edit(编辑)
SQL,Server了解你的服务器的状态_[SQL,Server教程]

SQL,Server了解你的服务器的状态_[SQL,Server教程]

SQL Server了解你的服务器的状态_[SQL Server教程]

 想知道到底哪一个运行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数据库管理员们来说,可是一个新的景象,这些信息可以加以无穷的利用。


来源:网络







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.