AYSNC_IO_COMPLIETION:标识任务正在等待IO请求来完成操作,当一个应用程序连接SQL Server,在处理数据时变得非常慢,很可能就会出现这种类型的等待。
IO_COMPLIETION:发生在一个任务正在等待用于非数据页IO的IO操作上,非数据页,一般是指日志文件,通常发生在修改大量修改,或者内存中存在大量的脏数据时。
三,影响读写性能的因素数据库系统对IO的性能依赖较高,那么影响数据库系统读写性能的因素有哪些呢?
1,物理硬盘的IO能力
机械硬盘的IO速度没有固态硬盘快,可以考虑把数据库系统的机械硬盘更新为固态硬盘。
2,内存对硬盘IO的影响
在SQL Server Engine 访问数据时,如果相应的data不存在于Buffer Pool,那么Buffer Manager 从Disk中的Data File(mdf 或 ndf)中将相应的data page读取到内存中。SQL Server 将data page缓存起来。理想情况下,只要SQL Server能够使用的内存充足,SQL Server 会将所有读取到内存的中Data Page缓存到Buffer Pool中。对于读取操作,只要相应的数据都缓存在内存中,Select 就不会有任何硬盘IO。
当Buffer Pool空间不足时,SQL Server 激活 LazyWriter,主动将内存中一些很久没有使用的Data Cache和 Plan Cache 清除,mark为Free buffer,供其它Data Page使用。如果这些Page上的修改还没有被CheckPoint写回Disk,那么LazyWrite会将其写回。
3,碎片和压缩
如果数据页面或index 页面的碎片很多,每个页面存储的数据行较少,那么SQL Server 需要读写更多的Page。如果数据在页面里存储的非常紧凑,存储相同数据所消耗的Page越少,并且可以充分利用SQL Server 预读的优势,减少IO。
压缩技术不仅使数据占用的Disk 空间减少,而且能够减少IO。由于数据在写入Disk之间经过压缩处理,存储相同数据所消耗的Page减少,读取的Data Page会减少。压缩技术在一定程度上能够降低IO,但需要付出一定的代价:额外消耗少量的CPU和内存来解压缩。
4,利用多个物理硬盘实现Data File的并发读写
在DB中的FileGroup 创建多个File,将这些File存放到不同的Physical Disk上。File 分布到不同的Physical Disk上,IO也会分布到不同的Physical Disk上,这样能够实现数据的并发读取,提高读取性能。
对于日志文件,SQL Server会频繁的写事务日志。只要数据库发生修改,就会不断地写入日志文件。如果不能及时完成日志文件的IO,会导致事务的延迟提交,对性能的影响较大,所以,尽量将日志文件放到写入速度快的Disk上。SQL Server 顺序写事务日志,在一个时间点,SQL Server 只会写一个日志文件。在不同的Physical Disk上创建多个log file对性能基本没有帮助。
5,工作负载
日志文件以写为主,工作量由修改命令申请的事务数量决定,日志文件是顺序写的,写入速度快于随机写。如果日志记录不能及时写入,那么Request会处于WriteLog等待状态,对系统整体性能影响较大。
数据文件写入的数据量由修改量决定,SQL Server除了设置bulk logged 恢复模式之外,没有太大的调整选项。
数据文件读取的数据量,由访问的数据量和Buffer Pool中缓存的数据量共同决定。如果访问的数据量减少或者内存缓存区增加,都可以降低SQL Server 从Physical Disk读取的Data Page数量。在内存不变的情况下,可以通过优化查询语句,减少数据访问量,来提高SQL Server 数据文件的读取性能。
四,硬盘IO的性能优化硬盘IO的性能调优,通常来说,跟Buffer Pool的大小和数据的分布有关
1, Buffer Pool
Buffer Pool是SQL Server数据库系统的缓冲池,用于缓存从硬盘读取的数据页。当SQL Server所需的数据不在内存的Buffer Pool中时,就会触发硬盘IO,把数据从硬盘中的文件中读取到内存中的Buffer Pool中。如果所需的数据存在于Buffer Pool中,SQL Server直接从内存中获取数据,不会触发任何硬盘的IO操作。因此,内存容量足够大,硬盘IO将会足够小。如果系统存在内存压力,那么SQL Server将会频繁地触发硬盘IO,从硬盘文件中获取数据,这将会增加查询的响应时间。
2, 多硬盘并发IO
在存储数据时,把数据分布在不同的物理硬盘上,在读写数据时,可以把工作负载分担到不同的物理硬盘上,多个硬盘并发处理数据,将会大大降低数据的读写时间。
因此,在设计数据库系统时,应该尽量把数据分布到不同的物理硬盘上,并且每个硬盘上的数据量保持均衡,这样,才能最大化利用多硬盘的优势,实现数据的读写时间最小化。
3,日志文件