web-dev-qa-db-ja.com

インデックス最適化のためのOlaHallengrensコード-説明

PROD環境でインデックス最適化のためにOlaHallengrensコードをデプロイしようとしています。

以下のコードの@Databasesの代わりにSER_DATABASESAVAILABILITY_GROUP_DATABASESを使用することの違いは何ですか。

また、私はブログを読んで読んでいました:

インデックス最適化のOlaHallengrensコードは、ページ数が1000を超える場合にのみ最適化することを目的としています。

以下のコマンドを実行すると、統計のみが更新され、インデックスは再構築されません-

これは、エンドユーザーがデータベースエンドからの応答の遅さやパフォーマンスの低下について何も不満を言っていないので、断片化が得意であることを意味しますか?.

EXECUTE dbo.IndexOptimize
 @Databases = '',
 @FragmentationLow = NULL,
 @FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE',
 @FragmentationHigh = 'INDEX_REBUILD_ONLINE',
 @FragmentationLevel1 = 5,
 @FragmentationLevel2 = 30
1
DBOn

user_databasesavailability_group_databasesの違いは、user_databasesを指定するときに、everyを最適化することです。 )ユーザーデータベース(AGグループのデータベースも)availability_group_databasesを指定すると、のみ内のデータベースのインデックスが最適化されます。可用性グループ。

1000ページを超える断片化のあるテーブルがない場合、これによってSQLServerのパフォーマンスが低下することはありません。ブレントオザールからのこの投稿も読むことをお勧めします。 https://www.brentozar.com/archive/2012/08/sql-server-index-fragmentation/

3
Stijn Wynants

可用性グループデータベース

ドキュメントをざっと見てみると、USER_DATABASESAVAILABILITY_GROUP_DATABASESの良い例があります。

データベース

データベースを選択します。キーワードSYSTEM_DATABASES、USER_DATABASES、ALL_DATABASES、およびAVAILABILITY_GROUP_DATABASESがサポートされています。ハイフン文字(-)はデータベースを除外するために使用され、パーセント文字(%)はワイルドカードの選択に使用されます。これらの操作はすべて、コンマ(、)を使用して組み合わせることができます。

Value                                           Description  
----------------------------------------------  --------------------------------------------------------  
SYSTEM_DATABASES                                All system databases (master, msdb, and model)  
USER_DATABASES                                  All user databases`  
ALL_DATABASES                                   All databases`  
AVAILABILITY_GROUP_DATABASES                    All databases in availability groups  
USER_DATABASES, -AVAILABILITY_GROUP_DATABASES   All user databases that are not in availability groups  
Db1                                             The database Db1  
Db1, Db2                                        The databases Db1 and Db2  
USER_DATABASES, -Db1                            All user databases, except Db1  
`%Db%                                           All databases that have “Db” in the name  
%Db%, -Db1                                      All databases that have “Db” in the name, except Db1  
ALL_DATABASES, -%Db%                            All databases that do not have “Db” in the name  

インデックスの断片化

正しく指摘したように、インデックスの最適化は特定のレベルでトリガーされます。

  • テーブルに1000ページを超え、インデックスの断片化が5〜30%の場合、インデックスは再編成されます。
  • テーブルに1000ページを超え、インデックスの断片化が30%を超えると、インデックスが再構築されます。

要件やデータのサイズによっては、一部のインデックスを早期に再編成する必要がある場合があります。

非常に簡単な例

2億レコード(オンラインアーカイブ)のテーブルがあり、毎日10,000レコードが変更され、毎日10,000レコードが作成されます。簡単な計算を行うと、最大0.01%の断片化が発生し、インデックスの再編成や再構築がトリガーされることはありません。 5%の断片化に達するには500日かかります。実稼働環境では、関連するテーブルのサイズとクエリの複雑さによっては、パフォーマンスの問題が発生する可能性があります。

あなたの質問は答えました

はい、上記の制限がありますが、断片化には適しています。

1