Sql-Server
SQL Server 2012 上沒有失去的索引請求
我正在嘗試通過創建缺少的索引來優化數據庫,但該
dm_db_missing_index_details
表沒有任何數據。我在不同的伺服器上有相同的數據庫,並且該表中有很多記錄。所以看起來可能存在配置問題,導致失去的索引請求無法保存。
為什麼一台伺服器上缺少索引請求,而另一台伺服器上沒有任何索引請求(對於同一數據庫)?
過去四天我們沒有重新啟動數據庫伺服器。我確信應該存在索引問題,因為同一個數據庫在不同的位置執行,並且那個數據庫有很多缺失的索引警告(我們已經修復了這些警告)。
根據您使用的 SQL Server 版本,重建索引時失去的索引(和其他索引元數據)可能會消失。
有關更多資訊,請參閱Kendra Little 的文章。
檢查是否沒有人啟用跟踪標誌 2392,如下文所述:
修復:如果在 SQL Server 中啟用缺少索引功能,則取消掛起查詢時訪問衝突
此問題的解決方法是啟用跟踪標誌 (TF) 2392,這將禁止收集失去的索引。
它沒有記錄在 SQL Server 2012 中,但這並不意味著它隨後沒有被反向移植,或者沒有功能但沒有記錄。無論如何都值得檢查。
更普遍:
除非您在兩個系統上執行相同的工作負載,否則可能會出現缺少索引建議的情況並且是正常的。
SQL Server 不會搶先查找失去的索引,您必須執行可能使用這些索引的實際查詢。此外,數據、統計資訊、硬體和其他方面的差異可能會導致相同的查詢不會在兩個系統上生成相同的計劃,因此不同的索引是有用的(或沒有用的)。
索引創建應該是腳本和版本控制的(就像你的應用程序中的原始碼一樣)。如果您在多個位置安裝了相同的數據庫,它們應該都執行相同的程式碼庫,其中包括相同的表和索引結構。
也可以看看:
- 不要只是盲目地創建那些“缺失”的索引!通過亞倫伯特蘭
- 您是否在使用 SQL 的缺失索引 DMV?巴特·鄧肯