SQL Server 上的高磁盘时间

SQL Server 上的高磁盘时间

我们有专用的 SQL Server 2008 R2 企业版。

设置如下:

  • D:(数据文件)-存储在本地 SSD 磁盘上(与日志文件不是同一个磁盘)(raid 10)
  • E:(日志文件)-存储在本地 SSD 磁盘上(与数据文件不是同一个磁盘)(raid 1)
  • F:(事务日志备份)- 远程存储在 SAN 上

今天我们将日志文件移到了新磁盘(从 F: 移到了 E:)。从共享卷 (F:(SAN)) 移到了专用本地磁盘 (E:)。

然后发生的情况是,“磁盘时间”、“平均传输时间”和“平均磁盘写入队列长度”在我们拥有数据文件的卷(D:)上增加了(而不是在日志文件所在的卷上)。

数据卷和日志卷不共用磁盘,但是共用同一个控制卡。

所有卷的“磁盘空闲时间”都很低。

当然,有一种想法是控制器卡可能超载了。但是,我们需要更多关于问题可能出在哪里的想法。

更新:

RAID 控制器为 DELL PERC H700(512 MB 缓存)。服务器是戴尔 R910

高峰时段,我们每秒大约有 2500 笔交易。

自从我们移动日志文件以来,“磁盘时间”计数器一直为 100%(即使在流量较低的时候)。

但是,D:(数据文件)和E:(日志文件)的“磁盘空闲时间”约为 98-99%

我们已经为数据磁盘和日志磁盘启用了写回缓存。

等待统计数据如下:

wait_type                     wait_time_s
---------                     ----------- 
BROKER_TASK_STOP               1283336.21 
FT_IFTS_SCHEDULER_IDLE_WAIT     101357.47 
PAGELATCH_EX                     89712.72 
BROKER_TRANSMITTER               75894.76
XE_TIMER_EVENT                   38778.35
REQUEST_FOR_DEADLOCK_SEARCH      38770.35
SQLTRACE_INCREMENTAL_FLUSH_SLEEP 38767.03 
FT_IFTSHC_MUTEX                  38759.14
LOGMGR_QUEUE                     38632.87
CHECKPOINT_QUEUE                 38382.63
BROKER_EVENTHANDLER              35082.42   
XE_DISPATCHER_WAIT               34396.31  
DISPATCHER_QUEUE_SEMAPHORE       33578.68

答案1

经过进一步研究(检查等待时间并在高峰流量下运行网站),上面描述的“问题”实际上并不是问题。

当我们移除瓶颈(旧日志存储)时,问题就出现了。因此,当我们为事务日志获取更快的磁盘时,数据磁盘每秒可以处理更多事务,因此队列长度增加。

这也解释了为什么磁盘空闲时间较好。

对于快速磁盘系统(使用缓存等)来说,“磁盘时间”计数器似乎几乎没有用。

相关内容