步骤1.定位问题
系统等待往往能直观的反映出系统问题。通过一些常见的等待类型,同样可以找到系统瓶颈,结合性能计数器往往定位更准确。常见的等待类型
-
-
- CXPACKET : 当尝试同步查询处理器交换迭代器时出现。如果针对该等待类型的争用成为问题时,可以考虑降低并行度。
- IO_COMPLETION : 在等待 I/O 操作完成时出现。通常,该等待类型表示非数据页 I/O。
- PAGEIOLATCH_ : 在任务等待 I/O 请求中缓冲区的闩锁时发生。
- PAGELATCH_ : 在任务等待不处于 I/O 请求中的缓冲区闩锁时发生。
- LCK_ :等待闩锁时出现。
- ASYNC_NETWORK_IO : 当任务被阻止在网络之后时出现在网络写入中。验证客户端是否正在处理来自服务器的数据。
- OLEDB :当 SQL Server 调用 Microsoft SQL Native Client OLE DB 访问接口时出现。该等待类型不用于同步。而是用于指示调用 OLE DB 访问接口的持续时间
- WRITELOG :等待日志刷新完成时出现。导致日志刷新的常见操作是检查点和事务提交。
-
步骤2.分析
CXPACKET
CXPACKET 这个等待可以简单理解成CPU相关的等待,主要发生在并行计划中。由于并行计划需要协同多个task同时工作,那么“协同”分配等等操作的时候出现的就是这个等待。
如果 CXPACKET 在你系统中是最为严重的等待,这时候一般的表现是你的CPU很高。
解决方案:适当调整并行度
一般建议系统如果超过32个CPU 那么设置成8或者4,如果系统中都是特别短小且频繁的语句建议设置成1(取消语句并行,要慎重真的符合你的场景才好)
并行开销的阀值,主要控制SQL优化器何时选用并行计划,建议默认值,此值设置的越小优化器越容易选择并行计划。
并行度的设置是针对实例级别的设置(2016中可以对单独数据库设置)
IO类
IO_COMPLETION和PAGEIOLATCH_和WRITELOG 这三个等待是最为常见的和磁盘相关的等待。他们的不同点是 IO_COMPLETION 主要针对非数据页 I/O ,如备份操作所需的磁盘交互。PAGEIOLATCH_ 是数据页相关的磁盘等待。WRITELOG 是日志相关。
如果系统中这三个等待是主要等待,说明系统磁盘存在压力或已经成为瓶颈。
这里用PAGEIOLATCH_ 为例进行说明
PAGEIOLATCH_的 官方解释:在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“XX”模式。长时间的等待可能指示磁盘子系统出现问题。
PAGEIOLATCH_的相关等待:
PAGEIOLATCH_DT |
在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“破坏”模式。长时间的等待可能指示磁盘子系统出现问题。 |
PAGEIOLATCH_EX |
在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“独占”模式。长时间的等待可能指示磁盘子系统出现问题。 |
PAGEIOLATCH_KP |
在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“保持”模式。长时间的等待可能指示磁盘子系统出现问题。 |
PAGEIOLATCH_NL |
仅供内部使用。 |
PAGEIOLATCH_SH |
在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“共享”模式。长时间的等待可能指示磁盘子系统出现问题。 |
PAGEIOLATCH_UP |
在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“更新”模式。长时间的等待可能指示磁盘子系统出现问题。 |
怎么来理解这个官方解释呢? 首先明确一点,操作系统CPU操作的任何数据都是从内存中读取的,也就是说读取数据要经过这样的一条路:
- 磁盘中 ——> 内存中 ——> 最终使用
这里的PAGEIOLATCH_ 就是发生在, 磁盘中 ——> 内存中
以读取为例:要读取的数据页不在内存中,所以就要去磁盘上读取这部分数据页,去磁盘读取数据的时候就会产生PAGEIOLATCH_的相关等待,如果磁盘压力大,长时间不能反回数据,那么PAGEIOLATCH_的时间也会越长,语句执行的时间也会越长。
注 : 当你的系统出现大量的 PAGEIOLATCH_ 类等待,说明你磁盘可能存在压力(磁盘速度不能满足当前业务需求)或你的内存不够用,不能缓存业务常用数据而经常要与磁盘交互!
WRITELOG 和磁盘有关的另一个等待状态,正在等待写日志记录,意味着写入速度也明显跟不上。而速度跟不上一般有两种情况:磁盘压力大响应时间长或真的速度不能满足读写需要。
PAGELATCH_
PAGELATCH_和 上面讲述的PAGEIOLATCH_ 看似很像,但中间少了 IO 这个关键。
- 磁盘中 ——> 内存中 ——> 最终使用
磁盘中——>内存中 的等待为PAGEIOLATCH_ 而 内存中——> 最终使用 的等待为 PAGELATCH_
当数据已经在内存中的时候SQL SERVER 想要使用这个数据页就要给这个数据页加锁。
当等待中出现很多PAGELATCH_ 等待,那么可以说明:
- SQL Server没有明显的内存和磁盘瓶颈。
- 应用程序发来大量的并发语句在修改同一张表格里的记录,而表格架构设计以及用户业务逻辑使得这些修改都集中在同一个页面,或者数量不多的几个页面上。这些页面有的时候也被称为Hot Page。这样的瓶颈通常只会发生在并发用户比较多的、典型的OLTP系统上。
- 这种瓶颈是无法通过提高硬件配置解决的,只有通过修改表格设计或者业务逻辑,让修改分散到尽可能多的页面上,才能提高并发性能。
TempDB造成的 PAGELATCH_(其实也是一种Hot Page),这里简单的看一个例子:
系统中存在大量的 PAGELATCH_UP等待那么是什么成为了Hot Page 呢?为什么说和TempDB有关呢?
等待资源 “2:X:X: ”开头是TempDB,系统中存在大量且高并发的语句使用临时表和表变量,所以引起TEMPDB瓶颈。请参见:TempDB的诊断和优化。
LCK_
LCK_类型中的所有很多,如果这种等待在系统中大量存在,可以说明,系统语句间的相互阻塞严重。如大家都知道的当你update一张表的时候,你的select会被阻塞直到update完成。这里就不过多介绍场景了,主要看一下解决此类等待的主要方法:
- 语句优化,让语句执行的更快,减少等待时间。
- 采用批量操作代替循环方式。
- 尽量减少事务的长度。
- 尝试降低事务隔离级别。
- 上述都不能缓解...请选用读写分离。
LCK_类型中包含:(这里不做详细解读了)
LCK_M_RIn_NL |
当某任务正在等待获取当前键值上的 NULL 锁以及当前键和上一个键之间的插入范围锁时出现。键上的 NULL 锁是指立即释放的锁。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks。 |
LCK_M_RIn_S |
当某任务正在等待获取当前键值上的共享锁以及当前键和上一个键之间的插入范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks。 |
LCK_M_RIn_U |
任务正在等待获取当前键值上的更新锁以及当前键和上一个键之间的插入范围锁。有关锁兼容性矩阵,请参阅sys.dm_tran_locks。 |
LCK_M_RIn_X |
当某任务正在等待获取当前键值上的排他锁以及当前键和上一个键之间的插入范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks。 |
LCK_M_RS_S |
当某任务正在等待获取当前键值上的共享锁以及当前键和上一个键之间的共享范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks。 |
LCK_M_RS_U |
当某任务正在等待获取当前键值上的更新锁以及当前键和上一个键之间的更新范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks。 |
LCK_M_RX_S |
当某任务正在等待获取当前键值上的共享锁以及当前键和上一个键之间的排他范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks。 |
LCK_M_RX_U |
当某任务正在等待获取当前键值上的更新锁以及当前键和上一个键之间的排他范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks。 |
LCK_M_RX_X |
当某任务正在等待获取当前键值上的排他锁以及当前键和上一个键之间的排他范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks。 |
LCK_M_S |
当某任务正在等待获取共享锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks。 |
LCK_M_SCH_M |
当某任务正在等待获取架构修改锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks。 |
LCK_M_SCH_S |
当某任务正在等待获取架构共享锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks。 |
LCK_M_SIU |
当某任务正在等待获取共享意向更新锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks。 |
LCK_M_SIX |
当某任务正在等待获取共享意向排他锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks。 |
LCK_M_U |
当某任务正在等待获取更新锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks。 |
LCK_M_UIX |
当某任务正在等待获取更新意向排他锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks。 |
LCK_M_X |
当某任务正在等待获取排他锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks。 |
ASYNC_NETWORK_IO
此等待状态出现在SQLServer已经把数据准备好,但是网络没有足够的发送速度跟上,所以SQLServer的数据没地方存放。
- 出现这种情况一般不是数据库的问题,调整数据库配置不会有大的帮助。
- 网络层的瓶颈当然是一个可能的原因:对此要考虑是否真有必要返回那么多数据?
- 应用程序端的性能问题,也会导致SQLServer里的ASYNC_NETWORK_IO等待。如果见到了这个类型的等待,就要检查应用程序的健康状况,也要检查应用是否有必要想SQLServer申请这么大的结果集。
- 程序返回结果集的方式 。
相关推荐
【标题】:“asp+sql+server+程序代码系统——学校管理”是指基于ASP(Active Server Pages)编程语言、SQL Server数据库管理系统以及Windows Server环境构建的学校管理系统。该系统旨在为教育机构提供一套全面的...
该书解释并比较了SQL Server 2000和SQL Server 2005在数据库开发相关问题上的解决方案,深入讨论了SQL Server 2005中新增的T-SQL编程特性,包含了大量的代码示例、表示例和逻辑难题以帮助数据库开发人员和管理员理解...
【ASP+SQL+Server+程序代码系统——图书租赁】是一个基于Web的图书租赁管理系统,它结合了ASP(Active Server Pages)作为前端开发语言,SQL Server作为数据库存储引擎,以实现图书信息管理、用户租赁、订单处理等一...
在SQL Server中,`SET IDENTITY_INSERT`是一个重要的命令,它主要用于处理标识列(即自动编号列,通常由`IDENTITY`关键字定义)的显式赋值问题。默认情况下,当向一个包含`IDENTITY`属性的表中插入数据时,标识列的...
"ASP毕业设计——asp+sqlserver2000在线考试系统.zip"是一个典型的Web开发项目,它展示了如何利用ASP技术和SQL Server 2000数据库构建一个完整的在线考试平台。这个系统涵盖了用户认证、数据库交互、动态页面生成、...
【SQL Server 2005】是微软公司推出的一款企业级数据库管理系统,广泛应用于软件供应商、咨询人员、系统集成商和企业开发人员之中,作为创建和测试应用程序的平台。此版本具备可升级性,能够根据实际生产需求升至...
配置SQL Server 2008的资源调控器是数据库管理员和IT专业人员在管理复杂系统时所需的一项重要技能。SQL Server 2008引入了资源调控器功能,这极大地增强了DBA对系统资源控制的能力,尤其在资源分配和性能监控方面。...
ASP毕业设计——ASP+SQLServer网上书店系统是一个典型的Web应用程序案例,主要展示了如何利用ASP(Active Server Pages)技术和SQLServer数据库来构建一个完整的在线购物平台。这个系统的设计和实现涵盖了多个IT领域...
SQL Server 数据库镜像部署手册 本手册旨在指导用户如何部署 SQL Server 数据库镜像,以实现自动故障转移和高可用性。整个部署过程可以分为五个步骤:数据库准备、设置概述、在 Windows Server 2008 R2 上安装 SQL ...
在SQL Server 2005中,数据库镜像是一种高可用性和灾难恢复解决方案,它可以在主服务器(principal server)上运行数据库的实时副本——辅助服务器(mirror server)。镜像允许在主服务器出现故障时,无缝地将数据库...
标题 "Hibernate 连接 SQLServer2000" 暗示了我们将探讨如何使用流行的Java ORM框架Hibernate与较老版本的SQL Server数据库——SQL Server 2000进行交互。在Java应用程序开发中,Hibernate提供了对象关系映射功能,...
**ASP.NET 源码分析:isqlweb (Web版 SQL Server 管理器)** **一、ASP.NET 框架概述** ASP.NET 是 Microsoft 提供的一个用于构建 Web 应用程序的开发框架,它基于 .NET Framework 或 .NET Core。ASP.NET 提供了一套...
MSSBlockingMonitor是一款专为SQL Server设计的阻塞监控实用程序,它可以持续监控数据库阻塞情况,提供详细的阻塞链路报告,帮助定位并解决阻塞问题。 使用MSSBlockingMonitor,你可以获取关于阻塞的详细信息,如...
在SQL Server 2008中,Service Broker引入了一个新的特性——Create Broker Priority,允许设置会话的优先级。这使得管理员可以为重要的交易设定更高的优先级,确保关键任务优先处理。 创建Service Broker应用程序...
Oracle性能监控SQL——监控当前会话执行的SQL及IO等信息 Oracle性能监控是数据库管理员的重要职责之一,通过监控数据库的性能,可以及时发现问题,避免数据库的宕机和性能下降。本文将介绍一些常用的Oracle性能监控...
在SQL Server 2008中,数据库镜像是一种高可用性和灾难恢复解决方案,它可以提供近乎实时的数据保护。本文将详细解析如何设置SQL Server 2008的数据库镜像,以及涉及的相关脚本操作。 数据库镜像是通过创建一个与主...
此外,SQL Server 2005还包含了Business Intelligence Development Studio (BIDS),用于创建报表、数据挖掘和数据分析解决方案。 该压缩包中的内容涵盖了从基础到进阶的多个章节,包括: 1-9章:这部分可能涉及了...
### SQL Server数据库开发之存储过程应用宝典 #### 前言 在数据库开发领域,尤其是在使用SQL Server进行开发的过程中,存储过程的应用极为广泛。它不仅能够提高代码的复用性和程序的性能,还能增强安全性并简化...
系统存储过程是由SQL Server提供的,用于执行常见的管理任务;本地存储过程是在当前数据库中定义的;临时存储过程只在会话期间存在;远程存储过程是指在其他服务器上执行的存储过程;扩展存储过程则是通过C语言API...
本系统——基于ASP.NET的徐州工程学院宿舍管理系统,充分利用了WEB技术与SQLServer数据库的优势,为校园生活提供了高效、便捷的解决方案。 ASP.NET是微软公司推出的Web应用程序开发框架,它构建在.NET Framework之...