web-dev-qa-db-ja.com

Microsoft Dynamics CRMアプリケーションから未使用のインデックスを削除する

したがって、Pinalからの次のクエリを使用して、CRMアプリケーションからの未使用のインデックスが大量にあることを発見しました。

SELECT 
o.name AS ObjectName
, i.name AS IndexName
, i.index_id AS IndexID
, dm_ius.user_seeks AS UserSeek
, dm_ius.user_scans AS UserScans
, dm_ius.user_lookups AS UserLookups
, dm_ius.user_updates AS UserUpdates
, p.TableRows
, 'DROP INDEX ' + QUOTENAME(i.name)
+ ' ON ' + QUOTENAME(s.name) + '.' + QUOTENAME(OBJECT_NAME(dm_ius.OBJECT_ID)) AS 'drop statement'
FROM sys.dm_db_index_usage_stats dm_ius
INNER JOIN sys.indexes i ON i.index_id = dm_ius.index_id AND dm_ius.OBJECT_ID = i.OBJECT_ID
INNER JOIN sys.objects o ON dm_ius.OBJECT_ID = o.OBJECT_ID
INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
INNER JOIN (SELECT SUM(p.rows) TableRows, p.index_id, p.OBJECT_ID
FROM sys.partitions p GROUP BY p.index_id, p.OBJECT_ID) p
ON p.index_id = dm_ius.index_id AND dm_ius.OBJECT_ID = p.OBJECT_ID
WHERE OBJECTPROPERTY(dm_ius.OBJECT_ID,'IsUserTable') = 1
AND dm_ius.database_id = DB_ID()
AND i.type_desc = 'nonclustered'
AND i.is_primary_key = 0
AND i.is_unique_constraint = 0
ORDER BY (dm_ius.user_seeks + dm_ius.user_scans + dm_ius.user_lookups) ASC
GO

CRMアプリケーションと、それが独自のインデックスを作成する方法などについて読んでいました。

これがMicrosoft CRMについて質問するのに適切な場所かどうかはわかりませんが、シーク、ルックアップ、スキャンを0にして、大量の更新や行を含むインデックスを削除しても安全ですか?

ソースコード内でそのインデックスをハードコーディングした問題を見つけることができますが、これはMicrosoftが使用する良い慣習ですか?

:この質問をする場所でない場合は、この投稿を閉じることができます。

4
Racer SQL

これがMicrosoft CRMについて質問するのに適切な場所かどうかはわかりませんが、大量の更新と行を使用してシーク、ルックアップ、スキャンを0にしてこれらのインデックスを削除しても安全ですか?

それはあなただけが知っている複数の要因に依存します。 (SQL ServerとMicrosoft Dynamics CRMの両方に関連)


SQLサーバー

  • サーバーが最後に再起動されたのはいつですか?

このインデックスの使用状況データには、インスタンスを再起動するたびにリセットされるため、続行するには十分な履歴があることを確認してください。

また、sql server 2012を使用しているため、バージョンがSP2+CU12またはSP3+CU3以下の場合、インデックスの再構築後にデータがリセットされている可能性があります。 (うまくいけば、そうではありません)

これについての詳細 Kendra Littleによるブログ投稿

データがリセットされたか、再起動が最近の場合は、情報をテーブルに記録し、代わりにこれらの結果を報告することを検討してください。

関係なくこれを行うことを選択できます。

  • これらのインデックスを必要とする、めったに使用されないクエリはありますか?

これは追跡が難しく、また可能性も低いですが、それでも発生する可能性があります。

インデックスの削除に関する一般的な懸念事項については、 this および this またはより多くの(オンライン)ソースを参照してください。


Microsoft Dynamics CRM

  • すぐに使えるものですか、それともユーザーが作成したインデックスですか?

この投稿 によると、削除できるインデックスと削除できないインデックスがあります。

...挿入および更新のパフォーマンスに影響を与える可能性があるインデックスを作成しすぎないように注意してください。インデックス作成のニーズとビジネス要件のバランスをとります。書き込みが多く、読み取りがない(またはごくわずか)インデックスは効率的ではなく、システムの負荷と見なされます(冗長インデックス)。したがって、欠落しているインデックスを処理するときは、ある程度の時間(運用サイクルによっては1か月程度)を与え、冗長なインデックスクエリに対してオフセットすることをお勧めします。 ただし、OOBインデックスの削除または編集はサポートされていません。

これは単に、MS Dynamics CRMに含まれているインデックスをそのままでは削除できないことを意味します。

ユーザーが作成したインデックスは、実際にはユーザーが作成したインデックスです。

いつものように、これらのユーザー作成インデックスに加えた変更を文書化し、影響を監視します。

3
Randi Vertongen