2011-05-21 53 views

回答

0

當您定義分區模式時,絕對可能指出該模式中每個分區所在的文件組。

當您滾動數據並需要將整個分區從一個磁盤移動到另一個磁盤時,會出現問題 - 該操作必須謹慎執行,並且根據數據量可能需要一些時間。

由於只有2個物理磁盤被提及,是什麼推動了這種拆分的需要?

+0

拆分是由於表太大而且查詢花費的時間越來越多,因爲它開始更頻繁地掃描而不是尋找。由於每個索引候選本身大約20Gb並且將會增長,因此添加索引會炸掉數據庫。 80%的查詢正在經歷過去2-3天的數據。過去一個月爲15%,其餘的是通過所有數據......我的想法是通過沒有索引而是通過分區數據來加速這80%,因此數據的最後一週將以相對較快的速度返回所有查詢。 – 2011-05-21 16:36:35

+0

對不起安德魯我不得不編輯我的問題。我如何去了解滾動過程。需要簡單的操作列表(如何將過期的日期移至歷史分區,如何將新的日期添加到最新的日期分區中,這裏可能存在什麼問題)。只是簡化的指令就行。我然後google的細節。謝謝 – 2011-05-21 17:59:19

+0

如果您正在尋找一種更簡單的替代方法,那麼分區並不會超過索引性能 - 請考慮使用已過濾的索引。過濾它只支持最近30天。這將對數據的該部分提供更快的響應,而不需要對整個表進行索引。分區實際上是滾動新數據/推出舊數據 - 這不是查詢性能萬能藥。 – Andrew 2011-05-22 00:18:31

1

由於在磁盤之間移動數據,從分區移除數據,更新索引以及驗證所有數據已被移動所涉及的人工中涉及的額外IO,將無法解決您的性能問題。

您的數據是否聚集在日期列上?你聲明80%的查詢是最近兩天的,所以如果你的數據是在日期上聚集的,那麼IO本質上是一個順序讀取。

過濾或分區的索引只會指向包含數據的簇或堆行,如果數據不是日期序列,將導致隨機IO。如果您無法在日期上對錶進行聚類,那麼在包含該表所有列的日期中排序和過濾的索引將會提升性能。

如果您不能更改表結構及表中沒有聚集在約會,我建議:

  • 移動所有表中的數據一組 磁盤。

    使用另一組磁盤作爲指數 只有

  • 創建跨越三天 日期範圍過濾索引。包括 表中的所有列
  • 創建跨越未來三天的日期範圍 的已過濾索引。 包括表格的所有列
  • 創建一個過濾後的索引,該索引跨越接下來三天的日期範圍 。 包括你創建的第一個 指數下降的是指數,並創建兩個 過濾索引跨越的日期 範圍三天後
  • 六天表中的所有列。包括表中所有 列
  • 重複刪除並創建索引。
  • 自動化與SQL代理

    這個過程監控索引創建與 警報

只有這樣,才能證明在改善的任何變化的結果是否有之前和之後的基準。

+0

謝謝。你的建議很棒。我需要考慮它,因爲有些步驟不可用(SQL代理和警報以及索引使用的統計信息 - DBA功能應該由另一個團隊承擔,但它們不是非常有用)。所有表都具有集羣ID,並且它們是在一天內添加的,因此理論上所有日期在磁盤上都是連續的,就好像它是日期上的聚集索引一樣。但我不確定SQL是否會隨時挑選它。 – 2011-05-22 10:42:57