Sql-Server
使用數據庫引擎優化顧問 - 我如何為建議生成腳本?
我已經執行了一個多小時的伺服器端配置文件跟踪,以生成一個 .trc 文件,其中包含我的一個數據庫中的所有活動。
然後,我將此 .trc 跟踪文件作為參數傳遞給數據庫引擎優化顧問。
執行 DTA 後,我得到以下建議:
我正在使用SQL Server 2005,除了單獨編寫腳本之外,我似乎沒有找到任何其他方法,這過於耗時。
檢查查看調整輸出:
- 如果要將在此建議中創建或刪除所有數據庫對象的所有 Transact-SQL 腳本保存到一個腳本文件中,請點擊**“操作”菜單上的“保存建議”**。
與往常一樣,在盲目地將建議應用到您的 PROD 環境之前,請先查看和測試這些建議。
我強烈建議從BrentOzar.com 的人們那裡查看更理智的工具,例如sp_BlitzIndex
請注意,生成“缺失索引”列表的電腦不應被整個吞下。您仍然需要決定創建哪些索引,哪些推薦的索引與現有索引接近重複,以及您應該如何處理這些問題。
它仍然需要您做出決定,因為生成的建議在使用之前需要進行一些認真的審查。
Bart Duncan 製作了一個腳本,該腳本將使用索引的動態管理視圖 (DMV) 列出“缺失的索引”。這與數據庫引擎優化顧問 (DTA) 並不完全相同,但它很有價值。
我建議您比較 DTA 和 DMV 關於“缺失索引”的建議以進行健全性檢查。
如果您創建推薦的索引,Bart Duncan 的查詢會生成要使用的程式碼。(為了便於閱讀,稍微重新格式化。)
SELECT migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) AS improvement_measure, 'CREATE INDEX [missing_index_' + CONVERT (varchar, mig.index_group_handle) + '_' + CONVERT (varchar, mid.index_handle) + '_' + LEFT (PARSENAME(mid.statement, 1), 32) + ']' + ' ON ' + mid.statement + ' (' + ISNULL (mid.equality_columns,'') + CASE WHEN mid.equality_columns IS NOT NULL AND mid.inequality_columns IS NOT NULL THEN ',' ELSE '' END + ISNULL (mid.inequality_columns, '') + ')' + ISNULL (' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement, migs.*, mid.database_id, mid.[object_id] FROM sys.dm_db_missing_index_groups mig INNER JOIN sys.dm_db_missing_index_group_stats migs ON migs.group_handle = mig.index_group_handle INNER JOIN sys.dm_db_missing_index_details mid ON mig.index_handle = mid.index_handle WHERE migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) > 10 ORDER BY migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) DESC
許多 DTA 建議可能包含在缺失索引查詢中。只要這對你有用,那麼你就有了你需要的腳本。DTA 中未包含在 DMV 建議中的任何內容都可以手動編碼。