1.想要判斷資料庫查詢緩慢的問題,可以使用如下語句,可以列出查詢語句的平均時間,總時間,所用的cpu時間等資訊
2.列出資料庫每個表的資料量,並且需要運維人員對業務足夠了解,知道大概哪些表是查詢量最多的,可以檢視「排在前面的表的磁碟使用情況」:
3.檢視表碎片的情況,可以使用命令
dbcc showcontig
可以看到該錶掃瞄密度只有33.52%(最佳狀態是100%,每個表頁都寫滿資料),遠遠低於最佳計數,也就是說這個表的利用率很低,本來掃瞄一頁 就能出結果,現在可能需要掃瞄三頁,增加了查詢時間;而邏輯碎片和區碎片都很多(一般認為超過30%就需要優化了),也就是說同樣一頁,資料很少而碎片很 多,占用了過多的資料庫資源。
4.根據你對業務的了解,找出查詢最多的表,對比他的資料,查詢時間,和碎片程度可以判斷出該表是否需要整理碎片,重建索引,以提高資料庫效能。
重建索引的語句為:
use[資料庫名]
alter index all on [表名稱] rebuild;
重建後,同樣的一張表nwme_company_index,再次查詢表碎片情況的結果如下:
可以看到密度已經變為96.9%,而邏輯碎片幾乎沒有了。
現在可以到前台實際體驗優化後的效果了。
在做維護專案的時,我們經常會遇到索引維護的問題,通過語句,我們就可以判斷某個表的索引是否需要重建。
執行一下語句:先分析表的索引
分析表的索引建立情況:dbcc showcontig('table')
dbcc showcontig 正在掃瞄 'table'' 表...
表: 'table'' (53575229);索引 id: 1,資料庫 id: 14
已執行 table 級別的掃瞄。
- 掃瞄頁數................................: 228
- 掃瞄區數..............................: 52
- 區切換次數..............................: 225
- 每個區的平均頁數........................: 4.4
- 掃瞄密度 [最佳計數:實際計數].......: 12.83% [29:226]
- 邏輯掃瞄碎片 ..................: 97.37%
- 區掃瞄碎片 ..................: 98.08%
- 每頁的平均可用位元組數........................: 2686.3
- 平均頁密度(滿).....................: 66.81%
當你發現,掃瞄密度行,最佳計數和實際計數的比例已經嚴重失調,邏輯掃瞄碎片佔了非常大的百分比,每頁平均可用位元組數非常大時,就說明
你的索引需要重新整理一下了。
執行重建索引命令:
dbcc dbreindex('table'')
後分析的情況
dbcc showcontig 正在掃瞄 'table'' 表...
表: 'table'' (53575229);索引 id: 1,資料庫 id: 14
已執行 table 級別的掃瞄。
- 掃瞄頁數................................: 154
- 掃瞄區數..............................: 20
- 區切換次數..............................: 19
- 每個區的平均頁數........................: 7.7
- 掃瞄密度 [最佳計數:實際計數].......: 100.00% [20:20]
- 邏輯掃瞄碎片 ..................: 0.00%
- 區掃瞄碎片 ..................: 55.00%
- 每頁的平均可用位元組數........................: 86.8
- 平均頁密度(滿).....................: 98.93%
重建ORACLE資料庫索引
declare str varchar2 400 begin 重建oracle索引 for tmp idx in select tablespace name,owner,table name,index name from all indexes where owner hnacms and te...
重建資料庫表所有索引
重建資料庫表所有索引 2006 06 12 先選擇要修復的資料庫 declare name varchar 100 所有使用者表游標 declare authors cursor cursor for select name from sysobjects where xtype u order b...
重建資料庫表所有索引
重建資料庫表所有索引 2006 06 12 先選擇要修復的資料庫 declare name nvarchar 255 所有使用者表游標 declare authors cursor cursor for select name from sysobjects where xtype u order ...