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

解決 SQL Server 記憶體佔用過高:原理、配置與查詢優化三板斧

     編輯:關於SqlServer

(本文內容與文章 87756 高度重複,此處為精簡整合版,補充實操細節。)

記憶體消耗三大來源

  1. 緩衝池: 資料/索引頁面快取。動態增長至上限或系統低記憶體通知。
  2. 查詢工作區: Hash Join、Sort、游標、Spool 運算子申請的記憶體授予。
  3. 其他: 鎖結構、執行計劃快取、連線上下文等。

配置「最大伺服器記憶體」

  • SSMS:右鍵伺服器 → 屬性 → 記憶體 → 最大伺服器記憶體 (MB)。
  • T-SQL:EXEC sp_configure 'max server memory (MB)', 4096; RECONFIGURE;
  • 建議值:
    專用 DB:總 RAM × 0.85
    共存 Web/App:總 RAM × 0.6
    留 1-4 GB 給 OS(視總量)。

查詢層面降低記憶體授予

  • **索引優化:** Join/排序欄位加索引 → 避免 Hash Match/Sort 溢寫 tempdb。
  • **避免 SELECT *:** 僅取必要欄位,減少資料行大小與傳輸量。
  • **分頁查詢:** 大結果集用 OFFSET/FETCH 或 ROW_NUMBER 分頁,避免一次性大量授予。
  • **拆分大查詢:** 複雜報表拆為多步驟,中繼結果落地暫存表。

監控關鍵指標

  • Performance Monitor:SQL Server:Memory Manager → Total Server Memory / Target Server Memory。
  • DBCC MEMORYSTATUS 詳細分佈。
  • sys.dm_exec_query_memory_grants 觀察等待/授予狀況。

**核心心法:** 記憶體給緩衝池是投資回報率最高;給查詢工作區是必要成本,**優化查詢讓每 MB 都花在刀口上**。

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