Sql-Server

使用數據庫引擎優化顧問 - 我如何為建議生成腳本?

  • May 11, 2016

我已經執行了一個多小時的伺服器端配置文件跟踪,以生成一個 .trc 文件,其中包含我的一個數據庫中的所有活動。

然後,我將此 .trc 跟踪文件作為參數傳遞給數據庫引擎優化顧問。

在此處輸入圖像描述

執行 DTA 後,我得到以下建議:

在此處輸入圖像描述 我如何編寫建議?

我正在使用SQL Server 2005,除了單獨編寫腳本之外,我似乎沒有找到任何其他方法,這過於耗時。

檢查查看調整輸出

  1. 如果要將在此建議中創建或刪除所有數據庫對象的所有 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 建議中的任何內容都可以手動編碼。

引用自:https://dba.stackexchange.com/questions/138114