如何识别SQL Server中的IO瓶颈
问题: 我们可能经常会遇到SQLServer数据库频繁关闭的情况。在分析了内存和CPU使用情况后,我们需要继续调查根源是否在I/O.我们应该如何识别SQLServer是否有I/O相关的瓶颈? 解决: 当数据页经常从缓冲池中移进移出的时候,I/O子系统就会成为SQLServer性能问
问题:
我们可能经常会遇到SQLServer数据库频繁关闭的情况。在分析了内存和CPU使用情况后,我们需要继续调查根源是否在I/O.我们应该如何识别SQLServer是否有I/O相关的瓶颈?
解决:
当数据页经常从缓冲池中移进移出的时候,I/O子系统就会成为SQLServer性能问题的关键因素之一。事务日志和tempdb同样也会产生重大的I/O压力。因此,你必须确保你的I/O子系统能按照预期运行。否则你将会成为响应时间增长和频繁超时的受害者。在这篇文章中,将描述如何使用内置工具识别I/O相关瓶颈,并提供一些磁盘配置的方法:
性能计数器(Performance Monitor):
可以使用性能计数器来检查I/O子系统的负荷。下面的计数器可用于检查磁盘性能:
PhysicalDisk Object:Avg.DiskQueue Length:计算从物理磁盘中的平均读和写的请求队列。过高的值代表磁盘操作处于等待状态。当这个值在SQLServer峰值时长期超过2,证明需要注意了。如果有多个硬盘,就需要把这些数值除以2.比如,有4个硬盘,且队列为10,那么平均值就是10/4=2.5,虽然也证明需要关注,但不能使用10这个值。
Avg.Disk Sec/Read和Avg.Disk Sec/Write:显示从磁盘读或者写入磁盘的平均时间。10ms内是很好的表现,20以下还算能接受。高于此值证明存在问题。
Physical Disk:%Disk Time:在磁盘忙于读或者写请求的时候持续时间的比率。根据拇指定律,此值应该小于50%.
Disk Reads/Sec和Disk Writes/Sec计数器显示出在磁盘中读写操作的速率。这两个值应该小于磁盘能力的85%.当超过此值,,磁盘的访问时间将以指数方式增长。
可以通过以下方式来计算逐渐增长的负载的能力。一种方法是使用SQLIO.你应该找到吞吐量比较稳定,但缓慢增长。
可以使用以下公式来计算RAID配置:
Raid 0: I/O per disk = (reads + writes) / number ofdisks
Raid 1: I/O per disk = [reads + (writes*2)] / 2
Raid 5: I/O per disk = [reads + (writes*4)] / number of disks
Raid 10: I/O per disk = [reads + (writes*2)] / number of disks
比如:对于RAID 1,如果得到下面的计数器:
Disk Reads/sec = 90
Disk Writes/sec =75
根据公式:[reads + (writes*2)] / 2 or [90 + (75*2)] / 2 = 120I/Os每个磁盘。
动态管理视图(DMVs):
有很多游泳的DMVs可以用于检查I/O瓶颈:
当一个页面被用于读或者写访问且页面在缓冲池中不存在或不可用时,会引发一个I/O闩锁等待(I/O latch),它会在PAGEIOLATCH_EX/PAGEIOLATCH_SH(具体根据请求类型而定)。这些等待表明一个I/O瓶颈。可以使用sys.dm_os_wait_stats找到闩锁等待的信息。如果你保存了SQLServer正常运行下的waiting_task_counts和wait_time_ms值,并且于此次的值做对比,可以识别出I/O问题:
select *
fromsys.dm_os_wait_stats
where wait_type like'PAGEIOLATCH%'
order by wait_typeasc
挂起的I/O请求可以在下面查询中查到,并且用于识别那个磁盘负责的这个瓶颈:
select database_id,
file_id,
io_stall,
io_pending_ms_ticks,
scheduler_address
from sys.dm_io_virtual_file_stats(NULL, NULL) iovfs,
sys.dm_io_pending_io_requests as iopior
where iovfs.file_handle = iopior.io_handle
磁盘碎片(Disk Fragmentation):
建议你检查磁盘碎片和配置用于SQLServer实例的磁盘。在NTFS文件系统中的碎片会产生严重的性能影响。磁盘需要经常整理碎片并且指定整理碎片计划。研究表明,一些情况下SAN在整理碎片后性能更差。因此,SAN必须根据实际情况对待。
NTFS上的索引碎片同样能引起高I/O好用。但是这和在SANs中的效果是不一样的。
磁盘配置/最佳实践:
常规情况,你应该把日志文件和数据文件分开存放以获得更好的性能。对于重负载的数据文件(包括tempdb)的I/O特性是随机读取。对于日志文件,是顺序访问的,除非事务需要回滚。
对于内置磁盘仅仅可以用于数据库日志文件,因为它们对顺序I/O有很好的性能,但是对随机I/O性能低下。
数据库的数据和日志文件应该放在对应专用的磁盘中。确保良好的性能。建议日志文件放在两个内置磁盘,并配置为RAID 1.数据文件驻留在仅用于给SQLServer访问的SAN系统中,并只被查询和报表控制。特殊访问应该被禁止。
写缓冲在可能的情况下应该被允许,并保证断电也能使用。
为了尽可能保证对于OLTP系统的I/O瓶颈影响最小化,不应该把OLAP和OLTP环境混合。并且保证你的代码优化及有合适的索引来避免不必要的I/O.

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

WindowsServerBackup是WindowsServer操作系统自带的一个功能,旨在帮助用户保护重要数据和系统配置,并为中小型和企业级企业提供完整的备份和恢复解决方案。只有运行Server2022及更高版本的用户才能使用这一功能。在本文中,我们将介绍如何安装、卸载或重置WindowsServerBackup。如何重置Windows服务器备份如果您的服务器备份遇到问题,备份所需时间过长,或无法访问已存储的文件,那么您可以考虑重新设置WindowsServer备份设置。要重置Windows

如何实现C++中的语音识别和语音合成?语音识别和语音合成是当今人工智能领域中的热门研究方向之一,它们在很多应用场景中起到了重要的作用。本文将介绍如何使用C++实现基于百度AI开放平台的语音识别和语音合成功能,并提供相关的代码示例。一、语音识别语音识别是将人说的语音转换为文本的技术,其在语音助手、智能家居、自动驾驶等领域有着广泛应用。下面是使用C++实现语音识

随着人工智能技术的不断发展,人脸检测和识别技术在日常生活中得到了越来越广泛的应用。在各种场合,如人脸门禁系统、人脸支付系统、人脸搜索引擎等等,人脸检测和识别技术都被广泛应用。而Java作为一种广泛使用的编程语言,也可以实现人脸检测和识别技术。本文将介绍如何使用Java实现人脸检测和识别技术。一、人脸检测技术人脸检测技术是指在图像或视频中检测到人脸的技术。在J

什么是交通标志识别系统?汽车安全系统的交通标志识别系统,英文翻译为:Traffic Sign Recognition,简称TSR,是利用前置摄像头结合模式,可以识别常见的交通标志 《 限速、停车、掉头等)。这一功能会提醒驾驶员注意前面的交通标志,以便驾驶员遵守这些标志。TSR 功能降低了驾驶员不遵守停车标志等交通法规的可能,避免了违法左转或者无意的其他交通违法行为,从而提高了安全性。这些系统需要灵活的软件平台来增强探测算法,根据不同地区的交通标志来进行调整。交通标志识别原理交通标志识别又称为TS

当你使用win10计算机时,你不知道你是否遇到过识别无法连接到internet的情况?如果你不知道如何解决这个问题,让我们来看看这篇文章。1.使用Win+I组合键调出设置窗口,点击选择网络和Internet。2.点击网络和INTERNET窗口左侧的以太网,然后点击右侧窗口的更改适配器选项。3.在网络连接窗口,单击鼠标右键单击以太网(台式机,请酌情对待移动设备),单击菜单中的禁用。4.显示为禁用后,单击以太网鼠标右键,执行启用命令。以太网启用后,问题应该解决。这里介绍了Win10网络失败提示识别无

在发布WindowsServer的build26040版本之际,微软公布了该产品的官方名称:WindowsServer2025。一同推出的,还有Windows11WindowsInsiderCanaryChannel版本的build26040。有些朋友可能还记得,多年前有人成功将WindowsNT从工作站模式转换为服务器模式,显示微软操作系统各版本之间的共性。尽管现在微软的服务器操作系统版本和Windows11之间有明显区别,但关注细节的人可能会好奇:为什么WindowsServer更新了品牌,

如何修改nginx默认的名称,可以稍微的伪装一下,也可以装x一般来说修改3个位置,一个是nginx.h、另一个是ngx_http_header_filter_module.c、还有一个ngx_http_special_response.c。提示:一般修改都是在nginx编译之前修改,修改完了之后需要重新编译代码如下:scr/core/nginx.conf#definenginx_version"1.4.7"#definenginx_ver"nginx/"n

微软在面向桌面端发布Win11预览版更新的同时,今天还发布了WindowsServer长期服务通道(LTSC)预览版Build25335。微软和以往相同,并未公布完整的更新日志,甚至于没有提供相应的博客文章。微软调整了WindowsServer预览版更新日志,让其和Canary频道版本相同,如果没有引入新的内容,则不放官方博文。IT之家注:Server的品牌尚未更新,在预览版中仍为WindowsServer2022。此外,微软将这些版本称为WindowsServervNext,而不是已经上市的W
