IT *_*her 3 performance sql-server sql-server-2008-r2 wait-types
这与我自己的帖子有关
SQL server 每天早上 8:30 开始,晚上 9:30 左右停止。(所以等待时间每天都会重置) SQL server 将被大约 60 个用户同时使用(直接用于修改数据,也用于应用程序的后端数据库)我们在办公室使用)服务器有 8 GB 内存。大多数数据库每小时都会做一次日志备份。(备份由我们自己的备份工具完成,它可以自动进行 SQL 备份)
如本文所述,我使用了以下查询。
select *
from sys.dm_os_wait_stats
WHERE [wait_type] NOT IN (
N'CLR_SEMAPHORE', N'LAZYWRITER_SLEEP',
N'RESOURCE_QUEUE', N'SQLTRACE_BUFFER_FLUSH',
N'SLEEP_TASK', N'SLEEP_SYSTEMTASK',
N'WAITFOR', N'HADR_FILESTREAM_IOMGR_IOCOMPLETION',
N'CHECKPOINT_QUEUE', N'REQUEST_FOR_DEADLOCK_SEARCH',
N'XE_TIMER_EVENT', N'XE_DISPATCHER_JOIN',
N'LOGMGR_QUEUE', N'FT_IFTS_SCHEDULER_IDLE_WAIT',
N'BROKER_TASK_STOP', N'CLR_MANUAL_EVENT',
N'CLR_AUTO_EVENT', N'DISPATCHER_QUEUE_SEMAPHORE',
N'TRACEWRITE', N'XE_DISPATCHER_WAIT',
N'BROKER_TO_FLUSH', N'BROKER_EVENTHANDLER',
N'FT_IFTSHC_MUTEX', N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP',
N'DIRTY_PAGE_POLL', N'SP_SERVER_DIAGNOSTICS_SLEEP')
order by wait_time_ms desc;
Run Code Online (Sandbox Code Playgroud)
结果如下图(只显示前25行)
现在得到这个结果后,我很困惑这些值是真的很高还是正常情况。(我也获取了与 SQL 相关的性能计数器值,但无法使用它进行故障排除,因为大多数文章只描述了哪些性能计数器使用,而不是正确分析它或者我很难找到我的服务器的性能)那么这些的理想价值是多少?我的 sql server 是否有性能问题?如何决定?
您应该考虑的不仅仅是 的绝对值,wait_time_ms
或者waiting_tasks_count
您还应该查看平均等待时间。当您查看平均等待时间时,您应该问自己:“等待此资源的时间是否合理?”
例如(如果我计算正确的话)您的PAGEIOLATCH
等待时间在 4-5 毫秒之间。这是“好” - 因为这是硬盘驱动器获取 I/O 请求的响应时间。但是,如果您在 SSD 上运行(该值预计会在 1ms 范围内徘徊),则它是“坏的”。
再举一个例子,您的WRITELOG
等待时间超过 10 毫秒。这是“糟糕的”,因为如果您正确执行顺序 I/O,该值(即使在旋转锈蚀上)应该真的在 1ms 范围内。
然而,所有这一切都必须在你试图实现的背景下看到。如果您希望“通常使事情更快”(并非罕见的请求),您需要首先查看最大的等待(通过 wait_time_ms),因为它们最有可能伤害您。如果您的调整更有针对性,请查看特定的等待类型,即使它们在列表中较低。
例如,您有一些LCK_M_S
平均 70 毫秒的等待时间。它们看起来并不重要,因为它们太少了。但也许它们会影响一些重要的用户。如果这是一个查询应该快速进出的 OLTP 系统 - 70 毫秒是一个“坏”数字(因为短期运行事务中的锁应该只保持几毫秒甚至几微秒)。
另一个示例:如果您试图更快地进行 DML 查询,您将需要定位WRITELOG
和PAGEIOLATCH_EX
等待。如果您正在优化读取,您将更多地关注减少PAGEIOLATCH_SH
等待(例如使用 SSD 或 RAM)或使数据库执行更少的读取 I/O(例如通过优化索引)。
归档时间: |
|
查看次数: |
12286 次 |
最近记录: |