`
SQL专家云技术团队
  • 浏览: 17661 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【精华】SQL SERVER——阻塞与等待

阅读更多

前言

  应用系统承载着大量的业务,随之而来的是复杂的业务逻辑,在数据库上的表现就是有着大量的不同种类的SQL语句。

  SQL语句执行的快慢又与阻塞等待有着密不可分的原因。

  系统慢可能有很多种原因,硬件资源不足,语句不优化,结构设计不合理,缺少必要的运维方式。所有的这些问题都可以在阻塞与等待中看出端倪,发现并解决问题。

  今天这篇我们主要讲述怎么样发现并解决系统的阻塞和等待。

场景描述

  您的系统是否有这样的问题?

  1. 系统运行缓慢,很多功能需要几十秒才能呈现结果,用户体验极差,领导们不断施压,作为系统的负责人,只知道系统慢又不知道慢在哪里?我们迟迟不能解决问题,领导已经对我们怨声载道了或者已经慢习惯了,不再反馈了。
  2. 系统的功能运行缓慢,在生产环境中语句运行时间很长,但是在测试环境或者单独拿出这条语句运行的却很快?这好像不科学呀?
  3. 我对数据有较多的了解,我能查出系统的等待,但是我不知道这些等待意味着什么,百度的答案五花八门解决不了我的问题。
  4. 我能找到等待,也能解决这部分等待,但只是通过一些脚本,不能全面了解现状,只能东一锤子西一棒子的游击战。
  5. 我是专家问题我都能解决,但不能给领导一个直观的展现。

系统等待简介

  一个好的SQL语句就好比一辆时速180的好车,好的系统硬件(CPU,内存,磁盘)就好比平坦宽阔的马路。看似好车配好路,一定可以开的很快了!其实还忽略了一点!当你驾驶一辆法拉利跑在北京宽阔的三环上,就算你是老炮中的“三环十二少“,早高峰你能开到多少? 北京的早高峰!北京的早高峰!

  这个例子就引出了系统阻塞和等待的概念,红灯(硬件等待,如IO等待),这就是正常的等待。另外一辆车在你前面不走了或开的很慢,那么你也只能等待(也可以说成你被他阻塞了)!

  一张图告诉你系统的主要等待类型及解决思路:

  

问题诊断

  任何问题的诊断都要从全局的角度考虑,最忌讳的就是看到一个指标高就冒然定位问题,然后以偏概全的去分析问题。

  一个问题点可能涉及到很多部分,所以我们首先要从全局的角度定位系统问题,阻塞也是一样,到底系统中存在哪些类型的阻塞,哪些是主因,哪些是关联原因,哪些是次要的。

  全局定位阻塞与等待  

  首先我们要关心数据库中有哪些等待类型

  

  注:这部分呈现的是系统中的等待情况,和使用脚本类似,已经排除了不必要关心的类型,同时对等待情况进行归类统计。

  横坐标:等待类型

  纵坐标:收集时间段内出现的次数

  

  知道了等到类型,我们要了解这些类型中,哪种占用了大量的时间:

  

  注:各种等待类型所等待的时间也是排查的主要方向,结合等待类型与等待时间,我们能了解到:系统中有哪些等待,哪些等待比较严重,哪个最严重。

  横坐标:等待类型

  纵坐标:平均等待时间

  

  了解了主要的等待类型和时间,我们还要分析一下:什么数据库来的?哪些程序来的?什么用户请求导致的?什么时间阻塞最严重?

  

  

  

  

 

  

  具体语句看等待 

  系统的整体等待情况了然于心,下面我们改看看具体哪些语句造成的等待,这也是解决问题的重要分析步骤。

  哪些语类句等待最频繁

 

  注:这里我们可以根据等待次数、等待时间、消耗的各种资源排序,来多维度分析阻塞的语句类型

  

  语句具体的等待情况时怎样的呢?我们可以通过【原始视图】查看具体语句在执行过程中的真实阻塞情况

  注:在阻塞的详细视图中我们可以清晰的看到语句的阻塞树,并且可以看到阻塞的语句、时间、资源已经阻塞等待的类型

  阻塞树:本例中【会话68】被【会话66】阻塞,而【会话66】又被【会话104】阻塞,这样3个会话就构成了一个阻塞链也叫阻塞树

  

  诊断结论

  通过全局定位,语句类型分析,到具体的语句执行阻塞状态,根据阻塞类型、次数、时间、连接程序、资源消耗等多种维度综合分析,我们可以清楚的看出数据库中的阻塞问题。

  本例中系统主要的阻塞类型为CXPACKET和LCK_M_U,阻塞时间很长,主要的阻塞产生时间为上午十一点左右,主要的阻塞语句是一条update 和一个复杂的select查询等信息。

问题解决

  首先下面的这张图已经简单的说明了系统对应的等待需要怎么样的解决思路。  

  

  注:根据不同的情况降低阻塞的办法主要有:调整服务器、实例、数据库配置参数(如:调整并行度),更改隔离级别(如:快照读,nolock等),优化语句(如:添加索引,优化写法等)

 

  本例中主要的CXPACKET是因为实例并行度参数配置不佳而导致,LCK_M_U主要是一条update被一个批处理的另一条update阻塞锁导致,优化update这类更新语句主要是保证update语句最优化,执行时间尽量缩短,另外高并发下的update比较常见的解决办法是使用索引利用key锁取代表锁以提高并发,可能被更新的表只有几十条记录,添加索引与不加索引的并发效率差别也会很大。另外程序的设计也是非常重要的,各种奥秘各位看官只能在实际环境中慢慢体会了,而使用SQL专家云工具的主要目的在于全面的定位问题,图表统计等形式清晰的展现问题,并根据工具提供的解决方案快速解决问题。

  如果是想学习的看官也可以在体检的【检查项】及平台的帮助中了解更多的知识和更完善的思路,同时也可以拿着这份“电子病历”和更多人交流学习。

1
0
分享到:
评论

相关推荐

    数据库阻塞监控工具(SQLSERVER和ORACLE)

    对于SQL Server,微软提供了一个内置的阻塞监控工具——Activity Monitor。Activity Monitor可以帮助管理员查看当前服务器上的活动,包括哪些会话正在运行、等待类型、资源状态等。不过,Activity Monitor通常只能...

    SQL Server Blocking and Deadlock

    在探讨SQL Server中的阻塞和死锁之前,我们首先需要理解事务的基本特性——ACID特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。 - **原子性**:事务中的所有...

    Beginning SQL Server 2005 Administration

    - **解决难点**:本书将帮助读者处理SQL Server 2005管理中最棘手的问题之一——阻塞和锁定问题。 - **策略与技巧**:通过实际案例和深入解析,为读者提供解决这类问题的有效策略。 #### 五、查询优化技巧 - **理解...

    SQLServer2008查询性能优化 2/2

    书名: SQLServer2008查询性能优化 作者: 弗里奇(Grant Fritchey) 出版社: 人民邮电出版社 出版日期: 2010年8月1日 ISBN: 9787115230294 编辑推荐 《SQL Server 2008查询性能优化》为你提供了处理查询性能所...

    SQLServer2008查询性能优化 1/2

    书名: SQLServer2008查询性能优化 作者: 弗里奇(Grant Fritchey) 出版社: 人民邮电出版社 出版日期: 2010年8月1日 ISBN: 9787115230294 编辑推荐 《SQL Server 2008查询性能优化》为你提供了处理查询性能所...

    Troubleshooting Performance Problems in SQL Server 2005.doc

    本文档旨在提供一个逐步的指南,帮助管理员诊断并解决这些问题,主要利用的是SQL Server Profiler、System Monitor(Perfmon)以及SQL Server 2005中的新特性——动态管理视图。 **Introduction** 引入部分指出,...

    sql server 2005_入门到精通

    ### SQL Server 2005 入门到精通——事务管理篇 #### 10.1 商业事务与 SQL Server 事务 每一个商业过程都包含了若干事务,这些事务需要按照预定义的流程来确保每一步骤都能顺利完成。例如,在一个电子商务环境中,...

    SQL Server Internals_ In-Memor - Kalen Delaney

    6. T-SQL访问内存优化表:SQL Server提供了两种方式来通过T-SQL查询内存优化表——使用解释执行的T-SQL语句,或者调用原生编译存储过程。这允许数据库管理员和开发者根据实际情况选择最适合的方式来利用内存优化表。...

    Borland® InterBase® and Microsoft® SQL Server

    为了降低中小型企业部署数据库的成本,Microsoft推出了SQL Server的一个精简版——MSDE(Microsoft SQL Server Desktop Engine)。尽管MSDE在功能上有所限制,但对于小型项目来说已经足够。然而,InterBase的免费...

    基于SQL Server锁定数据技术的探讨.pdf

    SQL Server通过锁管理器来实现这一功能,锁管理器的作用是控制不同类型的锁,并确定锁定的数据范围——即锁定粒度。 SQL Server中常见的锁类型包括共享锁(Shared Lock)、修改锁(Update Lock)和独占锁...

    揭秘SQL Server 2014有哪些新特性(1)-内存数据库

    SQL Server 2014引入了诸多创新特性,其中最引人注目的是名为“Hekaton”的内存数据库引擎。这一特性并非对SQL Server的替换,而是作为现有功能的补充,旨在利用现代硬件的进步,尤其是内存容量的显著增长。内存...

    .NET Core基于SQL Server数据库实现读写分离源码下载

    本项目——".NET Core基于SQL Server数据库实现读写分离源码下载"提供了一个很好的示例,帮助开发者理解和实践这一技术。 首先,让我们深入了解读写分离的基本概念。读写分离的核心思想是将数据库系统的读写操作...

    JDBC驱动JAR包,MS-SQLserver2000,2005 mySql,oracle

    本压缩包文件包含了针对三种流行数据库管理系统(DBMS)——Microsoft SQL Server 2000、2005,MySQL以及Oracle的JDBC驱动JAR包,这些驱动使得Java应用程序能够通过SQL语句执行CRUD(创建、读取、更新和删除)操作。...

    安卓Android源码——android 通过jdts.jar 连接SQLSEVER2008.zip

    dataSource.setUrl("jdbc:sqlserver://服务器地址:端口号;databaseName=数据库名"); dataSource.setUsername("用户名"); dataSource.setPassword("密码"); ``` 3. 获取数据库连接:从DataSource获取`java.sql....

    数据库技术及应用(原理+SQL Server+VB.NET) 23345-00.zip

    《数据库技术及应用》课程是IT领域中至关重要的一门学科,它涵盖了数据库的基本原理、SQL Server的实际运用以及VB.NET编程语言在数据库管理中的接口开发。本教学资源包旨在为学习者提供一个全面、深入理解数据库技术...

    安卓Andriod源码——通过jdts.jar连接SQLSEVER2008.zip

    "jdbc:microsoft:sqlserver://服务器IP:端口;DatabaseName=数据库名", "username", "password"); // ... 数据库操作 ... } catch (Exception e) { e.printStackTrace(); } ``` 请注意,由于Android的安全限制,...

    SQL挂起清除工具

    SQL Server作为一款广泛使用的数据库管理系统,其安装与卸载过程中的稳定性和效率直接关系到企业的运营效率。然而,在安装或卸载SQL Server的过程中,经常会遇到因先前进程未能正确完成而导致的挂起问题,这种情况下...

Global site tag (gtag.js) - Google Analytics