我知道我們非常需要一個數據庫維護策略。
+1用於確定需要
至於我的背景,我是一個大學生,在這家公司工作的兼職
堅持學習,獲得經驗,但在此期間找一位經驗豐富的顧問。
該表是通過運行4個線程每個
我想這是在工作日相當關鍵任務,和停機時間是個壞消息24名工人居住?如果是這樣的話,不要使用它。
上有ResultID和字段名
一個聚集索引ResultID在PK的第一列,因爲你說明什麼?
如果是這樣,我敢打賭它沒有足夠的選擇性,並且根據查詢的需求,PK字段的順序應該交換(儘管這個複合鍵看起來是一個糟糕的選擇集羣PK)
什麼結果:
SELECT COUNT(*),COUNT(DISTINCT ResultID)FROM MyTable的
如果第一計數,比方說,4個大如第二或更重要的是,由於ResultsID的選擇性較低,因此您最有可能獲得掃描優先搜索,並且一些簡單的更改將會給予巨大的性能改進。
此外,字段名是相當寬(50個字符),所以任何二級索引將有50 + 4個字節添加到每個索引條目。這些字段是否真的是CHAR而不是VARCHAR?
就我個人而言,我會考慮增加葉頁的密度。在90%的情況下,您只會留下一些差距 - 可能每頁只有一個。但是對於一張5億行的大型表格,較高的封裝密度可能意味着樹中的層次更少,因此需要更少的查找。相反,對於給定頁面,幾乎每個插入都需要分頁。這將有利於集羣插入,因此可能不合適(因爲您的插入數據可能未集羣)。像很多事情一樣,你需要做一個測試來確定哪個索引密鑰密度最好。SQL Server具有幫助分析查詢如何被解析,它們是否被緩存,它們引起的表的掃描次數,哪些查詢「運行緩慢」等等的工具。
請諮詢顧問來看看並給你一些建議。這不是一個回答這裏的問題將給你一個安全的解決方案來實現。
對於每天擁有500萬行數據表和插入數據流的表,您真的需要仔細考慮維護策略。對不起,但我對進入這種狀態的公司感到非常沮喪。
該表需要進行碎片整理(如果沒有聚簇索引,選項會變得更少,因此請保留該選項,直到您確定存在更好的候選項爲止)。 「在線」碎片整理方法將對性能產生適度影響,並且可能會突然消失 - 如果它們超出時間/ CPU限制(儘管這很可能需要一些編程),可以安全地中止。如果你有一個「安靜」的插槽,然後用它進行表碎片整理並更新索引的統計信息。不要等到週末才試着去做所有的桌子 - 在每天的安靜時間(大概是在夜間)儘可能多/儘可能多地做。
對錶進行碎片整理可能會導致事務日誌使用量大幅增加,因此請確保任何TLogs都經常備份(我們有10分鐘的TLog備份策略,我們在表碎片整理過程中每分鐘增加一次)磁盤碎片整理過程不會成爲所需的Tlog空間的定義!)
典型的查詢將是非順序插入,沒有更新,沒有刪除,並且選擇的頻率不如插入(寫入很多,讀取很少)。我想我需要閱讀並定期查看哪些查詢正在運行。 – llamaoo7 2009-02-15 19:57:28
這聽起來像是刪除聚集索引的好方案。另外,請查看索引填充因子。確保有足夠的空間來減少索引頁拆分的需要。默認的填充因子80可能對您的需求太高。 – Tomalak 2009-02-15 20:06:08