第22/24周 等待和I/O延迟统计
大家好,欢迎回到性能调优培训的第22周。上周我谈了SQL Server里的基线,今天我们继续,谈下SQL Server里的等待和I/O延迟统计。当我进行SQL服务器健康检查时,我总会使用这2个维度全局掌握下SQL Server的健康状况。
等待统计(Wait Statistics)
在SQL Server里每次你执行一个查询,查询会等待。初次看这个看起来很惨淡,但其实有一个非常好的原因,在SQL Server里总会等待。每次一个查询等待,SQL Server通过所谓的等待统计(Wait Statistics)来跟踪这些等待。在我们讨论等待统计本身前。我想介绍下为什么在执行期间,查询总会等待。等待的概念主要基于2个原则:
- 非同步资源等待(Asynchronous Resource Waiting)
- 协同调度(Cooperative Scheduling)
我们来详细看下这2个。每次查询等待一个当前不可用的资源——例如在缓存池理还没缓存的页,或者因为另一个不兼容的锁而不能获得的锁——查询会进入SQL Server里所谓的挂起(Suspended)状态。查询在挂起状态一直等待直到资源变成可用。
当资源变成可用时,查询进入所谓的可执行(Runnable)状态,再次等待,知道CPU变成可用。当CPU是可用时,查询最后进入运行(Running)状态,执行到资源再次变成不可用。当这个发生时,查询再次进入挂起(Suspended)状态。下图显示了这个查询生命周期。

另外查询也会由于在SQLOS(SQL Server操作系统)里SQL Server实现的协同调度(Cooperative Scheduling)而等待。SQL Server通过使用特定的WIN32 API功能调度它的线程。协同调度意味着当一个查询本身超过近4ms的额(quantum )时,它从CPU上撤离。因为这个实现方式,在SQL Server里查询总会等待:一旦一个资源尚不可用,或者查询已超过了它的额——查询就会进入挂起(Suspended)状态并等待。
每次当一个等待情况发生时,等待时间被SQL Server通过等待统计(Wait Statistics)自动跟踪。SQL Server通过DMV sys.dm_os_wait_stats 报告这些信息。通过这个DMV返回的每一行都代表SQL Server里的一个特定等待——所谓的等待类型(Wait Type)。通过评估等待统计,SQL Server告诉你什么是最突出的等待类型。然后你可以聚焦这个等待类型并找出内部问题根源,还有对于这个等待类型为什么等待时间如此高。
I/O延迟统计(I/O Latency Statistics)
除了等待统计外另一个非常重要的是SQL Server也会报告的I/O延迟统计(I/O Latency Statistics)。有了这些延迟时间很容易找出你的SQL Server实例哪个文件有延迟时间。SQL Server通过DMF sys.dm_io_virtual_file_stats来报告这些信息。你可以传入database_id和file_id。如果你对这2个值都提供NULL值的话,你会得到SQL Server实例(数据和日志)所有查询相关文件的延迟统计。
对于这个DMF最重要的是io_stall_read_ms和io_stall_write_ms列。自上次SQL Server重启后,对你的存储进行读写操作所发生的累积延迟时间。如果你把这2个值除以num_of_read和num_of_writes列,你就得到从SQL Server角度来说,对于磁盘读写的平均延迟时间。这对于你的存储子系统的故障排除非常方便。
如果这个DMF报告非常高的延迟时间,你不应该简单的跑到存储供应商那里并买更快的存储。第一步你总要想下为什么你有这么高的延迟时间。当我在不同的系统上使用这个DMF时,TempDb总会报告很高的延时。但这也不意味着你要把TempDb移到更快的存储,例如SSD硬盘。第一步总要思考下,对于你特定的数据库“为什么”你有这么高的延迟时间。如果是TempDb的话你可以尝试最小化TempDb的使用——例如应用合理的索引策略来摆脱执行计划里的排序和哈希运算符,这2个运算符会蔓延到TempDb。
等待统计和I/O延迟统计直报告你症状,你的任务是找出性能问题的内在根源,分析它,最后解决它。
小结
在今天的性能调优培训里我们详细讨论了SQL Server里的等待统计和I/O延迟统计。对于性能监控和故障排除来说,这2个DMVs/DMFs非常重要,因为你从中可以找出SQL Server当前在哪些领域有性能问题。下周我们会详细谈下TempDB,我把它叫做SQL Server的公共厕所。请继续关注!
围观PPT:
第22/24周 等待和I/O延迟统计的更多相关文章
- 第21/24周 性能监控(PAL工具)
大家好,欢迎来到性能调优培训的最后一个月.在过去的5个月里,我们谈了SQL Server的各种性能相关的话题,包括性能调优的技术和问题. 但当在你面前,SQL Server没有按你预想的运行时,你会怎 ...
- 第0/24周 SQL Server 性能调优培训引言
大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录. 作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤浅,博而不专,到现在我才发现自己的兴趣所在,于 ...
- Effective STL 学习笔记: Item 22 ~ 24
Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monos ...
- 分享Kali Linux 2017年第24周镜像文件
分享Kali Linux 2017年第24周镜像文件 Kali Linux官方于6月11日发布2017年的第24周镜像.这次维持了11个镜像文件的规模.默认的Gnome桌面的4个镜像,E17.KD ...
- 第1/24周 SQL Server 如何执行一个查询
大家好,欢迎来到第1周的SQL Server性能调优培训.在我们进入SQL Server性能调优里枯燥难懂的细节内容之前,我想通过讲解SQL Server如何执行一个查询来建立基础.这个部分非常重要, ...
- GitHub 官方大动作频频「GitHub 热点速览 v.22.24」
作者:HelloGitHub-小鱼干 本周 GitHub 官方 Blog 很是热闹,GitHub 官方大动作频频也带来了 GitHub Blog 的频繁更新,除了本周 News 快读收录的 GitHu ...
- 第4/24周 页面限制8060 bytes
恭喜您!在你面前就只剩下几页了,然后你就可以完成第1个月的SQL Server性能调优培训了.今天我将讲下页的一些限制,还有为什么你会喜欢这些限制,同时也会讨厌这些限制. 正如你在第2周学到的,数据页 ...
- 第20/24周 死锁(Deadlocking)
大家好,欢迎回到性能调优培训.今天讨论SQL Server里的死锁(Deadlocking),第5个月的培训就结束了.当2个查询彼此等待,没有查询可以继续它的工作就会发生死锁.第一步我会概括介绍下SQ ...
- 【网络流24题】 No.22~24
接下来几题就写写题解吧.不是很想打了. 22. 输入文件示例input.txt4 21 2 7 36 5 8 37 8 10 59 6 13 9 输出文件示例output.txt17 最长不相交路径. ...
随机推荐
- [ASE]项目介绍及项目跟进——TANK BATTLE·INFINITE
童年的记忆,大概是每周末和小伙伴们围坐在电视机前,在20来寸的电视机屏幕里守卫着这个至今都不知道是什么的白色大鸟. 当年被打爆的坦克数量估计也能绕地球个三两圈了吧. 十几年过去了,游戏从2D-3D,画 ...
- goalng 发布的版本中自动加上 git revision
概述 起因是这样的,在编译发布 golang 工程时,希望版本号中包含有 git revision number. 但是,没有commit之前,是没法知道 revision number 的,comm ...
- jquery选择器如何获取父级元素、同级元素、子元素
一.新建页面 <ul> <li>list item 1</li> <li>list item 2</li> <li class=&qu ...
- 【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5811d3e3ab10c62013697408 作者:黄宁源 一,背景 Recy ...
- vCPU估算的几个基本概念
物理CPU数量:实际服务器插槽上的CPU个数: 核:一块CPU上面能处理数据的芯片组的数量: 超线程:在一个实体芯片组中提供两个逻辑线程: 逻辑CPU数量:物理CPU数量*核*超线程(若支持超线程,该 ...
- java提高篇(十六)-----异常(一)
Java的基本理念是“结构不佳的代码不能运行”!!!!! 大成若缺,其用不弊. 大盈若冲,其用不穷. 在这个世界不可能存在完美的东西,不管完美的思维有多么缜密,细心,我们都不可能考虑所有的因 ...
- Java的一个高性能快速深拷贝方法。Cloneable?
本人在设计数据库缓存层的时候,需要对数据进行深拷贝,这样用户操作的数据对象就是不共享的. 这个思路实际上和Erlang类似,就是用数据不共享解决并发问题. 1. 序列化? 原来的做法,是用序列化,我用 ...
- Atiti attilax主要成果与解决方案与案例rsm版 v2
Atiti attilax主要成果与解决方案与案例rsm版 v2 1. ##----------主要成果与解决方案与 参与项目1 ###开发流程与培训系列1 #-----组织运营与文化建设系列1 # ...
- Atitit机器学习原理与概论book attilax总结
Atitit机器学习原理与概论book attilax总结 <机器学习(决战大数据时代!IT技术人员不得不读!)>((美)米歇尔(Mitchell)[简介_书评_在线阅读] -1 < ...
- fir.im Weekly - 给 Mac 应用开发者的教程
写作是一件苦差事.无论写代码,还是写文章. 关于 Mac 应用开发,国内很少有完整的书籍或教程.最近@剑指人心写的 <Mac 应用开发基础教程>终于!完!稿!了! 这本书中对 Mac 平台 ...