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

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

[复制链接]

尚未签到

发表于 2015-6-29 13:48:14 | 显示全部楼层 |阅读模式
一、使用工具观察与分析数据库中锁信息
      对于并发系统、对于有大量读写数据库操作的业务系统等,当多人同时访问数据库时,最复杂的情况之一就是大量的事务与资源纠缠在一起,相互被锁而彼此等待,也称为死锁。当数据库中出现很多很多锁时,系统瞬间就无法提供正常服务。此时观察系统资源的使用情况,会发现CPU使用率不高,内存占用量也不高,还有很多未使用的内存,网络带宽也充足,硬盘也不繁忙,通过数据库管理工具查询的话,SQL SERVER中的数据也正常无误,但是使用系统的用户访问此数据库时却要需要等很多久很久,更多的就出现连接超时,数据库无响应。
      此现象类似高速公路上有大量的车辆进入,而在收费口却只开了一个、二个。造成收费口的车辆拥堵,而后方却又有大量的车辆涌入,这时所有的车辆都会慢下来,驾驶员彼此再减速刹车互相等待,最后导致后方的车子会被迫停下来,形成高速公路停车场。(就如第一次节假日高速公路免费通行那天,即2012年国庆高速公路大堵车的情形,高速公路成停车场)
      如果数据库中在设计时,设计不当,设计有过热数据表时,也就是所有应用程序的访问行为都跟某张数据表有关,甚至集中访问某些字段,这就像前述例子中的所有车辆都在同一地点(高速公路收费口)驶上高速公路。这时耗时与快速的两种访问行为混合在一起,就像大货车与小轿车一起争车道,很容易发生彼此锁定,形成死锁而动弹不得的情况。
      此类性能延迟现象,尤其在数据使用一段较长时间之后容易发生,当新系统刚上线时,或SQL语句写的不好,如Select * from SaleInfo 且没有where条件,初期因数据量不大,可以瞬间取回结果而不影响别人。但当系统使用一段时间之后,数据库中的数量增加,使用人数增多,使用方式改变。不好的SQL语句就出现运行迟缓,这时数据库开始积聚等待处理的需求,也就是彼此干扰而造成锁定,交互作用后,可能瞬间瘫痪整个系统。当你观察当前数据库的锁定时,可能会发现存在几千个锁定,很难理出头绪。
       本文首先来讨论可以使用哪些工具来观察与分析SQL SERVER中的锁信息。当然,所有的性能调校都需要先了解情况,最好是可重复发生的情景,例如在每天什么时间,多少用户上线后,执行了什么样的功能后,等等。先通盘了解情况,然后评估SQL SERVER的问题,再进一步深入观察SQL SERVER。
第一步,使用SQL SERVER提供图形界面工具观察哪些进程被加锁。
1 ) SQL SERVER 2005可以通过Microsoft SQL Server Management Studio的“管理--》活动监视器”--》“右键”--》“进程信息”,这里呈现连接、锁定的各种细节。如下图1。
DSC0000.png
                                                                             图1


2) SQL SERVER 2005 的Microsoft SQL Server Management Studio提供图形界面工具中的信息不会自动更新。刷新“活动监视器”界面中的内容,需要手动使用鼠标点击上方工具栏上的“刷新”按钮。如下图2,是未点击“刷新”按钮之前的显示的内容,图3,是点击“刷新”按钮之后的,显示的内容。

DSC0001.png
        图2
DSC0002.png
        图3

2) SQL SERVER 2005中可以通过下图中的设置,设置成自动更新的时间周期。如下图4。

DSC0003.png
                               图4


4) SQL SERVER 2005的Microsoft SQL Server Management Studio中的“活动监视器--》进程信息”提供相当多的信息,其中“等待类型”与“阻塞者”可呈现进程彼此的关系及进程的状态信息。
如果要查询“锁”的细节信息,则可以点击右键窗口中的“活动监视器--》按进程分类的锁”及“活动监视器--》按对象分类的锁”两个标记进行观察。
活动监视器--》按进程分类的锁
如下图5。
DSC0004.png
                                               图5
活动监视器--》按对象分类的锁
如下图6。
DSC0005.png
                                                图6
  
  接下来说一下SQL SERVER 2008中的活动监视器的使用:
1) SQL SERVER 2008的活动监视器就不在管理中了。一、点击工具栏上的图标 DSC0006.png 。二、使用右键点击数据库服务器,如下图7。然后都会出现如图8的图形界面工具。
DSC0007.png

                图7
DSC0008.png
                       图8
  
2) SQL SERVER 2008中默认就是自动更新的,自动更新时间间隔为10秒。可以通过下图中的设置,设置成自动更新的时间周期。如下图9。右键单击“概述”,选择“刷新间隔”,然后选择活动监视器获取新的实例信息所用的间隔。

DSC0009.png
          图9


3) SQL SERVER 2008的Microsoft SQL Server Management Studio中的“活动监视器--》进程”只提供了一些基本的信息,其中“等待类型”与“阻塞者”可呈现进程彼此的关系及进程的状态信息。所提供的锁定进程的信息没有SQL SERVER 2005中所提供的详细。

DSC00010.png

                                      图10

运维网声明 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-81520-1-1.html 上篇帖子: 【译】SQL Server索引进阶第六篇:书签 下篇帖子: 学习之路十二:SQL Server操作XML以及遇到的问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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