2011-03-26 114 views
3

您好!需要建議:適用於大型數據庫的SQL Server數據庫架構

我的客戶端目前有一個SQL Server數據庫,每天執行3-4百萬個插入,每天更新更多,甚至更多。當前的數據庫是奇怪的佈局恕我直言:進來的數據去「當前」表,然後每晚記錄移動到相應的月度表(即MarchData,AprilData,MayData等),這是當前表的精確副本意思)。讀取是從UNION所有月度表和當前表,插入和更新僅對當前表完成的。有人向我解釋說,將數據分成13個表是因爲所有這些表使用單獨的數據文件,而這些數據文件被寫入13個物理硬盤驅動器。所以每張桌子都有自己的硬盤,據說可以加快觀看效果。我注意到的是,夜間記錄移動到每月表(每隔2分鐘進行一次,每晚8小時)與完全備份一致,數據庫開始爬行,網站超時等。

我是想知道這種方法真的是最好的方法嗎?或者我們可以考慮一種不同的方法?請注意,該數據庫大約爲300-400 GB,並且每天增長1.5-2 GB。我們經常將超過12個月的記錄移到單獨的數據庫(歸檔)中。

任何有識之士高度讚賞。

+0

它將取決於您的特定RDBMS,您的存儲等因素。 – 2011-03-26 03:18:54

+0

啊 - 大型數據庫在哪裏?對我來說聲音很小。認真。您的客戶每日預算是我目前的諮詢工作在15分鐘內完成的。 – TomTom 2011-03-26 05:51:52

回答

0

有人向我解釋,數據爲13代表的分離的事實, 所有的表都使用單獨的數據文件和文件寫入到13個物理硬盤驅動器 這些數據的動機。所以每個表都有自己的硬盤,

這是一個聲明:IDIOTS在工作。

  • 表格不是存儲在光盤上,而是存儲在可以跨越多個數據文件的文件空間中。注意這個......所以你可以有一個文件空間在13個碟片上有12個數據文件,並且一個表格將在所有13個表格上分佈。不需要玩愚蠢的愚蠢遊戲來分配負載,只需閱讀文檔就可以了。

  • 即使那樣,我嚴重懷疑13光盤快。真。我私人運行一個較小的數據庫(僅800GB),其中有6張光盤供數據使用,而我目前的工作分配是三位數字的光盤(即100+)。請不要將13張光盤命名爲大型數據庫。

  • 無論如何,應該需要分佈數據,而不是UNION,但分區表(atgain標準的sql服務器,儘管企業版功能)是要走的路。

請記住,數據庫是大約300-400 GB,並通過每天1.5-2 GB增長。

得到一個體面的服務器。

我想知道這種方法真的是最好的方法嗎?

  • 哦,硬件。爲數據庫2至4個機架單位高的SAS數據庫,24至72個光盤插槽提供一個SuperMicro盒。是的,一臺電腦。

  • 報廢每月blabla表廢話,有人想出誰顯然不適用於數據庫。所有在一張桌子。使用文件空間和多個數據文件來處理所有表格到各種光盤的負載分配。除非...

  • ...你實際上意識到,像這樣運行的光盤是嚴重的忽視。 RAID 5或RAID 6或RAID 10是有序的,否則當光盤發生故障時,您的服務器可能會發生故障,這將發生,並且重新安裝600GB數據庫需要時間。我爲我的數據光盤運行RAID 10,但後來私下擁有大約10億行的表格(並且我們每天都會添加這樣的表格)。考慮到數據庫的小尺寸,一對SSD也會有所幫助......他們的IOPS預算意味着您可以訪問2-3張光盤並獲得更多的速度。如果這是不可能的,我敢打賭,這些光盤是慢速的3.5英寸光盤,7200RPM ......企業級光盤的升級將會有所幫助,我個人使用300GB Velociraptors用於數據庫,但是有15k SAS光盤可以使用; )

Anyho,這聽起來實在太差成立。如此糟糕,我要麼很高興我的學員想出了一些聰明的(因爲它竟被肯定會在學員的頭),或我的開發人員當我發現這一點時(根據總體無能,隨時在法庭上挑戰)

重組它。也要小心處理任何批處理 - 那些需要時間交錯,以便它們不重疊wioth備份。有隻有簡單的低速盤才能提供這麼多的IO。

+0

感謝您提供詳盡的答案。我稱DB爲大事業,首先它是我與之合作過的最大的事業,其次,但最重要的是,我們與微軟進行了一次支持會議,讓他們看到我們遇到的一些奇怪的錯誤,他們對看到「數據庫這個大」......我認爲MS會更好地知道 – Dimitri 2011-03-26 17:41:10

+0

微軟的支持水平是什麼?當我在幾個月的sql server支持第三層時,我看到了數百個數據庫的數據庫。我們從第一級支持中得到的情況通常發生在用戶硬盤上。如果您沒有企業呼叫權限或未獲得轉發,那麼可憐的靈魂永遠不會處理真正的數據庫大小。 – TomTom 2011-03-27 00:29:07

+0

嘿湯姆我想知道你是否可以諮詢?不是免費的,這是肯定的 – Dimitri 2011-03-28 19:34:59

2

如果您使用的是MS SQL Server,請考慮Partitioned Tables and Indexes

簡而言之:您可以按某個值對行進行分組,即按年份和月份分組。每個組都可以作爲具有自己索引的獨立表訪問。因此,您可以在不訪問所有行的情況下列出,總結和編輯2011年2月的銷售情況。分區表使數據庫變得複雜,但如果表格太長,可能會導致性能顯着提高。它還支持「文件組」以將值存儲在不同的磁盤中。

這個MS製作的解決方案與您的解決方案非常相似,除了一件重要的事情:它不會在一晚上移動記錄。

+0

我希望儘可能多地消除批量作業,因爲我真的覺得數據庫性能明顯受到他們當前計劃和執行的方式的影響 – Dimitri 2011-03-26 17:43:37