什么会导致我的客户端服务器上的高缓冲区 I/O?

win*_*sql 3 sql sql-server

我有一个客户端的 SQL Server 具有高Buffer I/O

我检查了长时间运行的查询,添加了新索引,并且服务器上没有锁定。是磁盘问题吗?

以下是活动监视器上等待的详细信息:

在此处输入图片说明

The*_*war 5

首先尝试检查您的磁盘延迟是否在阈值内..以下是一些指标..您可能需要看看这些是否适用于您

平均磁盘秒/读取值
在此处输入图片说明

平均磁盘秒/写入

在此处输入图片说明

您可以查看此链接以配置 Perfmon: SQL Server 磁盘性能指标 – 第 1 部分 – 最重要的磁盘性能指标

此链接还提供工具来对您的 IO 进行压力测试并获取报告。

如何使用 SQLIOSim 实用程序模拟磁盘子系统上的 SQL Server 活动

如果您的磁盘 IO 在延迟范围内,请尝试查找导致高 IO 的查询,磁盘 IO 高的原因之一可能是索引不合适,您可能需要添加正确的索引,以便 SQL 不会读取不必要的数据

你也可能有更少的内存,因为更少的内存会导致 SQL 刷新缓冲池缓存。这也会导致 IO 问题

DMV 检查导致高 IO 的查询

SELECT TOP 25 cp.usecounts AS [execution_count]
      ,qs.total_worker_time AS CPU
      ,qs.total_elapsed_time AS ELAPSED_TIME
      ,qs.total_logical_reads AS LOGICAL_READS
      ,qs.total_logical_writes AS LOGICAL_WRITES
      ,qs.total_physical_reads AS PHYSICAL_READS 
      ,SUBSTRING(text, 
                   CASE WHEN statement_start_offset = 0 
                          OR statement_start_offset IS NULL  
                           THEN 1  
                           ELSE statement_start_offset/2 + 1 END, 
                   CASE WHEN statement_end_offset = 0 
                          OR statement_end_offset = -1  
                          OR statement_end_offset IS NULL  
                           THEN LEN(text)  
                           ELSE statement_end_offset/2 END - 
                     CASE WHEN statement_start_offset = 0 
                            OR statement_start_offset IS NULL 
                             THEN 1  
                             ELSE statement_start_offset/2  END + 1 
                  )  AS [Statement]        
FROM sys.dm_exec_query_stats qs  
   join sys.dm_exec_cached_plans cp on qs.plan_handle = cp.plan_handle 
   CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) st
ORDER BY qs.total_logical_reads DESC;
Run Code Online (Sandbox Code Playgroud)