文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络网络编程数据库用sp_lock诊断SQL Sever的性能问题
精品推荐
特别推荐
·用户登录存储过程
·SQL数据库完全使用手册
·进阶:精妙SQL语句介绍
·sql删除记录
·学习SQL语句之SQL语句大全
·数据备份失败的五个原因及解决办法
·解决SQL Server常见的七个经典问题
·SQL存储过程的概念,创建,调用,管理,删除,优点
热点TOP10
·SQL 新增/修改 表字段列的类型等
·通过优化让你的SQL运行速度明显提高
·MSSQL 通用分页存储过程的源码共享
·菜鸟必看:常用命令详解之EXP、IMP
·对暴库的一点认识
·T-SQL语句实现数据库备份与还原
·按指定参数格式化显示时间的函数
·学会三个范式快速成为数据库设计的高手

用sp_lock诊断SQL Sever的性能问题

日期:2007年7月8日 作者: 查看:[大字体 中字体 小字体]

在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年的行业经验。





上一篇:如何在SQL Server中对行进行动态编号

下一篇:新手入门--全面介绍MySQL的基础应用
相关文章:
·Java精华积累:初学者都应该搞懂的问题
·[宠物]召唤兽打书技能必须注意的问题
·解决与HTTP 500 – 内部服务器错误错误信息有关的问题
·ORACLE UPDATE 语句语法与性能分析看法
·Win2003系统安装SQL Sever2000后1433端口未开放的解释
·通过手掌看性能力高低
·在win2003下设置IIS及DNS的问题
相关软件:
·网络常见问题与故障1000例
·GMAT 解决问题汇编
·问题也疯狂 中文版
·医务人员必读:《最后诊断》
·《常见皮肤性病诊断与治疗》
·直面中国的三农问题
·WTO常见问题与解答

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot