Sql-Server
清除缺失的索引 DMV
如何清除缺失的索引 DMV,
dm_db_missing_index_group_stats
例如dm_db_missing_index_groups
和dm_db_missing_index_details
?我沒有選項重新啟動伺服器或先將其離線然後重新聯機,因為它是生產環境。
不,沒有用於清除
missing_index
DMV 的旋鈕。您必須重新啟動服務,或者,如果您想排除特定表,您可以使用過濾器針對 DMV 創建一個視圖。您可以使用 、 手動清除的唯一 DMV
DBCC SQLPERF
是sys.dm_os_wait_stats
和sys.dm_os_latch_stats
:DBCC SQLPERF ( [ LOGSPACE ] | [ "sys.dm_os_latch_stats" , CLEAR ] | [ "sys.dm_os_wait_stats" , CLEAR ] ) [WITH NO_INFOMSGS ]
您一次只能清除這些表(或通過重新啟動伺服器)。如果重建索引,請添加索引或刪除從視圖中刪除的表的索引。
因此,通過擴展,如果您在主鍵上創建一個 1 行過濾索引,然後再次刪除該索引,您將刪除該表。DMV 最多保存 500 條記錄,因此您需要創建最多 500 個 1 行索引並刪除它們。
這可能還不錯,但是如果您在使用非常頻繁的系統上執行,那麼您仍然會
schema_mod
在桌面上鎖定。一種用於創建索引,一種用於刪除索引。這可能會導致阻塞。但是,我指的是每秒訪問數百到數千次的表。如果您沒有看到這種訪問率,或者您的所有表都有一個索引重建視窗,那麼您可以在那時進行更改。因此,如果您碰巧有一個
"test"
在"dbo"
架構中命名的表和一個主鍵,"id"
那麼下面將為您清除該表:-create nonclustered index ix_dmv_drop on dbo.test( id ) where id = 1 with( online = on ); go drop index ix_dmv_drop on dbo.test; go
您可以從此模板創建一個簡單的腳本來刪除它們。只需從 DMV 中提取詳細資訊並創建創建和刪除命令。如果您將其連結回類似的東西,
dm_db_index_operational_stats
您可以獲得粗略的訪問率,從而避免阻塞問題。