回答

收藏

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

技术问答 技术问答 260 人阅读 | 0 人回复 | 2023-09-13

我有一个具有高 缓冲区I / O 的客户端SQL Server 。" e, _- v4 Y  e) ]3 Q, b- ?
我检查了长时间运行的查询,添加了新索引,并且服务器上没有锁。是磁盘问题吗?
4 F3 k" `" ~# j6 p                8 Z! x5 s  q4 p+ y( H  |9 C
解决方案:
8 g3 ?8 k! ^/ ^1 v8 L                8 Y# N; P# x9 s4 {1 y( n
: v1 V' l! r2 h/ O
: E6 J# h' c1 i
                首先尝试检查您的磁盘延迟时间是否在阈值内。
7 b) {$ F5 m, F9 x$ I5 G您可以检查此链接以配置Perfmon:SQL Server磁盘性能指标-第1部分-- w! [% k$ w; u7 \+ S% j. g5 N- e
最重要的磁盘性能指标
; ?2 M9 d) q; a, v. L该链接还提供了一些工具,可以对您的IO进行压力测试并获得报告。; ~  L  Y1 H3 q3 x2 b" `
如何使用SQLIOSim实用程序模拟磁盘子系统上的SQL Server活动
- n3 ^# C+ ^& K7 ^如果磁盘IO处于延迟范围内,请尝试查找引起高IO的查询,导致磁盘IO高的原因之一可能是不合适的索引,您可能需要添加正确的索引,以使SQL不会读取不必要的数据. r/ K9 _' L5 Y# f% a# s
另外,您可能会拥有较少的内存,因为内存较少会导致SQL刷新缓冲池缓存。这也会导致IO问题。
" ?* d5 N, W3 y5 W" aDMV检查导致高IO的查询
* O4 @% W! }0 BSELECT TOP 25 cp.usecounts AS [execution_count]
) i3 ], L* S( c% h$ [: Z, b4 o7 N      ,qs.total_worker_time AS CPU
& n, D1 ?  O# v% Z* @' M      ,qs.total_elapsed_time AS ELAPSED_TIME% |, o" M0 [) q1 I, E( W
      ,qs.total_logical_reads AS LOGICAL_READS; p* ^/ s; f  E) M) U5 j
      ,qs.total_logical_writes AS LOGICAL_WRITES+ k  T' J8 b, N; f( k) J- d' U
      ,qs.total_physical_reads AS PHYSICAL_READS
& W/ j3 v' s' f) D      ,SUBSTRING(text, * `: ]2 \: w0 ^
                   CASE WHEN statement_start_offset = 0 " }/ d- w' y4 J% `; Z+ Z5 E7 u
                          OR statement_start_offset IS NULL  % B0 H6 U+ {  X8 d; e
                           THEN 1  
* r; |$ d$ l; B) A* d                           ELSE statement_start_offset/2 + 1 END, ) b9 ]2 g0 e/ W, v- u5 |
                   CASE WHEN statement_end_offset = 0
# _6 l7 O2 U9 ~  D                          OR statement_end_offset = -1  
. b, |  d( g. E' Z4 k, A                          OR statement_end_offset IS NULL  
. c* _/ b" d) E3 P; h0 ]& y; h                           THEN LEN(text)  
2 I  L0 I) O2 o: f- C4 T                           ELSE statement_end_offset/2 END -
& y; b8 F& E: ?- _                     CASE WHEN statement_start_offset = 0
- g$ Y! m/ L4 o                            OR statement_start_offset IS NULL & n5 {7 G5 y% |* G6 B, L
                             THEN 1  
, o+ _1 m+ @6 p                             ELSE statement_start_offset/2  END + 1 ; M4 z4 h' [( U) l9 B$ u
                  )  AS [Statement]        
: Q7 ^. s3 b8 I8 u8 T- w# G+ NFROM sys.dm_exec_query_stats qs  
9 U& b7 ~* ^7 c# w" E% ?: n! c/ V6 c   join sys.dm_exec_cached_plans cp on qs.plan_handle = cp.plan_handle
9 S/ ~+ C: X9 w   CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) st
7 T$ h# U, s/ n5 a$ j& \0 UORDER BY qs.total_logical_reads DESC;
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则