知识大全 如何识别SQL Server中的IO瓶颈

Posted

篇首语:人生就像骑单车,想保持平衡就得往前走。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 如何识别SQL Server中的IO瓶颈相关的知识,希望对你有一定的参考价值。

如何识别SQL Server中的IO瓶颈  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  问题

  我们可能经常会遇到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峰值时长期超过 证明需要注意了 如果有多个硬盘 就需要把这些数值除以 比如 有 个硬盘 且队列为 那么平均值就是 / = 虽然也证明需要关注 但不能使用 这个值

  Avg Disk Sec/Read和Avg Disk Sec/Write:显示从磁盘读或者写入磁盘的平均时间 ms内是很好的表现 以下还算能接受 高于此值证明存在问题

  Physical Disk:%Disk Time:在磁盘忙于读或者写请求的时候持续时间的比率 根据拇指定律 此值应该小于 %

  Disk Reads/Sec和Disk Writes/Sec计数器显示出在磁盘中读写操作的速率 这两个值应该小于磁盘能力的 % 当超过此值 磁盘的访问时间将以指数方式增长

  可以通过以下方式来计算逐渐增长的负载的能力 一种方法是使用SQLIO 你应该找到吞吐量比较稳定 但缓慢增长

  可以使用以下公式来计算RAID配置

  Raid : I/O per disk = (reads + writes) / number ofdisks

  Raid : I/O per disk = [reads + (writes* )] /

  Raid : I/O per disk = [reads + (writes* )] / number of disks

  Raid : I/O per disk = [reads + (writes* )] / number of disks

  比如 对于RAID 如果得到下面的计数器

  Disk Reads/sec =

  Disk Writes/sec =

  根据公式 [reads + (writes* )] / or [ + ( * )] / = I/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 数据文件驻留在仅用于给SQLServer访问的SAN系统中 并只被查询和报表控制 特殊访问应该被禁止

  写缓冲在可能的情况下应该被允许 并保证断电也能使用

cha138/Article/program/SQLServer/201311/22260

相关参考

知识大全 sql server如何识别真实和自动创建的索引

  问我发现sysindexes索引表中的很多条目并不是我自己创建的听说它们并不是真正的索引而是SQLServer查询优化器自动创建的统计怎样才能识别哪些是真正的索引哪些是SQLServer自动创建的

知识大全 SQL Server应用程序中的高级SQL注入

SQLServer应用程序中的高级SQL注入  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  摘要

知识大全 SQL Server 中的事务

SQLServer中的事务  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  事务的含义  事务要有

知识大全 SQL Server 中的时间算法

SQLServer中的时间算法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  DECLARE@D

知识大全 Microsoft SQL Server 2000 中的位图

MicrosoftSQLServer2000中的位图  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 SQL Server 2008 中的hierarchyid类型应用

SQLServer2008中的hierarchyid类型应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 SQL Server 中的事务(含义,属性,管理)

SQLServer中的事务(含义,属性,管理)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  含

知识大全 使用 SQL Server 2005中的 CLR 集成(2)

使用SQLServer2005中的CLR集成(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 使用 SQL Server 2005中的 CLR 集成(3)

使用SQLServer2005中的CLR集成(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 使用 SQL Server 2005中的 CLR 集成(1)

使用SQLServer2005中的CLR集成(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!