我將按日期劃分我的數據。如何在一個磁盤上存儲最新數據的分區和另一個磁盤上的歷史數據?
我可以每天從歷史數據中分離出最新數據嗎?
I.e.我想要打開日期窗口 - 說一個物理磁盤上最近30天的數據,以及另一個物理磁盤上的其餘數據(比這更早)。
鑑於日期數據在早上出現一次,我該如何滾動它?
我將按日期劃分我的數據。如何在一個磁盤上存儲最新數據的分區和另一個磁盤上的歷史數據?
我可以每天從歷史數據中分離出最新數據嗎?
I.e.我想要打開日期窗口 - 說一個物理磁盤上最近30天的數據,以及另一個物理磁盤上的其餘數據(比這更早)。
鑑於日期數據在早上出現一次,我該如何滾動它?
當您定義分區模式時,絕對可能指出該模式中每個分區所在的文件組。
當您滾動數據並需要將整個分區從一個磁盤移動到另一個磁盤時,會出現問題 - 該操作必須謹慎執行,並且根據數據量可能需要一些時間。
由於只有2個物理磁盤被提及,是什麼推動了這種拆分的需要?
由於在磁盤之間移動數據,從分區移除數據,更新索引以及驗證所有數據已被移動所涉及的人工中涉及的額外IO,將無法解決您的性能問題。
您的數據是否聚集在日期列上?你聲明80%的查詢是最近兩天的,所以如果你的數據是在日期上聚集的,那麼IO本質上是一個順序讀取。
過濾或分區的索引只會指向包含數據的簇或堆行,如果數據不是日期序列,將導致隨機IO。如果您無法在日期上對錶進行聚類,那麼在包含該表所有列的日期中排序和過濾的索引將會提升性能。
如果您不能更改表結構及表中沒有聚集在約會,我建議:
移動所有表中的數據一組 磁盤。
使用另一組磁盤作爲指數 只有
自動化與SQL代理
這個過程監控索引創建與 警報
只有這樣,才能證明在改善的任何變化的結果是否有之前和之後的基準。
謝謝。你的建議很棒。我需要考慮它,因爲有些步驟不可用(SQL代理和警報以及索引使用的統計信息 - DBA功能應該由另一個團隊承擔,但它們不是非常有用)。所有表都具有集羣ID,並且它們是在一天內添加的,因此理論上所有日期在磁盤上都是連續的,就好像它是日期上的聚集索引一樣。但我不確定SQL是否會隨時挑選它。 – 2011-05-22 10:42:57
拆分是由於表太大而且查詢花費的時間越來越多,因爲它開始更頻繁地掃描而不是尋找。由於每個索引候選本身大約20Gb並且將會增長,因此添加索引會炸掉數據庫。 80%的查詢正在經歷過去2-3天的數據。過去一個月爲15%,其餘的是通過所有數據......我的想法是通過沒有索引而是通過分區數據來加速這80%,因此數據的最後一週將以相對較快的速度返回所有查詢。 – 2011-05-21 16:36:35
對不起安德魯我不得不編輯我的問題。我如何去了解滾動過程。需要簡單的操作列表(如何將過期的日期移至歷史分區,如何將新的日期添加到最新的日期分區中,這裏可能存在什麼問題)。只是簡化的指令就行。我然後google的細節。謝謝 – 2011-05-21 17:59:19
如果您正在尋找一種更簡單的替代方法,那麼分區並不會超過索引性能 - 請考慮使用已過濾的索引。過濾它只支持最近30天。這將對數據的該部分提供更快的響應,而不需要對整個表進行索引。分區實際上是滾動新數據/推出舊數據 - 這不是查詢性能萬能藥。 – Andrew 2011-05-22 00:18:31