確認索引片段的主要SQL Server命令是DBCC SHOWCONTIG。下面這個範例程式碼是用來確定Pubs資料庫中的Authors表的索引片段的:
USE Pubs GO DBCC SHOWCONTIG ('Authors') GO |
確定Pubs資料庫中的Authors表的聚簇索引的索引片段,可以執行下面的命令:
USE Pubs GO DBCC SHOWCONTIG ('Authors',1) GO |
作為一個引用點,1值顯示聚簇索引。2到255值顯示一個具體的非聚簇索引。
確定是否重建索引的一條經驗法則是看掃描密度是否低於90%。
要根據技巧1來理解我們的資料:如果注意到特定的表總是有較低的掃描密度的,那麼可以考慮將填充因數和pad_index降低5%到10%以減少片段。
隨著資料的增長,會造成資料庫增大和事務已耗用時間的增長,維護視窗每一秒都會有計數。利用我們的備份伺服器或將一個最近的生產Database Backup恢複到一個開發/測試伺服器,然後執行DBCC命令。這樣我們就可以及時地查看資料庫碎 片情況,從而維護視窗就可以只集中在重建的索引上。一旦我們有了這個資料,我們就可以執行技巧4上所列出的命令中的一個來重建碎裂的索引。然後,重新執行 DBCC SHOWCONTIG來驗證索引片段是否已經修正。這將可以驗證我們的指令碼,並且粗數量級估計生產系統所需要的時間。
技巧5:重建碎裂的索引
索引維護是一個用來保證索引最佳配置的關鍵。"Index rebuild options"表概括了用來維護索引的典型方法。
Index rebuild options |
ID |
Description |
Recommendations |
Sample code |
1 |
DROP INDEX CREATE INDEX |
執行:當系統沒有使用者時,當表的索引變化要求刪除舊的索引並用新的索引配置替代時,當表的聚簇索引發生變化時,因為所有非聚簇索引都依賴於聚簇索引,所以它們需要重建。 |
USE PUBS GO DROP INDEX Authors.au_id_ind GO CREATE CLUSTERED INDEX au_id_ind ON authors (au_id) GO |
2 |
DBCC DBREINDEX |
執行:當系統沒有使用者時,當表之間存在參考完整性並且需要維護時,當索引配置修改聚簇索引所需要的填充因數時,它支援一個原子事務,以保證不會丟失任何索引。 |
USE Pubs GO DBCC DBREINDEX (Authors, '', 70) GO |
3 |
DBCC INDEXDEFRAG |
當系統沒有使用者時執行。用以清除一個索引的片段。 |
USE Pubs GO DBCC INDEXDEFRAG (Pubs, Authors, au_id_ind GO |
技巧6:設定資料庫
與索引片段相關的是磁碟級片段,它是由檔案刪除和邏輯磁碟 檔案系統重組所造成的非連續檔案系統,它會降低I/O敏感進程的效能。下面的建議可以最小化磁碟級片段:
- 為 資料庫 準備專用 磁碟
- 以連續方式在 磁碟 上進行 資料庫 寫入
- 給大型的資料預分配相對應的 資料庫 大小(如,為每個月增長1GB的100GB 資料庫 多準備10GB空間)
- 不要自動成長和縮小 資料庫
總結
索引片段對高效能的資料庫是至關重要的。確認有益的索引並不斷維護它們將保證整個應用過程中的高效能。祝你好運!