解決SQL Server虛擬記憶體不足情況
癥狀
在具有 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 建議您在運行該伺服器之前進行謹慎的考慮,因為系統上具有如此數目的資料庫所需的系統開銷將佔用緩衝池中的大量虛擬記憶體,從而可能導致系統整體效能下降。
: 打造SQL Server2000的安全性原則