2008-09-23 72 views
4

這個問題是涉及到另一個問題:
Will having multiple filegroups help speed up my database?在MS SQL Server中管理大量表的最佳方式是什麼?

我們正在開發的軟件是使用MS SQL Server 2005的存儲關係數據分析工具。初始分析可能很慢(因爲我們正在處理數百萬或數十億行數據),但是對於快速回憶以前的分析有性能要求,所以我們「保存」每個分析的結果。

我們目前的做法是保存分析結果在一系列的「運行特定的」表和分析是複雜的,以至於我們可能最終每分析多達100桌。通常這些表每次分析使用幾百MB(與我們的數百GB或有時多TB的源數據相比,這些表很小)。但總的來說,磁盤空間對我們來說不是問題。每組表格都專門用於一個分析,在許多情況下,這就爲我們回溯源數據提供了巨大的性能改進。

一旦我們積累了足夠的已保存分析結果 - 在我們添加更強大的歸檔/清理功能之前,我們的測試數據庫爬到了幾個表中,該方法開始崩潰。但即使在生產中,擁有超過10萬張桌子也不算什麼。微軟在系統對象的規模(〜20億)方面提出了相當大的理論限制,但是一旦我們的數據庫增長超過10萬,那麼像CREATE TABLE和DROP TABLE這樣的簡單查詢就會顯着減慢。

我們有一些空間來辯論我們的方法,但我認爲這可能很難做到沒有更多的上下文,所以我想更普遍地提出這個問題:如果我們被迫創建這麼多的表,什麼是最好的方法來管理它們?多個文件組?多個模式/所有者?多個數據庫?

另注:我不是激動不已的「簡單的問題拋硬件」(即添加RAM,CPU電源,硬盤速度)的想法。但是我們也不會排除它,特別是如果(例如)有人可以明確地告訴我們添加RAM或使用多個文件組將對管理大型系統目錄有什麼影響。

+0

WOW。對於許多表,Management Studio在加載列表時會做什麼?這一定是痛苦的。 – 2008-09-23 23:38:19

回答

0

我們最終將我們的數據庫分成多個數據庫。所以主數據庫包含一個「數據庫」表,它引用一個或多個「運行」數據庫,每個數據庫包含不同的分析結果集。然後主「運行」表包含一個數據庫ID,檢索保存結果的代碼在所有查詢中都包含相關的數據庫前綴。

該方法允許每個數據庫的系統目錄更加合理,它提供了核心/永久表與動態/運行表之間更好的分離,並且還使備份和歸檔更易於管理。它還允許我們將數據分割到多個物理磁盤上,儘管使用多個文件組也可以實現這一點。總體而言,考慮到我們目前的要求,我們現在對我們運作良好,並且基於預期的增長,我們認爲它也將適合我們。

我們也注意到SQL 2008傾向於比SQL 2000和SQL 2005更好地處理大型系統目錄。 (當我發佈這個問題時,我們還沒有升級到2008年。)

0

這似乎是你正在使用的一個非常有趣的問題/應用程序。我很想在這樣的事情上工作。 :)

你有一個非常大的問題表面積,這使得很難開始幫助。有幾個解決方案參數在您的文章中不明顯。例如,您計劃保留運行分析表多久?還有很多其他問題需要提出。

您將需要認真的數據倉庫和數據/表分區的組合。根據您想要保存和歸檔的數據量,您可能需要開始去歸一化和展平表格。

這將是相當不錯的情況下直接聯繫Microsoft可以互惠互利。 Microsoft可以很好地向其他客戶展示,並且您可以直接從供應商那裏獲得幫助。

1

表是所有不同的結構?如果它們具有相同的結構,則可能會使用單個分區表。

如果它們是不同的結構,但就在同一組維列的子集,你仍然可以將它們存儲在分區在同一個表中不適用的列空。

如果這是分析(衍生定價計算也許?)可以將計算運行的結果轉儲爲平面文件,並通過從平面文件加載來重新使用計算。

2

在沒有先看到整個系統的情況下,我的第一個建議是將組合表中的歷史運行以RunID作爲關鍵字的一部分進行保存 - 維度模型也可能與此處相關。可以對此表進行分區以進行改進,這也可以讓您將表分散到其他文件組中。

另一種可能是把每個運行在自己的數據庫,然後分離,最後只有安裝並根據需要(在只讀形式)

CREATE TABLE和DROP TABLE很可能表現不佳,因爲主或模型數據庫沒有針對這種行爲進行優化。

我還建議與Microsoft談談您對數據庫設計的選擇。

相關問題