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

SQL Server 2000 記憶體管理內幕:虛擬記憶體、3GB 啟動選項與 LARGE_ADDRESS_AWARE

     編輯:關於SqlServer

從開發者視角深入剖析 SQL Server 2000 如何透過 Win32 API(VirtualAlloc/VirtualFree)管理虛擬記憶體,解釋 4GB 位址空間的 User/Kernel 模式分割、/3GB 啟動選項擴展使用者空間至 3GB、/USERVA 微調分割比例、以及 IMAGE_FILE_LARGE_ADDRESS_AWARE 標記對大位址感知的必要性。

核心概念

  • 32 位元 Windows 給每進程 4GB 虛擬位址空間(非實體記憶體),分 User Mode(應用程式)與 Kernel Mode(核心),預設各 2GB。
  • SQL Server 幾乎所有配置皆用虛擬記憶體,最終呼叫 VirtualAlloc/VirtualFree。
  • /3GB(Win2000 Advanced Server 以上):User Mode 擴至 3GB,Kernel Mode 降為 1GB。需在 BOOT.INI 加入 /3GB 開關。
  • /USERVA(XP/Server 2003):搭配 /3GB 使用,可精確指定 User Mode 大小(如 /USERVA=2560 給 2.5GB)。
  • LARGE_ADDRESS_AWARE:PE 標頭第 32 位標記,告知 OS 該程式能正確處理高位址指標。SQL Server 已啟用此標記(可用 DumpBin/ImageCfg 驗證),故在正確 OS 上加 /3GB 即可受益。

警告

  • 在 Win2000 Professional/Server(非 Advanced/DataCenter)加 /3GB 只會縮小 Kernel 空間,不會擴展 User 空間,反而有害。
  • DLL 不檢查此標記,但 DLL 程式碼必須能正確處理高位址指標。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved