Sql-Server

數據庫規劃 - 多個模式 vs 多個數據庫 vs 單個大型數據庫 vs 分區

  • October 13, 2015

我們為房地產公司設計網站。這些網站僅用於顯示資訊,所有網站共享一個通用模板。我們為不同的客戶提供大約 150 個網站。一些第三方數據提供商每小時向我們提供有關網站上每個列表的所有更新。每個客戶的更新發生在不同的時間。每個網站平均有 1000 個列表。並且在每小時更新一次時,80% 的數據都會發生變化或更新。

現在我們在 Sql server 2008 中有一個數據庫,用於所有客戶(最初設計用於滿足 10-20 個網站)。數據庫中的表是所有人共享的。問題是每當更新發生時,它也會減慢與更新無關的其他客戶網站的速度。同時刪除客戶數據會減慢所有網站的速度。

我計劃通過為每個客戶創建一個單獨的模式來改造數據庫,但我不確定這是否是處理我們問題的最佳方法。擁有一個單獨的數據庫會產生許多維護問題(備份、鏡像等)。誰能建議我一個更好的方法來處理這個問題。如果我為每個客戶創建一個單獨的模式並將他們的表與其他表隔離開來,我不確定它如何影響性能。或者有沒有更好的解決方案?

我個人的偏好是多個數據庫,因為它允許您查看哪些數據庫使用最多的 IO 和 RAM,以及各種 DMV - 它允許您輕鬆地將最大的數據庫遷移到其他地方。此外,還有一個安全分離,這總是讓客戶放心。

Brent Ozar 在最近的一篇博文中談到了這個問題——絕對值得一讀,因為他非常出色: http ://www.brentozar.com/archive/2011/06/how-design-multiclient-databases/

儘管我可能會建議為每個客戶使用一個數據庫,但如果您想堅持使用一個數據庫,那麼看起來模式將適合您的要求。

但是,除了每個客戶的模式之外,我建議您還為每個客戶創建一個文件組,然後將每個客戶的所有數據庫對象放入該文件組中。這樣做有幾個優點:

  1. 更好的數據庫可用性。如果屬於某個客戶的數據文件損壞,仍然可以使數據庫的其餘部分聯機。即使在其他事務發生時,損壞的數據文件也可以從備份中恢復。
  2. (可能)更好的性能。隨著系統的增長,您可以將文件組放在不同的儲存設備上並分散您的 I/O(當然您可以對一個文件組和多個文件執行類似的操作,但這將允許您按客戶拆分 IO)。
  3. 易於備份。數據庫備份可以在文件組級別進行,讓您在何時為每個客戶備份表時更加靈活。
  4. 更好的還原粒度。與 #1 類似,從頭開始恢復數據庫時,一旦主文件組線上,您就可以開始單獨恢復文件組,從最重要的客戶開始。由於後續恢復不會對已恢復的文件組產生任何影響,因此您可以將您的數據庫逐個聯機,而不是一舉搞定。這稱為線上分段恢復,是企業版獨有的功能(雖然在標準版中可以做類似的事情,但它需要數據庫離線)。

我相信你可以擁有的最大文件組數是 32,000-ish,所以這個策略應該持續到你真的需要考慮拆分成不同的數據庫。

有關更多資訊,我推薦線上書籍文章“文件和文件組架構”和關於部分數據庫可用性的 SQLCAT 白皮書:http: //sqlcat.com/sqlcat/b/whitepapers/archive/2007/11/21/partial-database-可用性.aspx

引用自:https://serverfault.com/questions/302742