このページは機械翻訳したものです。
インデックスページの MERGE_THRESHOLD
値を構成できます。 行が削除されたとき、または UPDATE
操作によって行が短縮されたときに、インデックスページの 「page-full」 割合が MERGE_THRESHOLD
値を下回った場合、InnoDB
はインデックスページを隣接するインデックスページとマージしようとします。 デフォルトの MERGE_THRESHOLD
値は 50 で、これは以前にハードコードされた値です。 MERGE_THRESHOLD
の最小値は 1 で、最大値は 50 です。
インデックスページの 「page-full」 割合がデフォルトの MERGE_THRESHOLD
設定である 50% を下回ると、InnoDB
はインデックスページを隣接するページとマージしようとします。 両方のページが 50% に近い場合、ページがマージされた直後にページ分割が発生する可能性があります。 このマージ分割動作が頻繁に発生する場合は、パフォーマンスに悪影響を与える可能性があります。 頻繁なマージスプリットを回避するには、InnoDB
が 「page-full」 の低い割合でページマージを試行するように、MERGE_THRESHOLD
値を小さくします。 ページフルの割合が低いページをマージすると、インデックスページの空き領域が増え、マージ分割の動作を減らすことができます。
インデックスページ用の MERGE_THRESHOLD
は、テーブルまたは個々のインデックスに対して定義できます。 個々のインデックスに定義された MERGE_THRESHOLD
値は、テーブルに定義された MERGE_THRESHOLD
値よりも優先されます。 未定義の場合、MERGE_THRESHOLD
値はデフォルトで 50 に設定されます。
テーブルに対する MERGE_THRESHOLD の設定
CREATE TABLE
ステートメントの table_option
COMMENT
句を使用して、テーブルの MERGE_THRESHOLD
値を設定できます。 例:
Press CTRL+C to copyCREATE TABLE t1 ( id INT, KEY id_index (id) ) COMMENT='MERGE_THRESHOLD=45';
ALTER TABLE
で table_option
COMMENT
句を使用して、既存のテーブルの MERGE_THRESHOLD
値を設定することもできます:
Press CTRL+C to copyCREATE TABLE t1 ( id INT, KEY id_index (id) ); ALTER TABLE t1 COMMENT='MERGE_THRESHOLD=40';
個々のインデックスに対する MERGE_THRESHOLD の設定
個々のインデックスの MERGE_THRESHOLD
値を設定するには、次の例に示すように、CREATE TABLE
、ALTER TABLE
または CREATE INDEX
で index_option
COMMENT
句を使用できます:
-
CREATE TABLE
を使用した個々のインデックスに対するMERGE_THRESHOLD
の設定:Press CTRL+C to copyCREATE TABLE t1 ( id INT, KEY id_index (id) COMMENT 'MERGE_THRESHOLD=40' );
-
ALTER TABLE
を使用した個々のインデックスに対するMERGE_THRESHOLD
の設定:Press CTRL+C to copyCREATE TABLE t1 ( id INT, KEY id_index (id) ); ALTER TABLE t1 DROP KEY id_index; ALTER TABLE t1 ADD KEY id_index (id) COMMENT 'MERGE_THRESHOLD=40';
-
CREATE INDEX
を使用した個々のインデックスに対するMERGE_THRESHOLD
の設定:Press CTRL+C to copyCREATE TABLE t1 (id INT); CREATE INDEX id_index ON t1 (id) COMMENT 'MERGE_THRESHOLD=40';
GEN_CLUST_INDEX
のインデックスレベルで MERGE_THRESHOLD
値を変更することはできません。これは、InnoDB
テーブルが主キーまたは一意キーインデックスなしで作成されたときに InnoDB
によって作成されるクラスタインデックスです。 GEN_CLUST_INDEX
の MERGE_THRESHOLD
値は、テーブルに MERGE_THRESHOLD
を設定することによってのみ変更できます。
インデックスの MERGE_THRESHOLD 値のクエリー
インデックスの現在の MERGE_THRESHOLD
値は、INNODB_INDEXES
テーブルをクエリーすることで取得できます。 例:
Press CTRL+C to copymysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_INDEXES WHERE NAME='id_index' \G *************************** 1. row *************************** INDEX_ID: 91 NAME: id_index TABLE_ID: 68 TYPE: 0 N_FIELDS: 1 PAGE_NO: 4 SPACE: 57 MERGE_THRESHOLD: 40
table_option
COMMENT
句を使用して明示的に定義されている場合は、SHOW CREATE TABLE
を使用してテーブルの MERGE_THRESHOLD
値を表示できます:
Press CTRL+C to copymysql> SHOW CREATE TABLE t2 \G *************************** 1. row *************************** Table: t2 Create Table: CREATE TABLE `t2` ( `id` int(11) DEFAULT NULL, KEY `id_index` (`id`) COMMENT 'MERGE_THRESHOLD=40' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
インデックスレベルで定義された MERGE_THRESHOLD
値は、テーブルに定義された MERGE_THRESHOLD
値よりも優先されます。 未定義の場合、MERGE_THRESHOLD
はデフォルトで 50% (MERGE_THRESHOLD=50
、以前にハードコードされた値) に設定されます。
同様に、index_option
COMMENT
句を使用して明示的に定義されている場合は、SHOW INDEX
を使用してインデックスの MERGE_THRESHOLD
値を表示できます:
Press CTRL+C to copymysql> SHOW INDEX FROM t2 \G *************************** 1. row *************************** Table: t2 Non_unique: 1 Key_name: id_index Seq_in_index: 1 Column_name: id Collation: A Cardinality: 0 Sub_part: NULL Packed: NULL Null: YES Index_type: BTREE Comment: Index_comment: MERGE_THRESHOLD=40
MERGE_THRESHOLD 設定の影響の測定
INNODB_METRICS
テーブルには、インデックスページのマージに対する MERGE_THRESHOLD
設定の影響を測定するために使用できる 2 つのカウンタが用意されています。
Press CTRL+C to copymysql> SELECT NAME, COMMENT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME like '%index_page_merge%'; +-----------------------------+----------------------------------------+ | NAME | COMMENT | +-----------------------------+----------------------------------------+ | index_page_merge_attempts | Number of index page merge attempts | | index_page_merge_successful | Number of successful index page merges | +-----------------------------+----------------------------------------+
MERGE_THRESHOLD
値を下げる場合の目標は次のとおりです:
ページマージの試行回数が少なく、ページマージが成功しました
同様の数のページマージ試行と成功したページマージ
MERGE_THRESHOLD
設定が小さすぎると、空のページ領域が過剰になるため、データファイルが大きくなる可能性があります。
INNODB_METRICS
カウンタの使用の詳細は、セクション15.15.6「InnoDB INFORMATION_SCHEMA メトリックテーブル」 を参照してください。