程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 如何解決SQL Server虛擬內存不足情況

如何解決SQL Server虛擬內存不足情況

編輯:關於SqlServer
 

SQL Server數據庫中能儲存大量的數據,這就要求SQL Server數據庫的內存足夠大,虛擬內存在SQL Server數據庫中也發揮著很大的作用,那麼如果虛擬內存不足,大家可以試試下文中為大家介紹的方法,幫助大家解決虛擬內存不足的困擾。

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

  1. SQL Server 創建的所有線程的堆棧和關聯的線程環境塊。在 SQL Server 創建了所有 255 個工作線程之後,這大約為 140 MB。
  2. 由在 SQL Server 地址空間(根據具體系統而有所不同)中運行的其他 DLL 或進程進行的分配,如: •任何鏈接的服務器中的 OLE DB 提供程序。
  3. 通過使用 sp_OA 系統存儲過程或擴展存儲過程加載的 COM 對象。
  4. 加載到地址空間中的任何映像(.exe 或 .dll),這些映像通常使用 20 到 25 MB,但是如果您使用鏈接的服務器、sp_OA 或擴展存儲過程,則這些映像可能使用更多的空間。
  5. 進程堆和 SQL Server 可能創建的任何其他堆。在啟動過程中,此空間通常為 10 MB,但是如果您使用鏈接的服務器、sp_OA 或擴展存儲過程,則此空間可能更多。
  6. 來自 SQL Server 進程的大於 8 KB 的分配,例如較大查詢計劃、網絡數據包大小配置選項接近於 8 KB 時發送和接收緩沖區等情況所需要的分配。要查看此數字,請查找在 DBCC MEMORYSTATUS 中報告的 OS Reserved 值,該值是作為 8 KB 頁的數目報告的。通常,該值為 5 MB。
  7. 跟蹤緩沖池中每個緩沖區狀態信息的數組。該值通常約為 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 Server中虛擬內存不足的問題,虛擬內存大了運行速度自然就上去了,大家的工作效率也就自然而然的提高了,大家何樂而不為啊?

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved