解决会话等待产生的系统问题,Server中与IO相关的

一个大的SQL语句操作,执行计划中包含了一个merge join操作,观察到SQL长时间处于IO_COMPLETION等待状态,如果是读取相关的表的数据,服务器应该全力为其服务,但是服务器的物理IO又远远没有达到瓶颈。
这个IO_COMPLETION到底是在做什么?是表的数据页IO请求还在其他操作?如果是,跟PAGEIOLATCH_*是什么区别?如果不是,又是什么类型的操作?

等待分类与解决基本流程:

IO_COMPLETION 这种等待类型表示数据文件中的各种同步读和写操作,这些操作与表无关,并且从事务日志中读取。
在等待I/O操作完成时发生。这种等待类型通常表示非数据页I/O。数据页I/O完成等待作为PAGEIOLATCH_*等待出现。
IO_COMPLETION与PAGEIOLATCH_*的最大的区别是就在于IO_COMPLETION是非数据页的等待,而PAGEIOLATCH_*是数据页的IO等待
IO_COMPLETION这种等待类型表示数据文件中的各种同步读和写操作,这些操作与表无关,并且从事务日志中读取。

 

包括以下几种场景:
1.从事务日志中读取日志块(在导致从磁盘读取日志的任何操作期间——例如恢复)
2.在很多操作中,例如恢复、DB启动、恢复期间从磁盘读取分配位图(例如GAM、SGAM、PFS页)
3.将中间排序缓冲区写入磁盘(称为“Bobs”)
4.在merge join期间,向磁盘写入或者读取磁盘中的merge join的结果
5.读写eager spools(数据缓存到磁盘的一种行为)到磁盘
6.从事务日志中读取VLF头信息。

图片 1

 

 

参考:

步骤1.定位问题

系统等待往往能直观的反映出系统问题。通过一些常见的等待类型,同样可以找到系统瓶颈,结合性能计数器往往定位更准确。

如:系统中存在大量IO类等待,那么可能表示你的磁盘或内存是语句运行缓慢的原因,也是系统的瓶颈所在。

常见的等待类型

      • 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 :等待日志刷新完成时出现。导致日志刷新的常见操作是检查点和事务提交。 

 

 

 

 

 

本文由澳门新萄京官方网站发布于信息数据库,转载请注明出处:解决会话等待产生的系统问题,Server中与IO相关的

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。