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

Reading number is top 10 articles
ActiveReports,for,.NET,简单使用_.net资料_编程技术
不一样的项目,不一样的PHP_php资料_编程技术
用php自带函数去除html标签_php资料_编程技术
ASP.NET2.0中Treeview,的Checkboxes选中根枝叶全选中的实现方法_.net资料_编程技术
SQL,SERVER安全的相关T-SQL代码_[SQL,Server教程]
Mysql5,for,WinXP配置法_php资料_编程技术
配置Apache2+PHP5+MYSQL5_[PHP教程]
ASP.Net中保护自定义的服务器控件_.net资料_编程技术
图片地址防盗链,通过IHttpHandler实现_[Asp.Net教程]
ASP.NET,2.0功能扩展-跨页提交_[Asp.Net教程]
Reading number is top 10 pictures
30 beautiful school beauty1
The real super beauty5
Perfect small Laurie2
世界各国15岁的MM有什么不同
做运动的校花2
Embarrassing things comic collection1
这两天,中国人民到处都可以“看海”了
你是左脑型还是右脑型
The money of more than 100 countries and regions4
网上疯传的一篇小学作文《爸爸也治不了妈妈》
Download software ranking
JSP+Ajax Web development typical examples
打鸟视频
软件工程思想
Eclipse 4.2.2 For Win64
美女写真2
SQL2000 For 4IN1
The king of fighters 97(Mobile phone games-apk)
linux安装大全
小黑猫大战两米大花蛇
XML+Web+Service开发教程
归海一刀 published in(发表于) 2014/2/3 6:46:51 Edit(编辑)
用sp_lock诊断SQL Sever的性能问题_[SQL Server教程]

用sp_lock诊断SQL Sever的性能问题_[SQL Server教程]

用sp_lock诊断SQL Sever的性能问题_[SQL Server教程]

在IT专家中有一种普遍的误解,就是认为“锁定是不好的东西”,你必须尽一切可能保证数据库锁定不会使得进程无法正常运行。为了能够确保一个一致的数据库环境,在对资源进行修改时,数据库引擎必须利用一种机制来获得对资源的独占权。


SQL Server中也用锁定,它们是指为了达到这种一致性,数据库引擎用来保证每一次只有一个线程同时访问同一个资源的对象。如果不用锁定的话,各个进程同时进行数据修改就可能发生,这就会使数据库处于一种不一致的状态。这样看来,锁定就成了好东西;但是,你应该以特定的方式来计划你的应用程序,让涉及的锁定的数量降到最少。在这篇文章中,我将讨论一个让你能够分析数据库锁定问题的存储过程。


找出什么被锁定了


系统的反应迟缓意味着你应该做一些调查了。你的查找最好从测定系统发生锁定的数量和频率开始。如果你的系统环境处理事务性很高的话,这样各个应用程序争夺资源就会很常见,从而引起锁定。解决这些问题的关键就在于能够确定被锁定的资源和争夺资源的进程。


sp_lock


sp_lock这个系统存储过程与SQL Server 2000 打包在一起,它将使你对在你系统中发生的锁定有深入的了解。这个程序会从主数据库中的syslockinfo中返回与锁定相关的大量信息,而主数据库是一个包括了所有允许、转换和等待锁定请求信息的系统工作台。


让我们来看一下运行 sp_lock 程序之后,它会为我们提供什么信息:




EXECUTE sp_lock

在我的系统中,这是该存储过程返回的内容。sp_lock 返回的信息并不是一目了然的,要获得有用的数据,还需要做一些查找。但是,你也可以复制该存储过程的文本,然后创建一个新的,从而得到关于系统进程的更好的解释。(在这篇文章中,我们将集中讨论sp_lock返回的数据。)


从上面的结果我们可以看到spid、dbid、objid、indid、type、resource、mode和status字段。spid是进程标识号码,用于识别到SQL 服务器的连接。要发现哪些用户和该spid相连,你就要执行存储过程sp_who,并将spid作为一个参数传输给该程序。dbid是锁定发生的数据库,你可以在主数据库中的sysdatabases表格中找到它。字段objid用来显示在数据库中锁定发生所在的对象。要查看这个对象,你可以在主数据库中的sysobjects表格中查询指定的objid。


在以上的屏幕截图中产生的单一记录并不一定能显示正在你的工作环境中发生的真实情况。在运行这个程序时,你想要找到500到1000个甚至更多结果。每一次你执行sp_lock,都将有可能得到不同的结果,因为又发生了新的锁定,而部分旧的锁定已经被解除了。如果你发现sp_lock返回的结果中,大量的结果都有着相同的spid,很有可能该进程正在进行大型的处理,同时这些锁定可能开始阻止新事务的发生。


当你发现一个spid 获得了大量的数据库锁定时,这将有助于确定什么存储过程或语句正在运行。为了达到这个目的,运行以下 DBCC 命令:


DBCC INPUTBUFFER(spid)

这个DBCC命令将返回正在EventInfo字段中运行的语句的相关信息。


一个可靠的起点


系统运行缓慢可能说明你的表格上有大量的锁定。造成这些锁定的原因较多,如某个用户正在你的系统中运行一个相当长的查询,一个进程占用大量资源或者两个关键进程争夺同一资源,经常造成死锁。


一旦发现你认为正在减缓你系统速度的进程,应该怎么办?在大多数情况下,不能采取任何措施,只能监控系统。结束这个进程并不是明智之举,因为它包括了很多系统锁定,除非你完全肯定不会有其他的负面影响。不然的话,你就应该想办法自动分析锁定状况。还有一个解决办法就是想出一种方法,使得在一天的特定时间内,当系统锁数量达到极限时,发出通知。


你对自己的系统信息收集的越多,在解决问题时,你的优势就越大。


Tim Chapman是肯塔基州路易维尔市一家银行的SQL Server数据库管理员,他有超过7年的行业经验。


来源:网络







添加到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.