目录

诊断磁盘io问题

常见的磁盘问题

容量替代了性能

负载隔离配置有问题

分区对齐配置有问题

总结

关于io这一块,前面的东西如磁盘大小,磁盘带宽,随机读取写入,顺序读取写入,raid选择,DAS和SAN比较都不讲了。

直接就开始讲关于io问题的诊断和一般问题的处理。

io这一块东西比较特殊,是数据库的重点,因为数据库一般都是io密集型产品,为了让io速度更快,那么数据库会使用内存来代替磁盘。

io出现问题,可能会连带其他资源的问题。cpu,内存,网络。所以在分析问题的时候对数据库结构的了解是必不可少的。

诊断磁盘io问题

一般使用的工具就是perfmon特别是 physical disk\disk reads/sec 和 physical disk\ disk writes/sec。

对于这2个性能指标有一个阀值的表格:

• Less than 10 ms = good performance

• Between 10 ms and 20 ms = slow performance

• Between 20 ms and 50 ms = poor performance

• Greater than 50 ms = significant performance problem.

还有一些就是 PAGEIOLATCH_*,ASYNC_IO_COMPLETION,IO_COMPLETION,WRITELOG这些等待事件。关于这些 wait event的查询可以看SQL Server 性能调优(方法论

常见的磁盘问题

在此之前,我们先要排除集中状况就是,接下来讨论的和miss index,较差性能的写入,多余的io无关。单纯从io层面讨论io的配置问题。

io的配置问题最常见的有以下4中情况:

• 容量替代了性能

• 负载隔离配置有问题

• 分区对齐配置有问题

• SAN的带宽配置有问题(这个SAN 小弟不是很熟悉,那么就不讨论了,如果想了解情况可以查看原书:《Troubleshooting SQL Server: A Guide for the Accidental DBA》)

容量替代了性能

一个800g的数据库可以存放在1个1t的磁盘中,也可以是通过raid拆分为多个磁盘,当然一个磁盘的性能明显比多个磁盘的要差。

负载隔离配置有问题

可能读到这里不太清楚负载隔离是什么,简单的说就是数据文件要放在哪里,日志文件要放在哪里,tempdb数据库要放在哪里。

负载隔离对sql server 存储计划来说是很重要的,最简单的,也是很容被忽略的,为啥,因为不知道日志文件和数据文件的区别,不知道生产库和tempdb之间的关系和区别。日志文件是顺序写入的,数据文件是随即读写的,如果你把2个放在同一个磁盘或者raid里面,要日志文件的顺序读写算啥了。都体现不出优点来了。

所以日志文件和数据文件要分开无疑。

分区对齐配置有问题

有一片相关的文章:《Disk Partition Alignment Best Practices for SQL Server》,很多人都不知道分区对齐是什么概念,但是又20%-30%的性能都浪费在上面。

关键的问题就是有63个保留扇区被用来MBR。当windows创建分区的时候就会保留31.5kb的空间供MBR使用。这样就照成了不对齐,和raid的条带单元代销不对齐了。raid条带的单元大小是从4kb到512kb的。

多数磁盘一个扇区的大小是512B,但是 ssd是4kb一个扇区,sql server 的推荐分配单元大小是64kb但是ntfs的大小则是4kb,根据推荐值64kb的大小就是128个扇区。但是保留扇区是63个,当发生io的时候,sql server 读取128个扇区,那么就会发生2次io,从第一个磁盘中读取65个扇区,从第二个磁盘中读取63个扇区。为了阻止,windows 的保留空间变为了1mb,那么就能包容所有的raid单元条带的大小。但是windows2008以下的版本默认是不对齐的。就需要命令行下调用diskpar或者diskpart来显示的对齐。

查看是否对齐的唯一方法就是wmic命令:

wmic partition get BlockSize, StartingOffset, Name, Index

如果用Startingofferset/raid条带大小,如果为整数那么就是对齐的否则就是不对齐的。

分区保留扇区只能在磁盘的创建分区的时候设置。

create partition primary align=64

分区对齐后,可以给分区分配盘符并且在格式化的时候指定分配单元大小,这样就避免了没对齐带来的性能冲击。

总结

关于隔离的内容个人觉得讲得不是很深入,大家可以去看原书:《Disk Partition Alignment Best Practices for
SQL Server
》第二章的Choosing the
Right RAID Level下的Workload considerations小节,详细描述了关于数据文件,日志文件,tempdb的特点,并建议使用哪种raid 比较合适。

这里的io问题主要是讲io的配置问题。io的配置如果撇开SAN不讲,还是挺简单的。

[转]SQL Server 性能调优(io)的更多相关文章

  1. sql server 性能调优之 资源等待PAGELATCH

    一.概述 在前几章介绍过 sql server 性能调优资源等待之PAGEIOLATCH,PAGEIOLATCH是出现在sql server要和磁盘作交互的时候,所以加个IO两个字.这次来介绍PAGE ...

  2. 【目录】sql server 性能调优

    随笔分类 - sql server 性能调优 sql server 性能调优之 资源等待之网络I/O 摘要: 一.概述 与网络I/O相关的等待的主要是ASYNC_NETWORK_IO,是指当sql s ...

  3. SQL Server 性能调优培训引言

    原文:SQL Server 性能调优培训引言 大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录. 作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤 ...

  4. sql server 性能调优之 资源等待 LCk

    一.  概述 这次介绍实例级别资源等待LCK类型锁的等待时间,关于LCK锁的介绍可参考 “sql server 锁与事务拨云见日”.下面还是使用sys.dm_os_wait_stats 来查看,并找出 ...

  5. sql server 性能调优之 CPU消耗最大资源分析1 (自sqlserver服务启动以后)

    一. 概述 上次在介绍性能调优中讲到了I/O的开销查看及维护,这次介绍CPU的开销及维护, 在调优方面是可以从多个维度去发现问题如I/O,CPU,  内存,锁等,不管从哪个维度去解决,都能达到调优的效 ...

  6. sql server性能调优

    转自:https://www.cnblogs.com/woodytu/tag/%E6%80%A7%E8%83%BD%E8%B0%83%E4%BC%98%E5%9F%B9%E8%AE%AD/defaul ...

  7. sql server 性能调优 资源等待之网络I/O

    原文:sql server 性能调优 资源等待之网络I/O 一.概述 与网络I/O相关的等待的主要是ASYNC_NETWORK_IO,是指当sql server返回数据结果集给客户端的时候,会先将结果 ...

  8. sql server 性能调优 资源等待之内存瓶颈的三种等待类型

    原文:sql server 性能调优 资源等待之内存瓶颈的三种等待类型 一.概述 这篇介绍Stolen内存相关的主要三种等待类型以及对应的waittype编号,CMEMTHREAD(0x00B9),S ...

  9. CPU开销sql server 性能调优

    sql server 性能调优 CPU开销分析 一. 概述 上次在介绍性能调优中讲到了I/O的开销查看及维护,这次介绍CPU的开销及维护, 在调优方面是可以从多个维度去发现问题如I/O,CPU, 内存 ...

随机推荐

  1. Combo Box的简单使用(Win32)

    1 SendMessage函数向窗口发送消息 LRESULT SendMessage( HWND hWnd,     // handle to destination window UINT Msg, ...

  2. eps图片中有中文乱码的问题

    一般的,如果matlab中的fig图片中有中文,直接saveas为eps,eps再插入latex后会出现乱码. 解决的办法为: (1) *.fig利用‘file--print’保存为*.pdf (2) ...

  3. Android sdk manager更新 下载API源码

    方法一:在C:\Windows\System32\drivers\etc路径下的hosts文件中加入如下代码即可更新 203.208.46.146 www.google.com74.125.113.1 ...

  4. 错误 NETSDK1068: 框架依赖型应用程序主机需要一个至少 “netcoreapp2.1” 的目标框架

    错误 NETSDK1068: 框架依赖型应用程序主机需要一个至少 “netcoreapp2.1” 的目标框架 我有一个ASP.NET Core 2网站应用程序,编译运行都没有问题,但是发布时却出了错, ...

  5. WebDriver框架之自动运行失败的case

    大家在运行自动化case的时候都会碰到失败的情况,有的时候可能是被测程序有bug,还有就是网络的问题,如果想采取失败的case再运行一次的机制,那么有bug的情况,即使再运行N次还是失败,那么如果是网 ...

  6. saturate_cast防越界函数

    CV_IMAGE_ELEM(img2,uchar,i,j*3+c)=saturate_cast<uchar>(alpha*( CV_IMAGE_ELEM(img,uchar,i,j*3+c ...

  7. CF 276C Little Girl and Maximum Sum【贪心+差分】

    C. Little Girl and Maximum Sum time limit per test2 seconds memory limit per test256 megabytes input ...

  8. CSU七月校赛B

    #include <iostream> #include<cstdio> #include<algorithm> #include<cstring> # ...

  9. luogu P1038借教室【Noip提高组2012】

    这道题我读完题目的第一感觉是: 这不就是个线段树??用线段树维护区间最小值,检查是否满足订单要求即可判断. 对于修改操作直接在区间上进行. 据说会卡一卡线段树,但是貌似写一个懒标记,连zkw线段树都不 ...

  10. POJ 1722 SUBTRACT

    给定一个数组a[1,2,..,n] .定义数组第i位上的减操作:把ai和ai+1换成ai - ai+1.输入一个n位数组以及目标整数t,求一个n-1次操作序列,使得最后剩下的数等于t最后输出依此操作的 ...