Documentation Home
MySQL 8.0 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 36.1Mb
PDF (A4) - 36.2Mb


MySQL 8.0 リファレンスマニュアル  /  ...  /  インデックスページのマージしきい値の構成

このページは機械翻訳したものです。

15.8.11 インデックスページのマージしきい値の構成

インデックスページの MERGE_THRESHOLD 値を構成できます。 行が削除されたとき、または UPDATE 操作によって行が短縮されたときに、インデックスページの page-full 割合が MERGE_THRESHOLD 値を下回った場合、InnoDB はインデックスページを隣接するインデックスページとマージしようとします。 デフォルトの MERGE_THRESHOLD 値は 50 で、これは以前にハードコードされた値です。 MERGE_THRESHOLD の最小値は 1 で、最大値は 50 です。

インデックスページの page-full 割合がデフォルトの MERGE_THRESHOLD 設定である 50% を下回ると、InnoDB はインデックスページを隣接するページとマージしようとします。 両方のページが 50% に近い場合、ページがマージされた直後にページ分割が発生する可能性があります。 このマージ分割動作が頻繁に発生する場合は、パフォーマンスに悪影響を与える可能性があります。 頻繁なマージスプリットを回避するには、InnoDBpage-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 copy
CREATE TABLE t1 ( id INT, KEY id_index (id) ) COMMENT='MERGE_THRESHOLD=45';

ALTER TABLEtable_option COMMENT 句を使用して、既存のテーブルの MERGE_THRESHOLD 値を設定することもできます:

Press CTRL+C to copy
CREATE TABLE t1 ( id INT, KEY id_index (id) ); ALTER TABLE t1 COMMENT='MERGE_THRESHOLD=40';

個々のインデックスに対する MERGE_THRESHOLD の設定

個々のインデックスの MERGE_THRESHOLD 値を設定するには、次の例に示すように、CREATE TABLEALTER TABLE または CREATE INDEXindex_option COMMENT 句を使用できます:

  • CREATE TABLE を使用した個々のインデックスに対する MERGE_THRESHOLD の設定:

    Press CTRL+C to copy
    CREATE TABLE t1 ( id INT, KEY id_index (id) COMMENT 'MERGE_THRESHOLD=40' );
  • ALTER TABLE を使用した個々のインデックスに対する MERGE_THRESHOLD の設定:

    Press CTRL+C to copy
    CREATE 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 copy
    CREATE TABLE t1 (id INT); CREATE INDEX id_index ON t1 (id) COMMENT 'MERGE_THRESHOLD=40';
注記

GEN_CLUST_INDEX のインデックスレベルで MERGE_THRESHOLD 値を変更することはできません。これは、InnoDB テーブルが主キーまたは一意キーインデックスなしで作成されたときに InnoDB によって作成されるクラスタインデックスです。 GEN_CLUST_INDEXMERGE_THRESHOLD 値は、テーブルに MERGE_THRESHOLD を設定することによってのみ変更できます。

インデックスの MERGE_THRESHOLD 値のクエリー

インデックスの現在の MERGE_THRESHOLD 値は、INNODB_INDEXES テーブルをクエリーすることで取得できます。 例:

Press CTRL+C to copy
mysql> 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 copy
mysql> 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 copy
mysql> 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 copy
mysql> 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 メトリックテーブル」 を参照してください。