一 关于SQL Server的部署一般规划和建议如下:
1. 操作系统和SQL Server单独构建在RAID1的磁盘镜像上;
2. 出于高速和安全的原则,日志文件需要单独安装在RAID1/RAID10上;
3. tempdb文件最好放在RAID0上
4. 数据文件出于安全、性能、容量、成本的综合考虑一般则使用RAID5。
在微软的technet上有一篇关于存储的最佳实践top 10(Storage Top 10 Best Practices)是这么要求的:
1. 了解SQL Server的IO特性和应用系统的IO需求规格。
2. 使用更多/更快的磁盘驱动以获取良好的性能
3. 不要过度优化存储,简单的设计通常能够提供良好的性能和灵活性。
4. 部署前验证配置。可以用SQLIO之类的工具模拟测试。
5. 始终把日志文件放在RAID10/RAID1上。
6. 把日志文件和数据文件从物理磁盘上隔离。
7. 认真考虑TempDB的数据配置。
8. 在数据文件的数量和CPU的容量之间平衡。
9. 不要忽视SQL Server的基础。
10.不要忽视存储的配置
二 SQL Server占用I/O资源监控
对于SQL Server占用I/O资源的监控主要集中在磁盘响应时间、队列长度、磁盘读写和传输速度上。下面提供了几种对象、计数器和相应的阈值及描述。
Physical Disk
1. % Disk Time (Logical Disk) :驱动器忙于读写所占用的时间比
average value < 85% ,如果大于 90%,则参考current disk queue length, RAID 可以大于100%,当大于100%时,参考average disk queue length。
2. Average Disk queue length: 平均有多少读写请求正在等待访问磁盘。
一般要小于磁盘个数 * 2, 正常<0.5
3. Current disk queue length.
一般要小于磁盘个数 * 2
4. Disk transfers /sec : 平均每秒每个磁盘操作的速率。
Max value <100
5. Disk bytes/sec : 平均每秒每个磁盘传输的数据量
Max value < 10M
6. Avg.Disk sec/transfer : 数据传输速度,测试平均每次传输的时间.
Avg value < 10ms
7. Avg.Disk sec/read:
Avg value < 10ms
8. Avg.Disk sec/read:
Avg value < 20ms
sys.dm_io_virtual_file_stats 能够返回数据和日志文件的 I/O 统计信息,这也为我们从整体上了解各磁盘和数据库的吞吐量和等待时间有了一个直观的认识。
sys.dm_io_pending_io_requests则对应SQL Server 中每个挂起的 I/O 请求,我们可以将sys.dm_io_pending_io_requests和Sys.dm_io_virtual_file_stats关联起来,则可以查看当前是否有等待的IO,然后进行定位和识别