隨著伺服器硬體的功能變得越來越強大,而價格一路急劇下跌,許多公司(尤其是小公司)發現如今購買資料庫伺服器面臨眾多選擇。這意味著,經驗相對欠缺的資料庫管理員們也被要求設計功能越來越強大的系統。你在為大型系統設計資料庫系統時,能夠買到有許多硬碟和充足記憶體的大型資料庫伺服器。以下是你在設計系統時應當遵守的一些基本原則。
儲存系統
人們在設計磁碟陣列時最常犯下的錯誤就是,只計算所需的閑置容量。閑置容量只是設計儲存子系統時要考慮的一部分而已;另一個部分就是儲存系統需要支援的輸入/輸出操作次數。
應當遵守的一條基本原則就是,寫操作頻繁的資料庫最好使用RAID 10陣列,而讀操作頻繁的資料庫通常最好使用RAID 5陣列。原因在於,如果把資料寫到RAID 5陣列,效能會受到影響。由於把資料寫到RAID 5陣列上,儲存系統必須在寫資料之前計算出奇偶檢驗位,而算出奇偶檢驗位需要相當長的時間,這意味著寫到RAID 5陣列上的效能會降低。
由於這種效能影響,我們總是建議你應當把交易記錄放到RAID 10陣列上。交易記錄是寫操作始終很頻繁的檔案,不管資料庫是以讀操作為主的資料庫,還是以寫操作為主的資料庫。tempdb資料庫也應當放在RAID 10陣列上,具體來說放在與交易記錄檔所在陣列不同的另一個RAID 10陣列上。
對每個磁碟陣列進行分區時,應當確保分區正確對齊。預設情況下,Windows 2003及以下版本沒有正確對齊分區,這會導致磁碟子系統的效能達不到最理想水平。可以通過使用diskpart.exe公用程式(Windows 2000中的diskpar.exe)建立分區來解決這個問題。這樣建立的每個分區其對齊位移量應為64kb;在預設情況下,建立的每個分區其對齊位移量為32kb。Windows 2008在預設情況下建立的分區其對齊位移量為128kb。
物理資料庫構建
微軟最近開始推薦使用的一項比較新的技術就是,針對兩個至四個CPU核心當中的每個核心,資料庫應當有一個物理資料庫檔案。應當為資料庫裡面的每個檔案組做到這一點。
如果你的伺服器有兩個四核CPU,那麼共有八個核心。我們假定資料庫有兩個檔案組,一個名為Data,另一個名為Indexes。那麼每個檔案組都應當有兩個至四個物理檔案。這項技術讓SQL Server可以對磁碟輸入/輸出進行最佳化。可能的話,你應當盡量分散檔案,以便位於每個存放裝置陣列上的檔案儘可能少。
tempdb資料庫的配置應有點不同。配置tempdb資料庫時,建議針對每個CPU核心,資料庫應當有一個物理檔案。這樣系統就可以為tempdb資料庫盡量加快輸入/輸出操作。與使用者資料庫一樣,放在每個磁碟陣列上的檔案也應當儘可能少。
你在資料庫裡面應當始終至少有兩個檔案組。第一個檔案組包括表,第二個組包括索引。你需要讓它們位於不同的檔案組,那樣查詢索引時,裝入到表的操作不會受到影響,反之亦然。
系統記憶體
在過去,購買只安裝了數GB記憶體的資料庫伺服器相當常見。那是因為記憶體的價格還很昂貴。
如今,記憶體價格相當便宜;只要你能承受得了,應當購買盡量多的記憶體。記憶體越多,資料庫的運行速度幾乎總是越快。例外情況就是,如果你安裝的記憶體超過了資料庫的大小。舉例來說,如果你有3 GB大小的資料庫,但安裝了8GB記憶體,那麼為伺服器添加更多記憶體對提升資料庫的效能沒有協助,因為SQL Server可能已經能把整個資料庫裝入到記憶體中。
在決定為SQL Server分配多大記憶體時,絕對不要讓SQL Server把所有記憶體都分配給它。因為Windows作業系統需要記憶體來運行,安裝在資料庫伺服器上的其他任何軟體同樣需要記憶體來運行,比如備份軟體和反病毒軟體等。 建議留出一兩GB記憶體用於作業系統及所用的其他軟體。這個記憶體量的大小取決於安裝了哪些軟體。
因為沒有兩個資料庫伺服器是一樣的,所以沒有明確的原則規定你的硬體解決方案應當是什麼樣子。你有眾多選擇;要設計一款將來可以使用多年的可靠的解決方案,關鍵在於明白自己的資料庫需求,明白自己使用的硬體,明白這些需求在哪些環節得到了滿足,以便既沒有購買對現在而言配置過低的硬體,也沒有購買對下一年而言配置過高的硬體。