サーバー側のプロファイルトレース を1時間以上実行して、データベースの1つにすべてのアクティビティを含む.trcファイルを生成しました。
次に、この.trcトレースファイルをパラメーターとしてデータベースエンジンチューニングアドバイザーに渡しました。
DTAを実行した後、推奨事項を取得します。
私は SQL Server 2005 を使用していますが、個別にスクリプトを作成する以外に方法がなく、時間がかかりすぎます。
View Tuning Output を確認します。
- この推奨事項のすべてのデータベースオブジェクトを作成または削除するすべてのTransact-SQLスクリプトを1つのスクリプトファイルに保存する場合は、[アクション]メニューの[Save Recommendations]をクリックします。
いつものようにレビューとテストブラインドで適用する の前の推奨事項をPROD環境に推奨します。
sp_BlitzIndexBrentOzar.com の人々からのようなより健全なツールを見ることを強くお勧めします。
「ミッシングインデックス」のリストを生成するコンピュータを丸ごと飲み込むべきではないことに注意してください。作成するインデックス、既存のインデックスの複製に近い推奨インデックス、およびこれらの問題の処理方法を決定する必要があります。
生成された推奨事項は、使用する前に真剣な検討が必要なので、決定を下す必要があります。
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推奨事項の多くは、欠落しているインデックスクエリに含まれています。それがうまくいくと、必要なスクリプトが手に入ります。 DMV勧告に含まれていないDTAからのすべては、手動でコーディングできます。