在我們虛擬化系列文章的數據庫測試中,我們看到了數據庫的測試過程會用到大量的內存,這很容易達到32bit Windows的一處限制:進程內存被限制為2GB,而通常服務器裡面4GB或更多的內存很是常見,這麼多內存是怎麼應用的呢?它們怎麼在數據庫應用方面發揮力量呢?我們下面的測試可以解答相關的一系列問題。
SQL Server 2005是一個流行的關系數據庫系統
程序只能使用2GB內存的這個限制是32位操作系統架構引起的。傳統意義上的32bit操作系統使用32bit的內存地址,這樣尋址范圍就已經被限制為4GB——4G也就是2的32次方,然而通常操作系統的設計上為了安全性的考慮,應用程序和內核所處的內存地址空間是互相獨立的,也就是說,應用程序和內核各自能訪問2GB的內存空間。雖然不同的操作系統實現具有不同的值,不過多數現在的操作系統在這一點上都很一致。
為了讓程序突破2GB尋址的限制,近代Windows NT核心提供了一個變通的方案:4GB內存調整優化技術,通過這個技術,可以將用戶模式的尋址空間擴大至3GB,這樣核心尋址空間便被限制為1GB了,需要超大內存容量的應用程序可以從這個特性中獲得性能改善,如SQL Server數據庫這種類型。要使用這個4GB內存優化技術,用戶需要在Windows Server操作系統的啟動參數中加入/3GB開關。這個特性同時需要操作系統打開DEP(數據執行保護,其實/3GB開關需要的是PAE的支持)。