SQL Server出現虛擬記憶體不足的解決方法

iSQlServer發表於2009-12-03

  症狀

  在具有 2 GB 或更多 RAM 的計算機上,除了 256 MB (SQL Server 7.0) 或 384 MB (SQL Server 2000) 虛擬地址空間之外,SQL Server 在啟動過程中保留剩下的所有虛擬地址空間以供緩衝池使用。另外,為了儲存資料和過程快取,SQL Server 使用緩衝池記憶體為來自 SQL Server 程式的大多數小於 8 KB 的其他記憶體請求提供服務。剩下的未保留記憶體準備用於不能從緩衝池得到服務的其他分配。這些分配包括、但不限於以下各項:

  •SQL Server 建立的所有執行緒的堆疊和關聯的執行緒環境塊。在 SQL Server 建立了所有 255 個工作執行緒之後,這大約為 140 MB。

  •由在 SQL Server 地址空間(根據具體系統而有所不同)中執行的其他 DLL 或程式進行的分配,如: •任何連結的伺服器中的 OLE DB 提供程式。

  •通過使用 sp_OA 系統儲存過程或擴充套件儲存過程載入的 COM 物件。

  •載入到地址空間中的任何映像(.exe 或 .dll),這些映像通常使用 20 到 25 MB,但是如果您使用連結的伺服器、sp_OA 或擴充套件儲存過程,則這些映像可能使用更多的空間。

  •程式堆和 SQL Server 可能建立的任何其他堆。在啟動過程中,此空間通常為 10 MB,但是如果您使用連結的伺服器、sp_OA 或擴充套件儲存過程,則此空間可能更多。

  •來自 SQL Server 程式的大於 8 KB 的分配,例如較大查詢計劃、網路資料包大小配置選項接近於 8 KB 時傳送和接收緩衝區等情況所需要的分配。要檢視此數字,請查詢在 DBCC MEMORYSTATUS 中報告的 OS Reserved 值,該值是作為 8 KB 頁的數目報告的。通常,該值為 5 MB。

  •跟蹤緩衝池中每個緩衝區狀態資訊的陣列。該值通常約為 20 MB,除非 SQL Server 執行時啟用了地址視窗化擴充套件外掛 (AWE),在這種情況下,該值將會顯著提高。

  在擁有大量資料庫的系統上,日誌格式化所需的 64 KB 分配可能會佔用所有剩餘的虛擬記憶體。這之後的分配將失敗,導致本文的“症狀”一節中列出的一個或多個錯誤。

  通過使用 -g 啟動引數,您可以指示 SQL Server 保留附加的虛擬記憶體可用,以便這些與日誌相關的分配和其他正常分配加在一起也不會用完虛擬地址空間。

  下表根據資料庫的數目和伺服器版本列出 -g 值的一些建議初始值: DatabasesSQL Server 7.0SQL Server 2000

  250-g134N/A

  500-g185N/A

  750-g237N/A

  1000-g288-g288

  1250-g340-g340

  1500-g392-g392

  此表是使用列出的典型值進行計算的,並且此計算是基於沒有使用連結的伺服器活動、sp_OA 或擴充套件儲存過程這一假設的。它還假設您沒有使用 AWE 和 SQL 事件探查器。出現以上任意一種情況都需要您增加 -g 的值。

  如果伺服器上資料庫的數目超過此數目,Microsoft 建議您在執行該伺服器之前進行慎重的考慮,因為系統上具有如此數目的資料庫所需的系統開銷將佔用緩衝池中的大量虛擬記憶體,從而可能導致系統整體效能下降。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-621553/,如需轉載,請註明出處,否則將追究法律責任。

相關文章