首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 效能調優實戰:透過用戶端統計資訊精準定位網路傳輸瓶頸

     編輯:關於SqlServer

專案組回報:單表僅 69 筆資料,用戶端執行 `SELECT *` 卻耗時 2 分 23 秒,但伺服器本機僅 2 秒。經分析,該表含 `image` 型別欄位存放圖片,單表 13 MB,跨專線 (6 Mbps) 傳輸導致嚴重網路延遲。本文示範如何用 SSMS 用戶端統計資訊 量化網路傳輸耗時,並給出優化策略。

現場還原與關鍵數據

  • 資料表:`Item_Test`,69 列,保留空間 13,864 KB (資料 13,800 KB)。
  • 用戶端執行 `SELECT * FROM Item_Test`:總耗時 143 秒。
  • 伺服器本機 (SSMS) 執行相同查詢:2 秒。

用戶端執行耗時 2分23秒

伺服器本機執行僅 2 秒

開啟用戶端統計資訊

SSMS 工具列 → 勾選 Include Client Statistics (或 Shift+Alt+S) → 再次執行查詢 → 結果面板切換至 Client Statistics 索引標籤。

Client Statistics 面板

關鍵指標解讀

類別指標實測值含義
Network StatisticsServer Roundtrips1往返次數
TDS Packets Sent from Client1用戶端送出封包數
TDS Packets Received from Server1,012伺服器回傳封包數 (大量資料分割)
Bytes Sent from Client215用戶端送出位元組
Bytes Received from Server14,428,921接收 13.7 MB 資料 (含圖片)
Time StatisticsClient Processing Time140,132 ms用戶端處理時間 ≈ 網路傳輸時間
Total Execution Time143,xxx ms總耗時
Wait Time on Server Replies~3,000 ms伺服器端處理等待 (極短)

結論: 伺服器端處理僅 ~3 秒,97% 以上時間耗在網路傳輸 13.7 MB 圖片資料。資料庫無效能問題,瓶頸在頻寬與傳輸量。

TDS 封包流程示意

TDS 封包請求回應流程

優化策略

  1. 只選必要欄位: 移除 `Item_Photo`,`SELECT Id, Name, Price ...` 瞬間降為毫秒級。
  2. 避免資料庫存大型二進位物件: 圖片/檔案應存檔案系統或物件儲存 (S3/Blob),資料庫僅存路徑/URL。
  3. 啟用壓縮: 壓縮資料行/資料表或應用層 gzip,減少傳輸量。
  4. 分頁/延遲載入: 列表頁不載入圖片,詳情頁按需載入。

延伸:ASYNC_NETWORK_IO 等待類型

若在 `sys.dm_os_wait_stats` 觀察到大量 `ASYNC_NETWORK_IO`,代表 SQL Server 等待用戶端接收資料,同樣指向網路/用戶端處理速度不足。

心法: 效能調優需全域視角——CPU、I/O、執行計畫、網路頻寬、傳輸資料量 同等重要。別讓資料庫背負非其責的「慢查詢」黑鍋。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved