私は運が悪かったので掘り起こしてきました。
SQL Server 2008:テーブル全体を再構築せずに、特定のクラスター化インデックス/テーブルのFILL FACTORを調整することは可能ですか?
たとえば、レコードが4億個ある場合、Fill Factorを調整し、SQL Serverで、その制限を超えていないすべてのページ(および新しい分割)で新しいFILLFACTORを使用し、次に、インデックスのメンテナンス中に制限を超えましたか?
次のインデックスのメンテナンス中にインデックスを構築するためのFILL FACTORを事前に定義することは可能ですか?
これはFILLFACTOR
の動作方法ではありません。 CREATE
またはREBUILD
操作中に書き込まれたページにのみ適用されます。ページは、作成または分割されたときに常に可能な限り埋められます。
CREATE INDEX のMSDNドキュメントに従って:
FILLFACTOR設定は、インデックスが作成または再構築されるときにのみ適用されます。
したがって、FILLFACTOR
の最中にREBUILD
を変更した場合でも(クラスター化インデックスが既に存在するため)、既存のページだけがその値を使用します。新しいページが作成され、既存のページが分割されると、FILLFACTOR
が_100
_に設定されているかのように埋められます。
または、別の言い方をすると、_100
_以下のFILLFACTOR
を使用するために新しいページと分割ページを取得することはないため、ここでは再構築操作は問題ではありません。
また、いいえ、FILLFACTOR
への変更を「事前定義」して、次にREBUILD
が存在するときに有効になるようにすることはできません。 WITH
操作のREBUILD
句でのみ指定できます。ただし、再構築中に新しい値を適用すると、その新しい値は_sys.indexes
_に保存され、WITH (FILLFACTOR = x)
を指定して誰かが再度変更しない限り、以降の再構築で再び使用されます。
または、もう一度別の言い方をすると:
FILLFACTOR
の値は、実際にREBUILD
を実行するときにのみ変更できます(DROP
およびre -CREATE
を「変更」にします)。FILLFACTOR
値は、_CREATE INDEX
_および_ALTER INDEX ... REBUILD
_(および技術的には_DBCC DBREINDEX
_によって使用されますonly) 、しかしそれは以前から使用されるべきではない SQL Server 2005で非推奨 ); FILLFACTOR
はnotとして使用されます。行が挿入または更新されると、最初にこのオプションを使用する目的に反するためです。
FILLFACTOR
は、既存のデータページにスペースを予約し、スペースを使用できるようにします(したがって、ページ分割が発生する可能性を減らします); FILLFACTOR
の値を超えてページがいっぱいになることを許可しないと、そのスペースが無意味に永久に予約され、データページのサイズが効果的に減少し、ページ分割が発生する可能性が実際には増加しますが、減少しません。
ページ分割操作では、常に約50%が新しいページに移動します。
いいえ、できません。 FILLFACTOR
は、REBUILD
またはCREATE
/DROP
でのみ使用できるオプションです。参照 - ALTER INDEX (Transact-SQL
) 。
<rebuild_index_option > ::= { PAD_INDEX = { ON | OFF } | FILLFACTOR = fillfactor | SORT_IN_TEMPDB = { ON | OFF } | IGNORE_DUP_KEY = { ON | OFF } | STATISTICS_NORECOMPUTE = { ON | OFF } | ONLINE = { ON | OFF } | ALLOW_ROW_LOCKS = { ON | OFF } | ALLOW_PAGE_LOCKS = { ON | OFF } | MAXDOP = max_degree_of_parallelism | DATA_COMPRESSION = { NONE | ROW | PAGE } [ ON PARTITIONS ( { <partition_number_expression> | <range> } [ , ...n ] ) ] } <range> ::= <partition_number_expression> TO <partition_number_expression> }
次のインデックスのメンテナンス中にインデックスを構築するためのFILL FACTORを事前に定義することは可能ですか?
これはMS SQL Server 2017で可能になります。SQLServer 2017には、インデックスの再構築を開始および停止する機能が搭載されているはずです。これにより、新しく指定されたフィルファクターで再構築コマンドを実行する機能も作成されますが、再構築し、次にスケジュールされたインデックスメンテナンスで新しいFILL FACTORを使用します。