我们有专用的 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
经过进一步研究(检查等待时间并在高峰流量下运行网站),上面描述的“问题”实际上并不是问题。
当我们移除瓶颈(旧日志存储)时,问题就出现了。因此,当我们为事务日志获取更快的磁盘时,数据磁盘每秒可以处理更多事务,因此队列长度增加。
这也解释了为什么磁盘空闲时间较好。
对于快速磁盘系统(使用缓存等)来说,“磁盘时间”计数器似乎几乎没有用。