如何更好的管理一臺服務器上的多個數據庫?

字號:

每一個實例或者每一個服務器設置一個單一的數據庫能夠使數據庫管理更方便。然而,這樣做很快將增加你的數據庫解決方案的成本,因為你要對你希望托管的每一個數據庫購買一臺新的服務器或者新的SQL服務器許可證。
    為了應對這種價格昂貴的設置,人們一般在一個服務器或者實例上托管多個數據庫(也就是多個應用程序)。雖然這將減少托管所有這些數據庫的成本,但是,這增加了管理這些系統的復雜性,因為你現在要處理多個服務級協議和維護窗口。
    當你決定在同一臺服務器上托管多個數據庫的時候,你要考慮的第一件事是這些系統是否有互補的維護窗口。如果一個系統不能在夜間放慢速度或者離線,另一個系統不能在白天放慢速度或者離線,這些系統就不適合共享一個服務器,因為你在需要為系統使用補丁或者處于其它原因要讓系統離線的時候,你沒有有效的維護時間窗。
    你需要考察的下一個決定因素是這些系統的服務級協議。需要99%的開機時間的系統能夠安排在一起,因為你可能會為這些系統(也許是集群解決方案)建立一個比非重要任務系統更強大的環(huán)境。這可以為你節(jié)省額外的成本,因為你現在不需要采購任何高端系統。具有更高的服務級協議的系統也可能會有同樣的維護時間窗。因此,這些系統在一開始就是互補的。
    承擔工作量
    對托管多個數據庫的SQL服務器進行維護的難題是時機。
    當然,當把多個數據庫集中在一個SQL服務器的時候需要考慮的最重要的問題是,是否有足夠的CPU和內存資源處理這些客戶程序添加到這個數據庫服務器的工作量。如果單個服務器不能提供需要的CPU和內存資源,那么,把這些數據庫都集中在那臺服務器上就不是一個好的選擇。
    當你經過這個整個決策過程并且把這些數據庫都放在同一臺服務器上之后,你如何保持這些系統的健康和在高峰期仍能運行?與其它任何數據庫解決方案一樣,你仍需要處理自己的備份、索引碎片整理和重建、以及為操作系統和SQL服務器使用補丁。
    處理托管多個數據庫的SQL服務器的維護的難題是時機。你需要保證你的維護任務能夠在這個SQL服務器托管的全部數據庫計劃的維護時間窗內完成。在任何數據庫的維護時間窗之外進行維護工作都將引起數據庫運行緩慢,因為硬盤和CPU資源現在被維護活動占用了,而不是處理正常的數據庫查詢。
    重新索引工作
    已經證明是有用的一個技術是比正常運行重新索引指令更頻繁地對你的索引進行碎片整理。整理碎片的指令比重新索引指令有更多的好處。第一,索引碎片整理指令是一種在線操作,而重建索引是一種離線工作(除非你運行SQL服務器2005企業(yè)版或者更新的版本)。第二,如果你頻繁地運行索引碎片整理指令,每一次運行這個指令的時候工作量都比較少。
    例如,你每個星期檢查一次索引碎片,它顯示碎片是70%。這樣,你就可以運行一個索引重建指令清除這些索引。
    然而,你在第二天再檢查索引碎片的時候會發(fā)生什么情況呢?它可能是大約8%至10%的碎片。因此,如果你每天運行一個索引碎片整理指令而不是每個星期運行一次索引碎片整理指令,每一天要做的工作就很少,這個工作就能夠更快地完成,可能在每天的維護時間窗內完成。
    即使你在時間窗內不能讓這個系統離線,由于碎片整理操作是一種在線操作,這個系統在整理碎片操作的時間將繼續(xù)發(fā)揮作用,只是反應速度比正常情況下稍微慢一點。
    數據庫備份
    備份是在一臺服務器上托管多個數據庫的時候需要解決的另一個關鍵問題。
    每一個數據庫都有自己的備份要求。備份數據庫也許是能夠在SQL服務器運行時執(zhí)行的最繁重的任務??荚嚧筇崾静⒉皇且驗檫@種備份需要占用大量的CPU和內存資源(這個任務占用的資源一般是很低的,除非你在備份的時候對數據庫進行壓縮),而是因為備份一個大型數據庫需要占用大量的硬盤資源。
    當進行全面?zhèn)浞莸臅r候,整個數據庫必須從硬盤讀取。如果你的硬盤系統非常繁忙,這個備份會引起性能嚴重下降。這種備份的解決方案是選擇合適的時機。你還可以尋找能夠在備份的同時允許對數據庫備份進行壓縮的第三方工具。由于這將增加SQL服務器上的CPU的工作量,它通常僅用很少的時間完成備份,因為需要寫入備份設備中的數據很少。
    結論
    只有很少的幾種技術能夠在一臺服務器上運行多個數據庫的時候幫助進行數據庫服務器的維護。當你考慮數據庫整合項目時,希望你能發(fā)現這些工具是很有用的。