设为首页 收藏本站
查看: 1362|回复: 0

[经验分享] SQL SERVER 查询性能优化——分析事务与锁(三)

[复制链接]

尚未签到

发表于 2015-6-29 13:46:52 | 显示全部楼层 |阅读模式
上接SQL SERVER 查询性能优化——分析事务与锁(二)

接下来看看SP_WHO2这个系统存储过程,如果你查询这个系统存储过程的源代码,就可以发现这个系统存储过程是整理master.sys.sysprocesses系统视图中的内容。在此用sp_who2来说明一下。
第一步,在查询分析器中执行例二,例三代码。(就是上一篇文章SQL SERVER 查询性能优化——分析事务与锁(二)中的示例)--例二
  第二步,再打开一个查询分析器界面,在此界面中输入exec sp_who2,如下图,在此界面中你可以很容易的观察到锁与被锁的关联,看到进程“56”被“53”锁住。



Use test
Go
Begin tran
update book set Name='MS SQL 2008'
where bookid=1
---切换到另一个查询界面,执行以下代码
--例三
Use test
Go
select * from Book where bookid=1
go

  

DSC0000.png

你可以通过dbcc inputbuffer(53)来查看进程“53”所执行的查询语句。如下图1、2。

Sql 2008中的 wbk_pde_list表
DSC0001.png

图1
Book表
DSC0002.png
图2

当然,如果你使用SQL SERVER 2005也可以通过Microsoft SQL Server Management Studio中的“活动监视器--》进程信息”直接以鼠标双击某条进程,便可以看到此进程所执行的查询语句。如下图3。
DSC0003.png
图3
你还可以通过sp_lock系统存储过程来观察进程“53”和“56”的结果。执行如下命令
Exec sp_lock 53
Exec sp_lock 56
然后得到如下图结果:
Book表
DSC0004.png
图4

以上语句执行结果,同SQL SERVER 2005中的Microsoft SQL Server Management Studio中的“活动监视器--》按进程分类的锁”有异曲同工之处。
Sql 2005
DSC0005.png
图5
当然在Sql 2008中就只能执行以下的SQL 语句了。

Exec sp_lock 54
Exec sp_lock 55
DSC0006.png
图6

如上,图6中的Type字段如果是PAG,则Resource表示的是该分页在数据库的第几个文件上。以及分页编号。我们可以通过DBCC PAGE来观察该分布。
如果indId为1,则表示为聚集索引,则dbcc page查询出来的是整个分页的细节,如果IndId大于1,则表示为非聚集索引,则dbcc page查询出来的是索引键值与哈希值。如下图7。
Dbcc traceon(3604)
dbcc page(28,1,10683,3)

Book
DSC0007.png
图7

结合图5对象ID、说明与图7中的KeyHashValue字段相比较,就可以进一步看出什么样的记录被锁住了。
也可以结合结合图6中的RESOURCE与图7中的KeyHashValue字段相比较,就可以进一步看出什么样的记录被锁住了。
注:此处的图7不是图6的明细。



select db_name(28) 数据库名称,OBJECT_NAME(117575457) 表名
,(select name from sys.indexes where OBJECT_ID=117575457 and index_ID=54) 索引名称
  
  
DSC0008.png

另外可以打开 SQL Profiler观察多人交互情况。


综上所述,你可以从以下几方面来观察数据库是否因为锁与被锁而造成系统运行出现问题。
1.通过Microsoft SQL Server Management Studio或SP_WHO2系统存储过程来观察数据库中是否有许多进程被锁。
2.观察master.sys.sysprocesses系统视图内,被锁进程中的waittime字段的值是否异常的大。
3.SQL Profiler工具所录制的结果中,有许多attention事件,代表SQL语句执行过久没有响应,前端程序放弃执行。
4.SQL SERVER所在服务器并没有显的很忙碌。例如,CPU,内存,硬盘,网络等硬件资源使用率并不是很高,但系统的效率却不高,或是正相反,上述资源由于某个操作而持续高度使用,但是该操作一直做不完,导致它持有的资源都无法释放。
5.通过Microsoft SQL Server Management Studio、性能监视器、SQL PROFILER等结果,进行交叉分析以相互印证。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-81518-1-1.html 上篇帖子: SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据 下篇帖子: 【译】SQL Server索引进阶第六篇:书签
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表