拆分伺服器
我們有一個執行 SQL Server 2012 的 Windows 2012 VM。大約有 20 個數據庫,總大小為 5.83 TB。盒子上有 64GB 的 RAM 和 16 個邏輯處理器。
伺服器非常忙,很多使用者在 7 到 6 視窗期間通過查詢訪問數據庫,並且在 6 點之後的晚上有很多工作在訪問它。大多數工作執行儲存在 MSDB 中的集成伺服器包。最重要的是,每晚在 1 dB 上進行快照複製,並在其他 2 個數據庫上進行備份/恢復。
現在,需要在伺服器上進行負載平衡,我們一直在討論以下幾點:
- 分成兩台伺服器,A 和 B,A 只執行作業,B 用於使用者,每晚從 A 取回數據庫並將它們放在 B 上。
- 具有可讀輔助的 Always On 可用性組。
- 將集成服務和數據庫引擎分離到 2 個伺服器中。我們之前已經將 SSRS 和 SSAS 從數據庫引擎中分離出來。
- 有兩台伺服器,一台伺服器上具有重負載 dB,另一台伺服器上具有其他 dB。
你們會採用哪種方法?
方法 1 和 2 - 由於使用者需要讀/寫訪問權限,因此自動脫離了圖片。他們不僅從數據庫中讀取數據,而且還在自己的模式中寫入數據。
方法 3——獨立的 SSIS 和數據庫引擎——我反對這一點,因為我注意到 IS 在其最重負載時不會佔用超過 2GB 的記憶體,不要忘記即使我們將 IS 和引擎分開,IS 仍將是訪問數據庫並將鎖定使用者嘗試讀取的表。我同意將它放在不同的伺服器上將允許 IS 擁有自己的處理器和記憶體,但是我們看到的任何一點性能都會被通過網路傳輸數據所抵消。
方法 4 似乎最可行,在其他伺服器上佔用 1/4 的繁忙數據庫並在同一台伺服器上保留 3/4 的不太繁忙的數據庫。
我為數據庫引擎分配了 50GB 空間,為作業系統和其他程序留出了 14GB 空間。
您是否考慮過將 VM 遷移到更大的主機並為其提供更多核心和 RAM?
如何將 VM 移動到新主機並分配額外資源取決於您的虛擬機管理程序,並且是管理您的 VM 的任何人都可以做的事情。對於 Hyper-V,請參閱:Windows 10 和 Windows Server 2016 PowerShell - Move-VM
選擇問題中提到的四個選項之一,選擇方法 4 - 保持簡單。
如果您對可讀輔助節點執行 AlwaysOn,則不必每晚備份和恢復,SQL Server 將在執行所有事務時將它們發送到輔助節點。
您還需要確保您的應用程序使用的數據庫驅動程序支持讀取意圖。我這樣說是因為我曾在一個使用 Java 的組織中工作,而我們使用的特定 Java 驅動程序不支持此功能。還有一些開發成本,因為您的開發人員必須創建一個與寫入和更改數據的連接分開的只讀連接。我從來沒有在生產中使用過它,但大約一年前我用 MS Access 做了一些測試,這就是我必須設置它的方式。
您始終可以使用 SQL 複製。我使用過事務和快照複製,並且在某些情況下更喜歡它而不是可讀的 AlwaysOn 輔助節點。原因是我可以自定義複製數據庫上的索引,與該數據庫的可寫副本分開。如果您有使用者直接針對 SQL 伺服器執行查詢,這是一個很好的解決方案。
我已經設置了除了執行作業之外什麼都不做的 SQL 伺服器,但是在您從中讀取和更改數據的伺服器上仍然存在成本。