MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む
このページは機械翻訳したものです。
true または false であるシステム変数は、サーバー起動時に変数の名前を指定することで有効にすることができ、--skip-
プリフィクスを使用することで無効にすることができます。 たとえば、InnoDB
適応ハッシュインデックスを有効または無効にするには、コマンドラインで --innodb-adaptive-hash-index
または --skip-innodb-adaptive-hash-index
を使用するか、オプションファイルで innodb_adaptive_hash_index
または skip_innodb_adaptive_hash_index
を使用します。
数値が指定されるシステム変数は、コマンド行で --
として指定するか、オプションファイルで var_name
=value
として指定できます。
var_name
=value
多くのシステム変数は、実行時に変更できます (セクション5.1.9.2「動的システム変数」を参照してください)。
GLOBAL
および SESSION
変数スコープ修飾子については、SET
ステートメントのドキュメントを参照してください。
特定のオプションでは、InnoDB
データファイルの場所およびレイアウトが制御されます。セクション15.8.1「InnoDB の起動構成」では、これらのオプションを使用する方法について説明します。
初期段階では使用しないような一部のオプションは、マシンの処理能力やデータベースのワークロードに基づいて、InnoDB
のパフォーマンス特性を調整する際に役立ちます。
オプションおよびシステム変数の指定に関する詳細は、セクション4.2.2「プログラムオプションの指定」を参照してください。
表 15.24 「InnoDB オプションおよび変数リファレンス」
コマンド行形式 | --innodb[=value] |
---|---|
非推奨 | はい |
型 | 列挙 |
デフォルト値 | ON |
有効な値 |
|
サーバーが InnoDB
サポートでコンパイルされた場合に、InnoDB
ストレージエンジンのロードを制御します。 このオプションの形式はトライステートであり、指定可能な値は OFF
、ON
、または FORCE
です。 セクション5.6.1「プラグインのインストールおよびアンインストール」を参照してください。
InnoDB
を無効にするには、--innodb=OFF
または --skip-innodb
を使用します。 この場合、デフォルトのストレージエンジンは InnoDB
であるため、--default-storage-engine
および --default-tmp-storage-engine
を使用して永続テーブルと TEMPORARY
テーブルの両方のデフォルトをほかのエンジンに設定しないかぎり、サーバーは起動しません。
InnoDB
ストレージエンジンを無効にすることはできなくなり、--innodb=OFF
および --skip-innodb
オプションは非推奨であり、効果はありません。 使用すると警告が表示されます。 これらのオプションは、将来の MySQL リリースで削除される予定です。
コマンド行形式 | --innodb-status-file[={OFF|ON}] |
---|---|
型 | Boolean |
デフォルト値 | OFF |
--innodb-status-file
の起動オプションは、InnoDB
が innodb_status.
という名前のファイルをデータディレクトリに作成し、pid
SHOW ENGINE INNODB STATUS
出力を 15 秒ごとにおよそ書き込むかどうかを制御します。
innodb_status.
ファイルはデフォルトでは作成されません。 これを作成するには、pid
--innodb-status-file
オプションを指定して mysqld を起動します。 サーバーが正常に停止すると、InnoDB
によってファイルが削除されます。 異常停止が発生した場合は、ステータスファイルを手動で削除する必要がある場合があります。
--innodb-status-file
オプションは一時的な使用を目的としています。これは、SHOW ENGINE INNODB STATUS
の出力生成がパフォーマンスに影響し、innodb_status.
ファイルが時間の経過とともに非常に大きくなる可能性があるためです。
pid
関連情報については、セクション15.17.2「InnoDB モニターの有効化」を参照してください。
--skip-innodb
InnoDB
ストレージエンジンを無効にします。 --innodb
の説明を参照してください。
daemon_memcached_enable_binlog
コマンド行形式 | --daemon-memcached-enable-binlog[={OFF|ON}] |
---|---|
システム変数 | daemon_memcached_enable_binlog |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
MySQL binary log で InnoDB
memcached プラグイン (daemon_memcached
) を使用するには、ソースサーバーでこのオプションを有効にします。 このオプションは、サーバーの起動時にのみ設定できます。 --log-bin
オプションを使用して、ソースサーバーで MySQL バイナリログを有効にする必要もあります。
詳細は、セクション15.20.7「InnoDB memcached プラグインとレプリケーション」を参照してください。
daemon_memcached_engine_lib_name
コマンド行形式 | --daemon-memcached-engine-lib-name=file_name |
---|---|
システム変数 | daemon_memcached_engine_lib_name |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | ファイル名 |
デフォルト値 | innodb_engine.so |
InnoDB
memcached プラグインを実装する共有ライブラリを指定します。
詳細は、セクション15.20.3「InnoDB memcached プラグインの設定」を参照してください。
daemon_memcached_engine_lib_path
コマンド行形式 | --daemon-memcached-engine-lib-path=dir_name |
---|---|
システム変数 | daemon_memcached_engine_lib_path |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | ディレクトリ名 |
デフォルト値 | NULL |
InnoDB
memcached プラグインを実装する共有ライブラリを含むディレクトリのパスです。 デフォルト値は、MySQL プラグインディレクトリを表す NULL です。 MySQL プラグインディレクトリの外部にある別のストレージエンジン用の memcached
プラグインを指定しないかぎり、このパラメータを変更する必要はありません。
詳細は、セクション15.20.3「InnoDB memcached プラグインの設定」を参照してください。
コマンド行形式 | --daemon-memcached-option=options |
---|---|
システム変数 | daemon_memcached_option |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | 文字列 |
デフォルト値 |
|
起動時に、空白文字で区切られた memcached オプションをベースとなる memcached メモリーオブジェクトのキャッシュデーモンに渡すために使用されます。 たとえば、memcached がリスニングするポートの変更、同時接続の最大数の削減、キーと値のペアの最大メモリーサイズの変更、またはエラーログのデバッグメッセージの有効化を行うことができます。
使用法の詳細は、セクション15.20.3「InnoDB memcached プラグインの設定」を参照してください。 memcached オプションについては、memcached のマニュアルページを参照してください。
コマンド行形式 | --daemon-memcached-r-batch-size=# |
---|---|
システム変数 | daemon_memcached_r_batch_size |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 1 |
COMMIT
を実行して新しいトランザクションを開始する前に実行する memcached 読取り操作 (get
操作) の数を指定します。 daemon_memcached_w_batch_size
の対の片方です。
この値はデフォルトで 1 に設定されているため、SQL ステートメントを介してテーブルに加えられた変更は、memcached 操作からすぐに参照できます。 ベースとなるテーブルが memcached インタフェースからのみアクセスされているシステム上で、頻繁なコミットによるオーバーヘッドを削減するために、これを大きくすることがあります。 大きすぎる値を設定すると、Undo データまたは Redo データの量によっては、長時間実行されるトランザクションの場合と同様に、一部のストレージでオーバーヘッドが発生する可能性があります。
詳細は、セクション15.20.3「InnoDB memcached プラグインの設定」を参照してください。
コマンド行形式 | --daemon-memcached-w-batch-size=# |
---|---|
システム変数 | daemon_memcached_w_batch_size |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 1 |
COMMIT
を実行して新しいトランザクションを開始する前に実行する、add
、set
、incr
などの memcached 書込み操作の数を指定します。 daemon_memcached_r_batch_size
の対の一方です。
格納されるデータは停止時に保持することが重要であり、すぐにコミットする必要があると仮定すると、この値はデフォルトで 1 に設定されます。 クリティカルでないデータを格納する場合、頻繁なコミットによるオーバーヘッドを削減するためにこの値を増やすことができますが、予期しない終了が発生すると、最後の N
-1 のコミットされていない書込み操作が失われる可能性があります。
詳細は、セクション15.20.3「InnoDB memcached プラグインの設定」を参照してください。
コマンド行形式 | --innodb-adaptive-flushing[={OFF|ON}] |
---|---|
システム変数 | innodb_adaptive_flushing |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
ワークロードに基づいて、InnoDB
バッファープール内のダーティーページをフラッシュする比率を動的に調整するかどうかを指定します。 フラッシュ比率を動的に調整する目的は、I/O アクティビティーのバーストを回避することです。 この設定はデフォルトで有効になっています。 詳しくはセクション15.8.3.5「バッファープールのフラッシュの構成」をご覧ください。 一般的な I/O チューニングのアドバイスについては、セクション8.5.8「InnoDB ディスク I/O の最適化」を参照してください。
コマンド行形式 | --innodb-adaptive-flushing-lwm=# |
---|---|
システム変数 | innodb_adaptive_flushing_lwm |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 10 |
最小値 | 0 |
最大値 | 70 |
adaptive flushing が有効な redo log 容量の割合を表す最低水位標を定義します。 詳細は、セクション15.8.3.5「バッファープールのフラッシュの構成」を参照してください。
コマンド行形式 | --innodb-adaptive-hash-index[={OFF|ON}] |
---|---|
システム変数 | innodb_adaptive_hash_index |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
InnoDB
適応型ハッシュインデックスが有効と無効のどちらになっているのかを示します。 ワークロードに応じて、適応型ハッシュインデックスの作成を動的に有効または無効にして、クエリーのパフォーマンスを改善することが望ましい場合があります。 適応型ハッシュインデックスがすべてのワークロードに役立つとは限らないため、現実的なワークロードを使用して、有効と無効の両方でベンチマークを実施してください。 詳細は、セクション15.5.3「適応型ハッシュインデックス」を参照してください。
この変数はデフォルトで有効になっています。 SET GLOBAL
ステートメントを使用すると、サーバーを再起動せずに、このパラメータを変更できます。 実行時に設定を変更するには、グローバルシステム変数を設定するのに十分な権限が必要です。 セクション5.1.9.1「システム変数権限」を参照してください。 サーバーの起動時に --skip-innodb-adaptive-hash-index
を使用して無効にすることもできます。
適応型ハッシュインデックスを無効にすると、すぐにハッシュテーブルが空になります。 ハッシュテーブルが空になっても通常の操作は続行でき、ハッシュテーブルを使用していた実行中のクエリーは、代わりにインデックスの B ツリーに直接アクセスします。 適応型ハッシュインデックスを再度有効にすると、通常の操作時にハッシュテーブルが再度移入されます。
innodb_adaptive_hash_index_parts
コマンド行形式 | --innodb-adaptive-hash-index-parts=# |
---|---|
システム変数 | innodb_adaptive_hash_index_parts |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | 数値 |
デフォルト値 | 8 |
最小値 | 1 |
最大値 | 512 |
適応ハッシュインデックス検索システムをパーティション化します。 各インデックスは特定のパーティションにバインドされ、各パーティションは個別のラッチで保護されます。
適応ハッシュインデックス検索システムは、デフォルトで 8 つの部分にパーティション化されています。 最大設定は 512 です。
関連情報については、セクション15.5.3「適応型ハッシュインデックス」を参照してください。
innodb_adaptive_max_sleep_delay
コマンド行形式 | --innodb-adaptive-max-sleep-delay=# |
---|---|
システム変数 | innodb_adaptive_max_sleep_delay |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 150000 |
最小値 | 0 |
最大値 | 1000000 |
InnoDB
で、現在のワークロードに応じて innodb_thread_sleep_delay
の値を自動的に調整できます。 ゼロ以外の値を指定すると、innodb_adaptive_max_sleep_delay
オプションで指定した最大値まで、innodb_thread_sleep_delay
値の動的な自動調整が可能になります。 値はマイクロ秒数を表しています。 このオプションは、InnoDB
スレッド数が 16 個を上回る高負荷のシステムで役立つことがあります。 (実際には、同時接続数が数百または数千になる MySQL システムの大部分の変数です。)
詳細は、セクション15.8.4「InnoDB のスレッド並列性の構成」を参照してください。
コマンド行形式 | --innodb-api-bk-commit-interval=# |
---|---|
システム変数 | innodb_api_bk_commit_interval |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 5 |
最小値 | 1 |
最大値 | 1073741824 |
InnoDB
memcached インタフェースが使用されるアイドル状態の接続が自動コミットされる頻度 (秒単位) です。 詳細は、セクション15.20.6.4「InnoDB memcached プラグインのトランザクション動作の制御」を参照してください。
コマンド行形式 | --innodb-api-disable-rowlock[={OFF|ON}] |
---|---|
システム変数 | innodb_api_disable_rowlock |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
InnoDB
memcached が DML 操作を実行するときに行ロックを無効にするには、このオプションを使用します。 デフォルトでは、innodb_api_disable_rowlock
は無効になっています。これは、memcached が get
および set
操作の行ロックを要求することを意味します。 innodb_api_disable_rowlock
が有効な場合、memcached は行ロックではなくテーブルロックを要求します。
innodb_api_disable_rowlock
は動的ではありません。 これは mysqld コマンド行で指定するか、または MySQL 構成ファイルに入力する必要があります。 構成は、MySQL サーバーの起動時に発生するプラグインのインストール時に有効になります。
詳細は、セクション15.20.6.4「InnoDB memcached プラグインのトランザクション動作の制御」を参照してください。
コマンド行形式 | --innodb-api-enable-binlog[={OFF|ON}] |
---|---|
システム変数 | innodb_api_enable_binlog |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
MySQL バイナリログとともに、InnoDB
memcached プラグインを使用できます。 詳細は、InnoDB memcached バイナリログの有効化を参照してください。
コマンド行形式 | --innodb-api-enable-mdl[={OFF|ON}] |
---|---|
システム変数 | innodb_api_enable_mdl |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
InnoDB
memcached プラグインで使用されるテーブルをロックします。これにより、SQL インタフェースから DDL によって削除または変更できなくなります。 詳細は、セクション15.20.6.4「InnoDB memcached プラグインのトランザクション動作の制御」を参照してください。
コマンド行形式 | --innodb-api-trx-level=# |
---|---|
システム変数 | innodb_api_trx_level |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 0 |
memcached インタフェースによって処理されるクエリーのトランザクション isolation level を制御します。 よく聞く名前に対応する定数は、次のとおりです。
0 = READ UNCOMMITTED
1 = READ COMMITTED
2 = REPEATABLE READ
3 = SERIALIZABLE
詳細は、セクション15.20.6.4「InnoDB memcached プラグインのトランザクション動作の制御」を参照してください。
コマンド行形式 | --innodb-autoextend-increment=# |
---|---|
システム変数 | innodb_autoextend_increment |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 64 |
最小値 | 1 |
最大値 | 1000 |
自動拡張 InnoDB
system tablespace ファイルがいっぱいになったときにサイズを拡張するための増分サイズ (MB)。 デフォルト値は 64 です。 関連情報については、システムテーブルスペースデータファイル構成,およびシステムテーブルスペースのサイズ変更を参照してください。
innodb_autoextend_increment
設定は、file-per-table テーブルスペースファイルまたは general tablespace ファイルには影響しません。 これらのファイルは、innodb_autoextend_increment
の設定に関係なく自動拡張されます。 拡張は少量で始まり、その後の拡張は増分が 4MB で発生します。
コマンド行形式 | --innodb-autoinc-lock-mode=# |
---|---|
システム変数 | innodb_autoinc_lock_mode |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 2 |
有効な値 |
|
自動インクリメント値を生成する際に使用されるロックモードです。 許容値は、従来型、連続型またはインターリーブ型の場合、それぞれ 0、1 または 2 です。
デフォルト設定は、MySQL 8.0 の時点では 2 (インターリーブ)、それより前では 1 (連続) です。 デフォルト設定としてインターリーブロックモードを変更すると、MySQL 5.7 で発生したデフォルトのレプリケーションタイプとして、ステートメントベースから行ベースのレプリケーションへの変更が反映されます。 ステートメントベースレプリケーションでは、SQL ステートメントの特定のシーケンスに対して自動インクリメント値が予測可能かつ繰り返し可能な順序で割り当てられるように、連続した自動インクリメントロックモードが必要ですが、行ベースレプリケーションは SQL ステートメントの実行順序には影響しません。
各ロックモードの特性については、InnoDB AUTO_INCREMENT のロックモード を参照してください。
innodb_background_drop_list_empty
コマンド行形式 | --innodb-background-drop-list-empty[={OFF|ON}] |
---|---|
システム変数 | innodb_background_drop_list_empty |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
innodb_background_drop_list_empty
デバッグオプションを有効にすると、バックグラウンドドロップリストが空になるまでテーブルの作成が遅延されるため、テストケースの失敗を回避できます。 たとえば、テストケース A がテーブル t1
をバックグラウンドドロップリストに配置する場合、テストケース B はバックグラウンドドロップリストが空になるまで待機してから、テーブル t1
を作成します。
コマンド行形式 | --innodb-buffer-pool-chunk-size=# |
---|---|
システム変数 | innodb_buffer_pool_chunk_size |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 134217728 |
最小値 | 1048576 |
最大値 | innodb_buffer_pool_size / innodb_buffer_pool_instances |
innodb_buffer_pool_chunk_size
は、InnoDB
バッファプールのサイズ変更操作のチャンクサイズを定義します。
サイズ変更操作中にすべてのバッファプールページがコピーされないようにするために、この操作は 「chunks」 で実行されます。 デフォルトでは、innodb_buffer_pool_chunk_size
は 128MB (134217728 バイト) です。 チャンクに含まれるページ数は、innodb_page_size
の値によって異なります。innodb_buffer_pool_chunk_size
は、1MB (1048576 バイト) 単位で増減できます。
innodb_buffer_pool_chunk_size
値を変更する場合は、次の条件が適用されます:
バッファプールの初期化時に innodb_buffer_pool_chunk_size
*innodb_buffer_pool_instances
が現在のバッファプールサイズより大きい場合、innodb_buffer_pool_chunk_size
は innodb_buffer_pool_size
/ innodb_buffer_pool_instances
に切り捨てられます。
バッファプールサイズは、常に innodb_buffer_pool_chunk_size
* innodb_buffer_pool_instances
と等しいか倍数である必要があります。 innodb_buffer_pool_chunk_size
を変更すると、innodb_buffer_pool_size
は innodb_buffer_pool_chunk_size
* innodb_buffer_pool_instances
と等しいか倍数の値に自動的に丸められます。 調整は、バッファープールが初期化されたときに行われます。
この値を変更するとバッファプールのサイズが自動的に増加する可能性があるため、innodb_buffer_pool_chunk_size
を変更する場合は注意が必要です。 innodb_buffer_pool_chunk_size
を変更する前に、innodb_buffer_pool_size
への影響を計算して、生成されるバッファープールサイズが受け入れ可能であることを確認します。
潜在的なパフォーマンスの問題を回避するには、チャンク (innodb_buffer_pool_size
/ innodb_buffer_pool_chunk_size
) の数が 1000 を超えないようにする必要があります。
innodb_buffer_pool_size
変数は動的で、サーバーがオンラインのときにバッファプールのサイズを変更できます。 ただし、バッファプールサイズは innodb_buffer_pool_chunk_size
* innodb_buffer_pool_instances
の倍数である必要があり、これらの変数設定のいずれかを変更するにはサーバーを再起動する必要があります。
詳しくはセクション15.8.3.1「InnoDB バッファプールサイズの構成」をご覧ください。
コマンド行形式 | --innodb-buffer-pool-debug[={OFF|ON}] |
---|---|
システム変数 | innodb_buffer_pool_debug |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
このオプションを有効にすると、バッファプールのサイズが 1GB 未満の場合に複数のバッファプールインスタンスが許可され、innodb_buffer_pool_instances
に設定されている 1GB の最小バッファプールサイズ制約は無視されます。 innodb_buffer_pool_debug
オプションは、デバッグサポートが WITH_DEBUG
CMake オプションを使用してコンパイルされている場合にのみ使用できます。
innodb_buffer_pool_dump_at_shutdown
コマンド行形式 | --innodb-buffer-pool-dump-at-shutdown[={OFF|ON}] |
---|---|
システム変数 | innodb_buffer_pool_dump_at_shutdown |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
MySQL サーバーの停止時に InnoDB
buffer pool にキャッシュされたページを記録して、次回の再起動時に warmup プロセスを短縮するかどうかを指定します。 一般に、innodb_buffer_pool_load_at_startup
と組み合わせて使用されます。 innodb_buffer_pool_dump_pct
オプションは、ダンプする最後に使用されたバッファープールページの割合を定義します。
innodb_buffer_pool_dump_at_shutdown
と innodb_buffer_pool_load_at_startup
の両方がデフォルトで有効になっています。
詳細は、セクション15.8.3.6「バッファープールの状態の保存と復元」を参照してください。
コマンド行形式 | --innodb-buffer-pool-dump-now[={OFF|ON}] |
---|---|
システム変数 | innodb_buffer_pool_dump_now |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
InnoDB
buffer pool にキャッシュされたページをすぐに記録します。 一般に、innodb_buffer_pool_load_now
と組み合わせて使用されます。
詳細は、セクション15.8.3.6「バッファープールの状態の保存と復元」を参照してください。
コマンド行形式 | --innodb-buffer-pool-dump-pct=# |
---|---|
システム変数 | innodb_buffer_pool_dump_pct |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 25 |
最小値 | 1 |
最大値 | 100 |
各バッファープールが読み出してダンプする直近で使用されたページの割合を指定。 指定できる範囲は 1~ 100 です。 デフォルト値は 25 です。 たとえば、100 ページのバッファプールが 4 つあり、innodb_buffer_pool_dump_pct
が 25 に設定されている場合、各バッファプールから最近使用された 25 ページがダンプされます。
コマンド行形式 | --innodb-buffer-pool-filename=file_name |
---|---|
システム変数 | innodb_buffer_pool_filename |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | ファイル名 |
デフォルト値 | ib_buffer_pool |
innodb_buffer_pool_dump_at_shutdown
または innodb_buffer_pool_dump_now
で生成されるテーブルスペース ID およびページ ID のリストを保持するファイルの名前を指定します。 テーブルスペース ID およびページ ID は、space, page_id
という形式で保存されます。 デフォルトでは、ファイルの名前は ib_buffer_pool
で、InnoDB
データディレクトリにあります。 データディレクトリに対してデフォルト以外の場所を指定する必要があります。
SET
ステートメントを使用して、実行時にファイル名を指定できます:
SET GLOBAL innodb_buffer_pool_filename='file_name'
;
起動時に、起動文字列または MySQL 構成ファイルでファイル名を指定することもできます。 起動時にファイル名を指定する場合は、ファイルが存在する必要があります。存在しない場合は、そのようなファイルまたはディレクトリがないことを示す起動エラーが InnoDB
によって返されます。
詳細は、セクション15.8.3.6「バッファープールの状態の保存と復元」を参照してください。
innodb_buffer_pool_in_core_file
コマンド行形式 | --innodb-buffer-pool-in-core-file[={OFF|ON}] |
---|---|
導入 | 8.0.14 |
システム変数 | innodb_buffer_pool_in_core_file |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
innodb_buffer_pool_in_core_file
変数を無効にすると、InnoDB
バッファープールページが除外され、コアファイルのサイズが小さくなります。 この変数を使用するには、core_file
変数を有効にし、オペレーティングシステムで madvise()
に対する MADV_DONTDUMP
の POSIX 以外の拡張機能をサポートする必要があります。これは Linux 3.4 以降でサポートされています。 詳細は、セクション15.8.3.7「コアファイルからのバッファープールページの除外」を参照してください。
コマンド行形式 | --innodb-buffer-pool-instances=# |
---|---|
システム変数 | innodb_buffer_pool_instances |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 (Windows, 32 ビットプラットフォーム) | (autosized) |
デフォルト値 (その他) | 8 (or 1 if innodb_buffer_pool_size < 1GB |
最小値 | 1 |
最大値 | 64 |
InnoDB
のバッファープールが分割される領域の数です。 バッファープールが数 G バイトの範囲にあるシステムでは、バッファープールを個別のインスタンスに分割すると、キャッシュされたページに対して異なるスレッドが読み取りおよび書き込みを行うときの競合が減るため、並列性が向上する場合があります。 バッファープールに格納される各ページまたはバッファープールから読み取られる各ページは、ハッシュ関数を使用して、バッファープールインスタンスのいずれかにランダムに割り当てられます。 各バッファープールは、独自の空きリスト、フラッシュリスト、LRU、およびバッファープールに接続されたその他のすべてのデータ構造を管理し、独自のバッファープール相互排他ロックによって保護されます。
このオプションは、innodb_buffer_pool_size
を 1GB 以上に設定する場合にのみ有効になります。 バッファプールの合計サイズは、すべてのバッファプールに分割されます。 最高の効率を得るには、innodb_buffer_pool_instances
と innodb_buffer_pool_size
の組み合わせを、各バッファープールインスタンスが少なくとも 1G バイトになるように指定します。
32-bit Windows システムのデフォルト値は、次に説明するように、innodb_buffer_pool_size
の値によって異なります:
innodb_buffer_pool_size
が 1.3G バイトよりも大きい場合は、innodb_buffer_pool_instances
のデフォルトが innodb_buffer_pool_size
/128M バイトになり、チャンクごとに個別のメモリー割り当てリクエストを持ちます。32 ビット版 Windows で単一のバッファープールで必要となる連続したアドレス空間を割り当てることができないという重大なリスクが存在する境界として、1.3G バイトが選択されました。
それ以外の場合、デフォルトは 1 です。
他のすべてのプラットフォームでは、innodb_buffer_pool_size
が 1GB 以上の場合、デフォルト値は 8 です。 それ以外の場合、デフォルトは 1 です。
関連情報については、セクション15.8.3.1「InnoDB バッファプールサイズの構成」を参照してください。
コマンド行形式 | --innodb-buffer-pool-load-abort[={OFF|ON}] |
---|---|
システム変数 | innodb_buffer_pool_load_abort |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
innodb_buffer_pool_load_at_startup
または innodb_buffer_pool_load_now
によってトリガーされた InnoDB
buffer pool コンテンツをリストアするプロセスを中断します。
詳細は、セクション15.8.3.6「バッファープールの状態の保存と復元」を参照してください。
innodb_buffer_pool_load_at_startup
コマンド行形式 | --innodb-buffer-pool-load-at-startup[={OFF|ON}] |
---|---|
システム変数 | innodb_buffer_pool_load_at_startup |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
MySQL サーバーの起動時に、以前に保持していたものと同じページをロードすることで、InnoDB
buffer pool が自動的に warmed up になるように指定します。 一般に、innodb_buffer_pool_dump_at_shutdown
と組み合わせて使用されます。
innodb_buffer_pool_dump_at_shutdown
と innodb_buffer_pool_load_at_startup
の両方がデフォルトで有効になっています。
詳細は、セクション15.8.3.6「バッファープールの状態の保存と復元」を参照してください。
コマンド行形式 | --innodb-buffer-pool-load-now[={OFF|ON}] |
---|---|
システム変数 | innodb_buffer_pool_load_now |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
サーバーの再起動を待たずに一連のデータページをロードすることで、InnoDB
buffer pool を即時に warms up します。 ベンチマーク時にキャッシュメモリーを既知の状態に戻したり、レポートやメンテナンスのためにクエリーを実行したあとに、MySQL サーバーの通常のワークロードを再開する準備をしたりする際に役立ちます。
詳細は、セクション15.8.3.6「バッファープールの状態の保存と復元」を参照してください。
コマンド行形式 | --innodb-buffer-pool-size=# |
---|---|
システム変数 | innodb_buffer_pool_size |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 134217728 |
最小値 | 5242880 |
最大値 (64 ビットプラットフォーム) | 2**64-1 |
最大値 (32 ビットプラットフォーム) | 2**32-1 |
InnoDB
がテーブルおよびインデックスのデータをキャッシュするメモリー領域であるバッファープールのサイズ (バイト単位) です。 デフォルト値は 134217728 バイト (128MB) です。 最大値は、CPU アーキテクチャーによって異なります。最大値は、32 ビットシステムでは 4294967295 (232-1)、64 ビットシステムでは 18446744073709551615 (264-1) です。 32 ビットシステムでは、CPU アーキテクチャーおよびオペレーティングシステムに、指定された最大値よりも小さい実用的な最大サイズが課されている可能性があります。 バッファープールのサイズが 1G バイトよりも大きい場合に、innodb_buffer_pool_instances
を 1 よりも大きい値に設定すると、高負荷のサーバーで拡張性を改善できます。
バッファプールを大きくすると、同じテーブルデータに複数回アクセスするために必要なディスク I/O が少なくなります。 専用データベースサーバーでは、バッファプールサイズをマシンの物理メモリーサイズの 80% に設定できます。 バッファープールサイズを構成するときは、次の潜在的な問題に注意し、必要に応じてバッファープールのサイズをスケールバックする準備をしてください。
物理メモリーの競合により、オペレーティングシステムでページングが発生する可能性があります。
InnoDB
では、バッファおよび制御構造体用に追加のメモリーが予約されるため、割り当てられる領域の合計は、指定されたバッファプールサイズよりも約 10% 大きくなります。
バッファープールのアドレス空間は連続している必要があります。これは、特定のアドレスで DLL をロードする Windows システムで問題になる可能性があります。
バッファープールを初期化する時間は、ほぼそのサイズに比例しています。 バッファプールが大きいインスタンスでは、初期化にかなりの時間がかかる場合があります。 初期化期間を短縮するには、サーバーの停止時にバッファプールの状態を保存し、サーバーの起動時にリストアします。 セクション15.8.3.6「バッファープールの状態の保存と復元」を参照してください。
バッファープールサイズを増減すると、操作はチャンク単位で実行されます。 チャンクサイズは、innodb_buffer_pool_chunk_size
変数 (デフォルトは 128 MB) によって定義されます。
バッファプールサイズは、常に innodb_buffer_pool_chunk_size
* innodb_buffer_pool_instances
と等しいか倍数である必要があります。 バッファープールサイズを innodb_buffer_pool_chunk_size
*innodb_buffer_pool_instances
と等しくない値または倍数に変更すると、バッファープールサイズは innodb_buffer_pool_chunk_size
* innodb_buffer_pool_instances
と等しいか倍数の値に自動的に調整されます。
innodb_buffer_pool_size
は動的に設定できるため、サーバーを再起動せずにバッファプールのサイズを変更できます。 Innodb_buffer_pool_resize_status
ステータス変数は、オンラインバッファプールのサイズ変更操作のステータスを報告します。 詳しくはセクション15.8.3.1「InnoDB バッファプールサイズの構成」をご覧ください。
innodb_dedicated_server
が有効な場合、innodb_buffer_pool_size
値は明示的に定義されていなければ自動的に構成されます。 詳細は、セクション15.8.12「専用 MySQL Server の自動構成の有効化」を参照してください。
コマンド行形式 | --innodb-change-buffer-max-size=# |
---|---|
システム変数 | innodb_change_buffer_max_size |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 25 |
最小値 | 0 |
最大値 | 50 |
buffer pool の合計サイズに対する InnoDB
change buffer の最大サイズの割合。 この値は、MySQL サーバーで頻繁に挿入、更新、および削除アクティビティーが発生する場合は大きくし、MySQL サーバーでレポート用に使用されるデータが変更されない場合は小さくするとよいでしょう。 詳細は、セクション15.5.2「変更バッファ」を参照してください。 一般的な I/O チューニングのアドバイスについては、セクション8.5.8「InnoDB ディスク I/O の最適化」を参照してください。
コマンド行形式 | --innodb-change-buffering=value |
---|---|
システム変数 | innodb_change_buffering |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | 列挙 |
デフォルト値 | all |
有効な値 |
|
InnoDB
がバッファリングの変更 (I/O 操作を連続して実行できるように、セカンダリインデックスへの書き込み操作を遅延させる最適化) を実行するかどうかを指定します。 次のテーブルに、許可される値を示します。 値は数値で指定することもできます。
表 15.25 innodb_change_buffering に許可される値
値 | 数値 | 説明 |
---|---|---|
none |
0 |
どの操作もバッファリングしません。 |
inserts |
1 |
挿入操作をバッファリングします。 |
deletes |
2 |
バッファ削除マーキング操作。厳密に言えば、パージ操作中に後で削除するためにインデックスレコードをマークする書込み。 |
changes |
3 |
バッファの挿入および削除マーク操作。 |
purges |
4 |
バックグラウンドで実行される物理的な削除操作をバッファリングします。 |
all |
5 |
デフォルト。 バッファの挿入、削除マーク操作およびパージ。 |
詳細は、セクション15.5.2「変更バッファ」を参照してください。 一般的な I/O チューニングのアドバイスについては、セクション8.5.8「InnoDB ディスク I/O の最適化」を参照してください。
コマンド行形式 | --innodb-change-buffering-debug=# |
---|---|
システム変数 | innodb_change_buffering_debug |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 0 |
最大値 | 2 |
InnoDB
変更バッファリングのデバッグフラグを設定します。 値 1 を指定すると、変更バッファに対するすべての変更が強制されます。 値 2 を指定すると、マージ時に予期しない終了が発生します。 デフォルト値の 0 は、変更バッファリングデバッグフラグが設定されていないことを示します。 このオプションは、デバッグサポートが WITH_DEBUG
CMake オプションを使用してコンパイルされている場合にのみ使用できます。
コマンド行形式 | --innodb-checkpoint-disabled[={OFF|ON}] |
---|---|
システム変数 | innodb_checkpoint_disabled |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
これは、エキスパートによるデバッグのみを目的としたデバッグオプションです。 チェックポイントを無効にして、故意のサーバーイグジットが常に InnoDB
リカバリを開始するようにします。 通常は、サーバーの終了後にリカバリが必要な redo ログエントリを書き込む DML 操作を実行する前に、短い間隔でのみ有効にする必要があります。 このオプションは、デバッグサポートが WITH_DEBUG
CMake オプションを使用してコンパイルされている場合にのみ使用できます。
コマンド行形式 | --innodb-checksum-algorithm=value |
---|---|
システム変数 | innodb_checksum_algorithm |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | 列挙 |
デフォルト値 | crc32 |
有効な値 |
|
InnoDB
tablespaces のディスクブロックに格納されている checksum を生成および検証する方法を指定します。 innodb_checksum_algorithm
のデフォルト値は crc32
です。
3.8.0 までのバージョンの MySQL Enterprise Backup は、CRC32 チェックサムを使用するテーブルスペースのバックアップをサポートしていません。 MySQL Enterprise Backup は、CRC32 チェックサムのサポートを 3.8.1 で (いくつかの制限付きで) 追加しています。 詳細は、MySQL Enterprise Backup 3.8.1 の変更履歴を参照してください。
値 innodb
は、以前のバージョンの MySQL と下位互換性があります。 値 crc32
では、より高速に、変更されたすべてのブロックのチェックサムを計算し、ディスク読み取りごとにチェックサムをチェックするアルゴリズムが使用されます。 ブロックを一度に 32 ビットスキャンします。これは、ブロックを一度に 8 ビットスキャンする innodb
チェックサムアルゴリズムより高速です。 値 none
では、ブロックデータに基づいて値が計算されるのではなく、チェックサムフィールドに定数値が書き込まれます。 テーブルスペース内のブロックは、データの変更時に徐々に更新される古いチェックサム値と新しいチェックサム値を混在させて使用できます。テーブルスペース内のブロックが crc32
アルゴリズムを使用するように変更されると、関連付けられたテーブルを以前のバージョンの MySQL で読み取ることはできません。
チェックサムアルゴリズムの厳密な形式では、テーブルスペースで有効だが一致しないチェックサム値が検出されると、エラーが報告されます。 テーブルスペースを初めて設定する場合は、新しいインスタンスでのみ厳密な設定を使用することをお薦めします。 厳密な設定は、ディスク読取り時にすべてのチェックサム値を計算する必要がないため、多少高速です。
次のテーブルに、none
、innodb
および crc32
オプションの値とそれぞれに対応する厳密な値の違いを示します。none
、innodb
および crc32
は、指定されたタイプのチェックサム値を各データブロックに書き込みますが、互換性のために、読取り操作中にブロックを検証するときに他のチェックサム値を受け入れます。 厳密な設定も有効なチェックサム値を受け入れますが、一致しない有効なチェックサム値が検出されるとエラーメッセージを出力します。 厳密な形式を使用すると、インスタンス内のすべての InnoDB
データファイルが同一の innodb_checksum_algorithm
値で作成される場合に、検証が高速になります。
表 15.26 許可される innodb_checksum_algorithm 値
値 | 生成されるチェックサム (書き込み時) | 許可されたチェックサム (読取り時) |
---|---|---|
none | 定数。 | none 、innodb 、または crc32 で生成されるチェックサムのいずれか。 |
innodb | ソフトウェアで InnoDB の元のアルゴリズムを使用して計算されたチェックサム。 |
none 、innodb 、または crc32 で生成されるチェックサムのいずれか。 |
crc32 | crc32 アルゴリズムを使用して計算されたチェックサム (ハードウェアの支援を得て実行される可能性もあります)。 |
none 、innodb 、または crc32 で生成されるチェックサムのいずれか。 |
strict_none | 定数 | none 、innodb 、または crc32 で生成されるチェックサムのいずれか。 有効だが一致しないチェックサムが検出されると、InnoDB はエラーメッセージを出力します。 |
strict_innodb | ソフトウェアで InnoDB の元のアルゴリズムを使用して計算されたチェックサム。 |
none 、innodb 、または crc32 で生成されるチェックサムのいずれか。 有効だが一致しないチェックサムが検出されると、InnoDB はエラーメッセージを出力します。 |
strict_crc32 | crc32 アルゴリズムを使用して計算されたチェックサム (ハードウェアの支援を得て実行される可能性もあります)。 |
none 、innodb 、または crc32 で生成されるチェックサムのいずれか。 有効だが一致しないチェックサムが検出されると、InnoDB はエラーメッセージを出力します。 |
コマンド行形式 | --innodb-cmp-per-index-enabled[={OFF|ON}] |
---|---|
システム変数 | innodb_cmp_per_index_enabled |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX
テーブルでインデックスごとの圧縮関連の統計を有効にします。 これらの統計は収集にコストがかかる可能性があるため、このオプションは、InnoDB
compressed テーブルに関連するパフォーマンスチューニング中に開発、テストまたはレプリカインスタンスでのみ有効にします。
詳細は、セクション26.51.7「INFORMATION_SCHEMA INNODB_CMP_PER_INDEX および INNODB_CMP_PER_INDEX_RESET テーブル」およびセクション15.9.1.4「実行時の InnoDB テーブル圧縮の監視」を参照してください。
コマンド行形式 | --innodb-commit-concurrency=# |
---|---|
システム変数 | innodb_commit_concurrency |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 0 |
最小値 | 0 |
最大値 | 1000 |
同時にコミットできるスレッドの数です。 値を 0 (デフォルト) にすると、任意の数のトランザクションを同時にコミットすることが許可されます。
innodb_commit_concurrency
の値は、実行時にゼロからゼロ以外 (またはその逆) に変更できません。 ゼロ以外の値から別のゼロ以外の値に変更することはできます。
コマンド行形式 | --innodb-compress-debug=value |
---|---|
システム変数 | innodb_compress_debug |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | 列挙 |
デフォルト値 | none |
有効な値 |
|
テーブルごとに COMPRESSION
属性を定義せずに、指定された圧縮アルゴリズムを使用してすべてのテーブルを圧縮します。 このオプションは、デバッグサポートが WITH_DEBUG
CMake オプションを使用してコンパイルされている場合にのみ使用できます。
関連情報については、セクション15.9.2「InnoDB ページ圧縮」を参照してください。
innodb_compression_failure_threshold_pct
コマンド行形式 | --innodb-compression-failure-threshold-pct=# |
---|---|
システム変数 | innodb_compression_failure_threshold_pct |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 5 |
最小値 | 0 |
最大値 | 100 |
高コストの compression failures を回避するために MySQL が compressed ページ内でパディングの追加を開始するテーブルの圧縮失敗率のしきい値をパーセンテージで定義します。 このしきい値を超えると、MySQL は、最大で innodb_compression_pad_pct_max
で指定されたページサイズの割合まで空き領域の量を動的に調整することで、新しい各圧縮済みページ内に追加の空き領域を残し始めます。 値をゼロにすると、圧縮の効率性をモニターするメカニズムが無効になり、パディングの量が動的に調整されます。
詳細は、セクション15.9.1.6「OLTP ワークロードの圧縮」を参照してください。
コマンド行形式 | --innodb-compression-level=# |
---|---|
システム変数 | innodb_compression_level |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 6 |
最小値 | 0 |
最大値 | 9 |
InnoDB
の圧縮されたテーブルおよびインデックスで使用される zlib 圧縮のレベルを指定します。 値を大きくすると、ストレージデバイス上に収容できるデータ量が多くなりますが、圧縮時の CPU オーバーヘッドも多くなるという犠牲が伴います。 値を小さくすると、ストレージ領域がクリティカルでない場合に、CPU のオーバーヘッドを削減できます。それ以外の場合は、データが特に圧縮可能でないと予測されます。
詳細は、セクション15.9.1.6「OLTP ワークロードの圧縮」を参照してください。
innodb_compression_pad_pct_max
コマンド行形式 | --innodb-compression-pad-pct-max=# |
---|---|
システム変数 | innodb_compression_pad_pct_max |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 50 |
最小値 | 0 |
最大値 | 75 |
圧縮された各ページ内の空き領域として予約できる最大の割合を指定します。これにより、圧縮されたテーブルまたはインデックスが更新され、データが再度圧縮される可能性があるときに、ページ内のデータおよび変更ログを再編成する余地が得られます。 innodb_compression_failure_threshold_pct
がゼロ以外の値に設定され、compression failures のレートがカットオフポイントを通過する場合にのみ適用されます。
詳細は、セクション15.9.1.6「OLTP ワークロードの圧縮」を参照してください。
コマンド行形式 | --innodb-concurrency-tickets=# |
---|---|
システム変数 | innodb_concurrency_tickets |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 5000 |
最小値 | 1 |
最大値 | 4294967295 |
同時に InnoDB
に入ることができるスレッドの数を決定します。 スレッドが InnoDB
に入ろうとしたときに、すでにスレッド数が並列実行の制限に達している場合は、そのスレッドがキューに配置されます。 スレッドが InnoDB
に入ることを許可されている場合は、innodb_concurrency_tickets
の値と同じ数の「「チケット」」が与えられ、チケットを使い切るまでスレッドは InnoDB
に自由に入ることができます。 それ以降は、スレッドが次に InnoDB
に入ろうとしたときに、再度並列実行チェックの対象となります (キューに入る対象となる可能性もあります)。 デフォルト値は 5000 です。
innodb_concurrency_tickets
値を小さくすると、1、2 行しか処理する必要のない小規模なトランザクションと、多数の行を処理する大規模なトランザクションが競合する可能性が高くなります。 小さい innodb_concurrency_tickets
値のデメリットは、大規模なトランザクションが完了する前にキューを何度もループする必要があり、これによりタスクの完了に必要な時間が長くなることです。
innodb_concurrency_tickets
値を大きくすると、大規模なトランザクションで (innodb_thread_concurrency
で制御される) キューの終了時の位置を待機する時間が短くなり、行を取得する時間が長くなります。 また、大規模なトランザクションでは、タスクを完了するために必要なキューとの間の移動も少なくなります。 innodb_concurrency_tickets
値を大きくする欠点は、同時に実行する大規模なトランザクションの数が非常に多くなることで、小規模なトランザクションが実行されるまでの待機時間が長くなるため、枯渇する可能性がある点です。
ゼロ以外の innodb_thread_concurrency
値では、innodb_concurrency_tickets
値を上下に調整して、大規模なトランザクションと小規模なトランザクションの間の最適なバランスを見つける必要がある場合があります。 SHOW ENGINE INNODB STATUS
レポートには、キューを通過する現時点で実行中のトランザクション用に残されているチケットの数が表示されます。 このデータは、INFORMATION_SCHEMA.INNODB_TRX
テーブルの TRX_CONCURRENCY_TICKETS
カラムから取得することもできます。
詳細は、セクション15.8.4「InnoDB のスレッド並列性の構成」を参照してください。
コマンド行形式 | --innodb-data-file-path=file_name |
---|---|
システム変数 | innodb_data_file_path |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | 文字列 |
デフォルト値 | ibdata1:12M:autoextend |
InnoDB
システムテーブルスペースデータファイルの名前、サイズおよび属性を定義します。 innodb_data_file_path
の値を指定しない場合、デフォルトの動作では、12MB を少し超える単一の自動拡張データファイルが ibdata1
という名前で作成されます。
データファイル指定の完全な構文には、ファイル名、ファイルサイズ、autoextend
属性および max
属性が含まれます:
file_name
:file_size
[:autoextend[:max:max_file_size
]]
ファイルサイズは、K
、M
または G
をサイズ値に追加することで、KB、MB または GB 単位で指定します。 データファイルのサイズを KB 単位で指定する場合は、1024 の倍数で指定します。 それ以外の場合、KB 値は最も近いメガバイト (MB) 境界に丸められます。 ファイルサイズの合計は、12MB 以上である必要があります。
その他の構成情報については、システムテーブルスペースデータファイル構成 を参照してください。 サイズ変更の手順は、システムテーブルスペースのサイズ変更 を参照してください。
コマンド行形式 | --innodb-data-home-dir=dir_name |
---|---|
システム変数 | innodb_data_home_dir |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | ディレクトリ名 |
InnoDB
system tablespace データファイルのディレクトリパスの共通部分。 デフォルト値は、MySQL の data
ディレクトリです。 設定が絶対パスで定義されていないかぎり、この設定は innodb_data_file_path
設定と連結されます。
innodb_data_home_dir
の値を指定する場合は、末尾にスラッシュが必要です。 例:
[mysqld] innodb_data_home_dir = /path/to/myibdata/
この設定は、file-per-table テーブルスペースの場所には影響しません。
関連情報については、セクション15.8.1「InnoDB の起動構成」を参照してください。
innodb_ddl_log_crash_reset_debug
コマンド行形式 | --innodb-ddl-log-crash-reset-debug[={OFF|ON}] |
---|---|
システム変数 | innodb_ddl_log_crash_reset_debug |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
DDL ログクラッシュインサーションカウンタを 1 にリセットするには、このデバッグオプションを有効にします。 このオプションは、デバッグサポートが WITH_DEBUG
CMake オプションを使用してコンパイルされている場合にのみ使用できます。
コマンド行形式 | --innodb-deadlock-detect[={OFF|ON}] |
---|---|
システム変数 | innodb_deadlock_detect |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
このオプションは、デッドロック検出を無効にするために使用します。 同時実行性の高いシステムでは、多数のスレッドが同じロックを待機している場合、デッドロック検出によって速度が低下する可能性があります。 デッドロック検出を無効にし、デッドロック発生時のトランザクションロールバックの innodb_lock_wait_timeout
設定に依存する方が効率的な場合があります。
関連情報については、セクション15.7.5.2「デッドロック検出」を参照してください。
コマンド行形式 | --innodb-dedicated-server[={OFF|ON}] |
---|---|
システム変数 | innodb_dedicated_server |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
innodb_dedicated_server
が有効な場合、InnoDB
は次の変数を自動的に構成します:
innodb_buffer_pool_size
innodb_log_file_size
innodb_log_files_in_group
(MySQL 8.0.14 の時点)
innodb_flush_method
MySQL インスタンスが、使用可能なすべてのシステムリソースを使用できる専用サーバーに存在する場合にのみ、innodb_dedicated_server
を有効にすることを検討してください。 MySQL インスタンスが他のアプリケーションとシステムリソースを共有している場合、innodb_dedicated_server
を有効にすることはお薦めしません。
詳細は、セクション15.8.12「専用 MySQL Server の自動構成の有効化」を参照してください。
コマンド行形式 | --innodb-default-row-format=value |
---|---|
システム変数 | innodb_default_row_format |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | 列挙 |
デフォルト値 | DYNAMIC |
有効な値 |
|
innodb_default_row_format
オプションは、InnoDB
テーブルおよびユーザー作成一時テーブルのデフォルトの行形式を定義します。 デフォルト設定は DYNAMIC
です。 許可されるその他の値は、COMPACT
および REDUNDANT
です。 system tablespace での使用がサポートされていない COMPRESSED
行フォーマットは、デフォルトとして定義できません。
新しく作成されたテーブルでは、ROW_FORMAT
オプションが明示的に指定されていない場合、または ROW_FORMAT=DEFAULT
が使用されている場合に、innodb_default_row_format
で定義された行形式が使用されます。
ROW_FORMAT
オプションが明示的に指定されていない場合、または ROW_FORMAT=DEFAULT
が使用されている場合は、テーブルを再構築する操作によって、テーブルの行形式も innodb_default_row_format
で定義された形式に暗黙的に変更されます。 詳細は、テーブルの行形式の定義を参照してください。
クエリーを処理するためにサーバーによって作成された内部 InnoDB
一時テーブルは、innodb_default_row_format
の設定に関係なく、DYNAMIC
行形式を使用します。
コマンド行形式 | --innodb-directories=dir_name |
---|---|
システム変数 | innodb_directories |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | ディレクトリ名 |
起動時にテーブルスペースファイルをスキャンするディレクトリを定義します。 このオプションは、サーバーがオフラインのときにテーブルスペースファイルを新しい場所に移動またはリストアする場合に使用します。 また、絶対パスを使用して作成されたテーブルスペースファイル、またはデータディレクトリの外部にあるテーブルスペースファイルのディレクトリを指定するためにも使用されます。
クラッシュリカバリ中のテーブルスペースの検出は、redo ログで参照されるテーブルスペースを識別するために innodb_directories
設定に依存します。 詳細は、クラッシュリカバリ中のテーブルスペースの検出を参照してください。
innodb_data_home_dir
、innodb_undo_directory
および datadir
によって定義されたディレクトリは、innodb_directories
オプションが明示的に指定されているかどうかに関係なく、起動時にスキャンするディレクトリのリストを作成するときに innodb_directories
引数値に自動的に追加されます。
innodb_directories
は、起動コマンドまたは MySQL オプションファイルでオプションとして指定できます。 一部のコマンドインタプリタではセミコロン (;) は特殊文字として解釈されるため、引数値の前後に引用符が使用されます。 (たとえば UNIX シェルでは、これはコマンド終端記号として扱われます。)
起動コマンド:
mysqld --innodb-directories="directory_path_1
;directory_path_2
"
MySQL オプションファイル:
[mysqld] innodb_directories="directory_path_1
;directory_path_2
"
ワイルドカード式は、ディレクトリの指定には使用できません。
innodb_directories
スキャンは、指定されたディレクトリのサブディレクトリも走査します。 重複するディレクトリおよびサブディレクトリは、スキャンされるディレクトリのリストから破棄されます。
詳細は、セクション15.6.3.6「サーバーがオフラインのときのテーブルスペースファイルの移動」を参照してください。
innodb_disable_sort_file_cache
コマンド行形式 | --innodb-disable-sort-file-cache[={OFF|ON}] |
---|---|
システム変数 | innodb_disable_sort_file_cache |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
マージソート一時ファイルのオペレーティングシステムファイルシステムキャッシュを無効にします。 その結果、このようなファイルが O_DIRECT
の同等のものとともに開きます。
コマンド行形式 | --innodb-doublewrite[={OFF|ON}] |
---|---|
システム変数 | innodb_doublewrite |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
innodb_doublewrite
変数は、二重書込みバッファを有効にするかどうかを制御します。 ほとんどの場合、デフォルトで有効になっています。 二重書込みバッファを無効にするには、innodb_doublewrite
を 0 に設定するか、--skip-innodb-doublewrite
でサーバーを起動します。 たとえば、ベンチマークの実行時などのように、データ整合性よりもパフォーマンスに関心がある場合は、二重書込みバッファを無効にすることを検討してください。
二重書き込みバッファーがアトミック書き込みをサポートする Fusion-io デバイス上にある場合、二重書き込みバッファーは自動的に無効になり、代わりに Fusion-io アトミック書き込みを使用してデータファイル書き込みが実行されます。 ただし、innodb_doublewrite
設定はグローバルであることに注意してください。 二重書き込みバッファーが無効になっている場合、Fusion-io ハードウェア上に存在しないデータファイルを含むすべてのデータファイルに対して無効になります。 この機能は Fusion-io ハードウェアでのみサポートされ、Linux の Fusion-io NVMFS でのみ有効になります。 この機能を最大限に活用するには、O_DIRECT
の innodb_flush_method
設定をお薦めします。
関連情報については、セクション15.6.4「二重書き込みバッファー」を参照してください。
コマンド行形式 | --innodb-doublewrite-batch-size=# |
---|---|
導入 | 8.0.20 |
システム変数 | innodb_doublewrite_batch_size |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 0 |
最小値 | 0 |
最大値 | 256 |
バッチで書き込む二重書込みページの数を定義します。
詳細は、セクション15.6.4「二重書き込みバッファー」を参照してください。
コマンド行形式 | --innodb-doublewrite-dir=dir_name |
---|---|
導入 | 8.0.20 |
システム変数 | innodb_doublewrite_dir |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | ディレクトリ名 |
二重書込みファイルのディレクトリを定義します。 ディレクトリが指定されていない場合、二重書込みファイルが innodb_data_home_dir
ディレクトリに作成され、指定されていない場合はデータディレクトリにデフォルト設定されます。
詳細は、セクション15.6.4「二重書き込みバッファー」を参照してください。
コマンド行形式 | --innodb-doublewrite-files=# |
---|---|
導入 | 8.0.20 |
システム変数 | innodb_doublewrite_files |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | innodb_buffer_pool_instances * 2 |
最小値 | 2 |
最大値 | 256 |
二重書込みファイルの数を定義します。 デフォルトでは、バッファープールインスタンスごとに 2 つの二重書き込みファイルが作成されます。
少なくとも 2 つの二重書込みファイルがあります。 二重書込みファイルの最大数は、バッファプールインスタンスの 2 倍です。 (バッファープールインスタンスの数は、innodb_buffer_pool_instances
変数によって制御されます。)
詳細は、セクション15.6.4「二重書き込みバッファー」を参照してください。
コマンド行形式 | --innodb-doublewrite-pages=# |
---|---|
導入 | 8.0.20 |
システム変数 | innodb_doublewrite_pages |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | innodb_write_io_threads value |
最小値 | innodb_write_io_threads value |
最大値 | 512 |
バッチ書込みのスレッド当たりの二重書込みページの最大数を定義します。 値が指定されていない場合、innodb_doublewrite_pages
は innodb_write_io_threads
値に設定されます。
詳細は、セクション15.6.4「二重書き込みバッファー」を参照してください。
コマンド行形式 | --innodb=extend-and-initialize[={OFF|ON}] |
---|---|
導入 | 8.0.22 |
システム変数 | innodb_extend_and_initialize |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
Linux システムの file-per-table テーブルスペースおよび一般テーブルスペースへの領域の割当て方法を制御します。
有効にすると、InnoDB
は新しく割り当てられたページに NULL を書き込みます。 無効にすると、領域は posix_fallocate()
コールを使用して割り当てられます。このコールは、物理的に NULL を書き込まずに領域を予約します。
詳細は、セクション15.6.3.8「Linux でのテーブルスペースの領域割当ての最適化」を参照してください。
コマンド行形式 | --innodb-fast-shutdown=# |
---|---|
システム変数 | innodb_fast_shutdown |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 1 |
有効な値 |
|
InnoDB
のシャットダウンモードです。 値が 0 の場合、InnoDB
は、停止前に slow shutdown、完全な purge および変更バッファのマージを実行します。 この値を 1 (デフォルト) にすると、InnoDB
はシャットダウン時に、これらの操作をスキップします。このプロセスは、高速シャットダウンと呼ばれます。 この値を 2 にすると、InnoDB
は MySQL がクラッシュした場合と同様に、そのログをフラッシュし、コールドシャットダウンを実行します。コミットされていないトランザクションは失われませんが、クラッシュリカバリ操作によって次回の起動時間が長くなります。
低速シャットダウンには数分間かかる可能性があり、大量のデータがバッファーに存在する極端なケースでは、数時間かかる可能性もあります。 MySQL のメジャーリリース間でアップグレードまたはダウングレードを行う前には、アップグレードプロセスによってファイル形式が更新される場合に備えて、すべてのデータファイルが完全に準備されるように、低速シャットダウン技術を使用してください。
データが破損するリスクがある場合に、完全な最速のシャットダウンを行うには、緊急事態またはトラブルシューティングの状況で innodb_fast_shutdown=2
を使用してください。
innodb_fil_make_page_dirty_debug
コマンド行形式 | --innodb-fil-make-page-dirty-debug=# |
---|---|
システム変数 | innodb_fil_make_page_dirty_debug |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 0 |
最大値 | 2**32-1 |
デフォルトでは、innodb_fil_make_page_dirty_debug
をテーブルスペースの ID に設定すると、テーブルスペースの最初のページがすぐに使用済になります。 innodb_saved_page_number_debug
がデフォルト以外の値に設定されている場合、innodb_fil_make_page_dirty_debug
を設定すると、指定したページがダーティになります。 innodb_fil_make_page_dirty_debug
オプションは、デバッグサポートが WITH_DEBUG
CMake オプションを使用してコンパイルされている場合にのみ使用できます。
コマンド行形式 | --innodb-file-per-table[={OFF|ON}] |
---|---|
システム変数 | innodb_file_per_table |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
innodb_file_per_table
が有効な場合、テーブルはデフォルトで file-per-table テーブルスペースに作成されます。 無効にすると、デフォルトでシステムテーブルスペースにテーブルが作成されます。 file-per-table テーブルスペースについては、セクション15.6.3.2「File-Per-Table テーブルスペース」 を参照してください。 InnoDB
システムテーブルスペースの詳細は、セクション15.6.3.1「システムテーブルスペース」 を参照してください。
innodb_file_per_table
変数は、実行時に SET GLOBAL
ステートメントを使用して構成するか、起動時にコマンドラインで指定するか、またはオプションファイルで指定できます。 実行時の構成には、グローバルシステム変数を設定するのに十分な権限 (セクション5.1.9.1「システム変数権限」 を参照) が必要で、すべての接続の操作にすぐに影響します。
file-per-table テーブルスペースに存在するテーブルが切り捨てられるか削除されると、解放された領域がオペレーティングシステムに戻されます。 システムテーブルスペースに存在するテーブルの切捨てまたは削除では、システムテーブルスペースの領域のみが解放されます。 システムテーブルスペースのデータファイルは縮小しないため、システムテーブルスペースの空き領域は InnoDB
データに再度使用できますが、オペレーティングシステムには戻されません。
innodb_file_per-table
設定は、一時テーブルの作成には影響しません。 MySQL 8.0.14 では、一時テーブルはセッション一時テーブルスペースに作成され、その前にグローバル一時テーブルスペースに作成されます。 セクション15.6.3.5「一時テーブルスペース」を参照してください。
コマンド行形式 | --innodb-fill-factor=# |
---|---|
システム変数 | innodb_fill_factor |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 100 |
最小値 | 10 |
最大値 | 100 |
InnoDB
では、インデックスの作成または再構築時にバルクロードが実行されます。 このインデックス作成方法は、「「ソートされたインデックス構築」」と呼ばれます。
innodb_fill_factor
では、ソートされたインデックスの作成時に入力される各 B ツリーページ上の領域の割合が定義され、将来のインデックスの増加のために予約されている残りの領域が使用されます。 たとえば、innodb_fill_factor
を 80 に設定すると、将来のインデックス増加のために各 B ツリーページの領域の 20% が予約されます。 実際の割合は異なる場合があります。 innodb_fill_factor
設定は、強い制限ではなくヒントとして解釈されます。
innodb_fill_factor
を 100 に設定すると、クラスタ化されたインデックスページの領域の 1/16 は将来のインデックスの増加に備えて解放されます。
innodb_fill_factor
は、B ツリーリーフページと非リーフページの両方に適用されます。 TEXT
または BLOB
エントリに使用される外部ページには適用されません。
詳細は、セクション15.6.2.3「ソートされたインデックス構築」を参照してください。
コマンド行形式 | --innodb-flush-log-at-timeout=# |
---|---|
システム変数 | innodb_flush_log_at_timeout |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 1 |
最小値 | 1 |
最大値 | 2700 |
N
秒ごとにログを書き込み、フラッシュします。innodb_flush_log_at_timeout
では、フラッシュを減らし、バイナリロググループのコミットのパフォーマンスへの影響を回避するために、フラッシュ間のタイムアウト期間を増やすことができます。 innodb_flush_log_at_timeout
のデフォルト設定は 1 秒に 1 回です。
innodb_flush_log_at_trx_commit
コマンド行形式 | --innodb-flush-log-at-trx-commit=# |
---|---|
システム変数 | innodb_flush_log_at_trx_commit |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | 列挙 |
デフォルト値 | 1 |
有効な値 |
|
commit 操作に対する厳密な ACID コンプライアンスと、コミット関連の I/O 操作がバッチで再配置および実行される場合に可能なパフォーマンスのバランスを制御します。 デフォルト値を変更することでパフォーマンスを向上できますが、クラッシュ時にトランザクションが失われる可能性があります。
ACID に完全に準拠するには、デフォルト設定の 1 が必要です。 ログは、トランザクションのコミットごとにディスクに書き込まれ、フラッシュされます。
0 に設定すると、ログは 1 秒に 1 回書き込まれ、ディスクにフラッシュされます。 ログがフラッシュされていないトランザクションはクラッシュ時に失われる可能性があります。
2 に設定すると、各トランザクションのコミット後にログが書き込まれ、1 秒に 1 回ディスクにフラッシュされます。 ログがフラッシュされていないトランザクションはクラッシュ時に失われる可能性があります。
設定 0 および 2 の場合、秒単位のフラッシュは 100% 保証されません。 フラッシュは、DDL 変更や、innodb_flush_log_at_trx_commit
設定とは関係なくログがフラッシュされる原因となるその他の内部 InnoDB
アクティビティが原因で頻繁に発生し、スケジューリングの問題が原因で頻繁に発生しない場合があります。 ログが 1 秒に 1 回フラッシュされると、クラッシュ時に最大 1 秒のトランザクションが失われる可能性があります。 ログが 1 秒に 1 回以上フラッシュされるか、それほど頻繁にフラッシュされない場合、失われる可能性のあるトランザクションの量はそれに応じて異なります。
ログのフラッシュ頻度は innodb_flush_log_at_timeout
によって制御されます。これにより、ログのフラッシュ頻度を N
秒 (N
は 1 ... 2700
で、デフォルト値は 1) に設定できます。 ただし、予期しない mysqld プロセスの終了によって、最大 N
秒のトランザクションが消去される可能性があります。
DDL 変更およびその他の内部 InnoDB
アクティビティは、innodb_flush_log_at_trx_commit
設定とは関係なくログをフラッシュします。
InnoDB
crash recovery は、innodb_flush_log_at_trx_commit
の設定に関係なく機能します。 トランザクションは完全に適用されるか、完全に消去されるかのいずれかです。
トランザクションで InnoDB
が使用されるレプリケーションセットアップの持続性および一貫性を保つ場合:
バイナリロギングが有効になっている場合は、sync_binlog=1
を設定します。
常に innodb_flush_log_at_trx_commit=1
を設定します。
予期しない停止に対して最も回復可能なレプリカの設定の組合せの詳細は、セクション17.4.2「レプリカの予期しない停止の処理」 を参照してください。
多くのオペレーティングシステムや一部のディスクハードウェアは、ディスクへのフラッシュ操作を行なったと欺きます。 フラッシュが行われていなくても、行われたと mysqld に通知される可能性があります。 この場合、推奨設定であってもトランザクションの永続性は保証されず、最悪の場合は停電によって InnoDB
データが破損する可能性があります。 バッテリーバックアップのディスクキャッシュを SCSI ディスクコントローラ内やディスク自体で使用すると、ファイルフラッシュの速度が上がり、操作が安全になります。 ハードウェアキャッシュ内のディスク書き込みのキャッシュを無効にすることもできます。
コマンド行形式 | --innodb-flush-method=value |
---|---|
システム変数 | innodb_flush_method |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | 文字列 |
デフォルト値 (Unix) | fsync |
デフォルト値 (Windows) | unbuffered |
有効な値 (Unix) |
|
有効な値 (Windows) |
|
InnoDB
data files および log files への flush データに使用される方法を定義します。これは I/O スループットに影響する可能性があります。
Unix に似たシステムでは、デフォルト値は fsync
です。 Windows では、デフォルト値は unbuffered
です。
MySQL 8.0 では、innodb_flush_method
オプションを数値で指定できます。
Unix に似たシステムの innodb_flush_method
オプションには、次のものがあります:
fsync
または 0
: InnoDB
は、fsync()
システムコールを使用して、データファイルとログファイルの両方をフラッシュします。fsync
がデフォルト設定です。
O_DSYNC
または 1
: InnoDB
では、O_SYNC
を使用してログファイルをオープンおよびフラッシュし、fsync()
を使用してデータファイルをフラッシュします。 さまざまな種類の Unix で問題が発生しているため、InnoDB
では直接 O_DSYNC
が使用されません。
littlesync
または 2
: このオプションは内部パフォーマンステストに使用され、現在はサポートされていません。 独自のリスクで使用します。
nosync
または 3
: このオプションは内部パフォーマンステストに使用され、現在はサポートされていません。 独自のリスクで使用します。
O_DIRECT
または 4
: InnoDB
では、O_DIRECT
(または Solaris 上の directio()
) を使用してデータファイルを開き、fsync()
を使用してデータファイルとログファイルの両方をフラッシュします。 このオプションは、一部の GNU/Linux バージョン、FreeBSD、および Solaris で使用可能です。
O_DIRECT_NO_FSYNC
: InnoDB
は、I/O,のフラッシュ中に O_DIRECT
を使用しますが、書込み操作のたびに fsync()
システムコールをスキップします。
MySQL 8.0.14 より前では、この設定は XFS や EXT4 などのファイルシステムには適していません。これらのファイルシステムでは、fsync()
システムコールを使用してファイルシステムメタデータの変更を同期する必要があります。 ファイルシステムのメタデータ変更を同期するためにファイルシステムで fsync()
システムコールが必要かどうかがわからない場合は、かわりに O_DIRECT
を使用します。
MySQL 8.0.14 の時点では、fsync()
は、新しいファイルの作成後、ファイルサイズの増加後およびファイルのクローズ後にコールされ、ファイルシステムメタデータの変更が確実に同期されます。 各書込み操作の後も、fsync()
システムコールはスキップされます。
redo ログファイルとデータファイルが異なるストレージデバイスに存在し、データファイルの書込みがバッテリバックされていないデバイスキャッシュからフラッシュされる前に予期しない終了が発生した場合、データが失われる可能性があります。 redo ログファイルおよびデータファイルに別の記憶域デバイスを使用する場合、およびデータファイルがバッテリバックアップされていないキャッシュを持つデバイスに存在する場合は、かわりに O_DIRECT
を使用します。
Windows システム用の innodb_flush_method
オプションには、次のものがあります:
unbuffered
または 0
: InnoDB
は、シミュレートされた非同期 I/O およびバッファなし I/O を使用します。
normal
または 1
: InnoDB
は、シミュレートされた非同期 I/O およびバッファされた I/O を使用します。
各設定がパフォーマンスに与える影響は、ハードウェア構成およびワークロードによって異なります。 使用する設定を決定したり、デフォルト設定のままにするかどうかを決定したりするには、特定の構成でベンチマークを実施します。 設定ごとに fsync()
呼び出しの全体数を確認するには、Innodb_data_fsyncs
ステータス変数を調査します。 ワークロードに読み取り操作と書き込み操作を混在させると、一部の設定での実行が影響を受ける可能性があります。 たとえば、ハードウェア RAID コントローラとバッテリバックアップ式書き込みキャッシュを備えたシステムでは、O_DIRECT
は、InnoDB
バッファープールとオペレーティングシステムのファイルシステムキャッシュの間の二重バッファリングを回避するのに役立ちます。 InnoDB
のデータファイルとログファイルが SAN 上に配置されている一部のシステムでは、大部分の SELECT
ステートメントを含む読み取り負荷の高いワークロードで、デフォルト値または O_DSYNC
の速度が速くなる可能性があります。 このパラメータは、必ず、本番環境が反映されたハードウェアおよびワークロードでテストしてください。 一般的な I/O チューニングのアドバイスについては、セクション8.5.8「InnoDB ディスク I/O の最適化」を参照してください。
innodb_dedicated_server
が有効な場合、innodb_flush_method
値は明示的に定義されていなければ自動的に構成されます。 詳細は、セクション15.8.12「専用 MySQL Server の自動構成の有効化」を参照してください。
コマンド行形式 | --innodb-flush-neighbors=# |
---|---|
システム変数 | innodb_flush_neighbors |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | 列挙 |
デフォルト値 | 0 |
有効な値 |
|
flushing で、InnoDB
buffer pool のページが同じ extent の他の dirty pages もフラッシュするかどうかを指定します。
0 に設定すると、innodb_flush_neighbors
が無効になります。 同じエクステント内のダーティページはフラッシュされません。
1 に設定すると、連続したダーティページが同じエクステントにフラッシュされます。
2 に設定すると、ダーティページが同じエクステントでフラッシュされます。
テーブルデータが従来の HDD ストレージデバイスに格納されている場合は、1 回の操作でこのような隣接ページをフラッシュすると、さまざまな時間に個々のページをフラッシュする場合と比較して、(主にディスクシーク操作の) I/O オーバーヘッドが削減されます。 SSD に格納されているテーブルデータの場合、シーク時間は重要な要因ではなく、このオプションを 0 に設定して書込み操作を分散できます。 関連情報については、セクション15.8.3.5「バッファープールのフラッシュの構成」を参照してください。
コマンド行形式 | --innodb-flush-sync[={OFF|ON}] |
---|---|
システム変数 | innodb_flush_sync |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
innodb_flush_sync
変数はデフォルトで有効になっており、checkpoints で発生する I/O アクティビティのバースト中に innodb_io_capacity
設定が無視されます。 innodb_io_capacity
設定で定義された I/O レートに準拠するには、innodb_flush_sync
を無効にします。
innodb_flush_sync
変数の構成の詳細は、セクション15.8.7「InnoDB I/O Capacity の構成」 を参照してください。
コマンド行形式 | --innodb-flushing-avg-loops=# |
---|---|
システム変数 | innodb_flushing_avg_loops |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 30 |
最小値 | 1 |
最大値 | 1000 |
InnoDB
が以前に計算されたフラッシュ状態のスナップショットを保持し、adaptive flushing が workloads の変更にどのくらい迅速に応答するかを制御する反復の数。 この値を大きくすると、ワークロードが変化するにつれて、フラッシュ操作の速度が円滑かつ徐々に変化します。 この値を小さくすると、適応型フラッシュがワークロードの変化にすばやく適応します。これにより、ワークロードが突然に増減した場合に、フラッシュアクティビティーが急増する可能性があります。
関連情報については、セクション15.8.3.5「バッファープールのフラッシュの構成」を参照してください。
コマンド行形式 | --innodb-force-load-corrupted[={OFF|ON}] |
---|---|
システム変数 | innodb_force_load_corrupted |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
破損としてマークされたテーブルを起動時に InnoDB
がロードできるようにします。 トラブルシューティング時に、何も対処しなければアクセスできないデータをリカバリする際にのみ使用してください。 トラブルシューティングが完了したら、この設定を無効にしてサーバーを再起動します。
コマンド行形式 | --innodb-force-recovery=# |
---|---|
システム変数 | innodb_force_recovery |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 0 |
最小値 | 0 |
最大値 | 6 |
クラッシュリカバリモードです。一般に、重大なトラブルシューティングの状況でのみ変更されます。 指定可能な値は 0 から 6 までです。 これらの値の意味および innodb_force_recovery
に関する重要な情報については、セクション15.21.2「InnoDB のリカバリの強制的な実行」を参照してください。
InnoDB
を起動してテーブルをダンプできるように、緊急時にはこの変数を 0 より大きい値にのみ設定してください。 安全策として、innodb_force_recovery
が 0 より大きい場合、InnoDB
は INSERT
、UPDATE
、または DELETE
操作を回避します。 innodb_force_recovery
設定が 4 以上の場合、InnoDB
は読取り専用モードになります。
レプリケーションではレプリカステータスログが InnoDB
テーブルに格納されるため、これらの制限により、レプリケーション管理コマンドがエラーで失敗する場合があります。
コマンド行形式 | --innodb-fsync-threshold=# |
---|---|
導入 | 8.0.13 |
システム変数 | innodb_fsync_threshold |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 0 |
最小値 | 0 |
最大値 | 2**64-1 |
デフォルトでは、InnoDB
が新しいログファイルやテーブルスペースファイルなどの新しいデータファイルを作成すると、ファイルはディスクにフラッシュされる前にオペレーティングシステムキャッシュに完全に書き込まれるため、大量のディスク書込みアクティビティが一度に発生する可能性があります。 オペレーティングシステムキャッシュから定期的にデータを強制的に小さいフラッシュするには、innodb_fsync_threshold
変数を使用してしきい値をバイト単位で定義します。 バイトしきい値に達すると、オペレーティングシステムキャッシュの内容がディスクにフラッシュされます。 デフォルト値の 0 では、デフォルトの動作が強制されます。つまり、ファイルがキャッシュに完全に書き込まれた後にのみ、データがディスクにフラッシュされます。
複数の MySQL インスタンスが同じストレージデバイスを使用している場合は、より小さい定期的なフラッシュを強制的に実行するためのしきい値を指定すると有益です。 たとえば、新しい MySQL インスタンスとそれに関連付けられたデータファイルを作成すると、ディスク書込みアクティビティが大きくなり、同じストレージデバイスを使用する他の MySQL インスタンスのパフォーマンスが低下する可能性があります。 しきい値を構成すると、書込みアクティビティでのこのようなサージの回避に役立ちます。
システム変数 | innodb_ft_aux_table |
---|---|
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | 文字列 |
FULLTEXT
インデックスを含む InnoDB
テーブルの修飾名を指定します。 この変数は診断のために使用され、実行時にのみ設定できます。 例:
SET GLOBAL innodb_ft_aux_table = 'test/t1';
この変数を
形式の名前に設定すると、db_name
/table_name
INFORMATION_SCHEMA
テーブル INNODB_FT_INDEX_TABLE
, INNODB_FT_INDEX_CACHE
, INNODB_FT_CONFIG
, INNODB_FT_DELETED
および INNODB_FT_BEING_DELETED
に、指定したテーブルの検索インデックスに関する情報が表示されます。
詳細は、セクション15.15.4「InnoDB INFORMATION_SCHEMA FULLTEXT インデックステーブル」を参照してください。
コマンド行形式 | --innodb-ft-cache-size=# |
---|---|
システム変数 | innodb_ft_cache_size |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 8000000 |
最小値 | 1600000 |
最大値 | 80000000 |
InnoDB
FULLTEXT
検索インデックスキャッシュに割り当てられたメモリー (バイト単位)。これは、InnoDB
FULLTEXT
インデックスの作成時にメモリー内に解析済ドキュメントを保持します。 innodb_ft_cache_size
のサイズ制限に達すると、インデックスの挿入および更新のみがディスクにコミットされます。innodb_ft_cache_size
では、キャッシュサイズがテーブルごとに定義されます。 すべてのテーブルにグローバルな制限を設定する方法については、innodb_ft_total_cache_size
を参照してください。
詳細は、InnoDB 全文インデックスキャッシュを参照してください。
コマンド行形式 | --innodb-ft-enable-diag-print[={OFF|ON}] |
---|---|
システム変数 | innodb_ft_enable_diag_print |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
追加の全文検索 (FTS) 診断の出力を有効にするかどうかを指定します。 このオプションは主に高度な FTS デバッグを目的としており、ほとんどのユーザーにとって重要ではありません。 出力はエラーログに記録され、次のような情報が含まれています。
FTS インデックス同期の進行状況 (FTS キャッシュ制限に達したとき)。 例:
FTS SYNC for table test, deleted count: 100 size: 10000 bytes SYNC words: 100
FTS 最適化の進行状況。 例:
FTS start optimize test FTS_OPTIMIZE: optimize "mysql" FTS_OPTIMIZE: processed "mysql"
FTS インデックス構築の進行状況。 例:
Number of doc processed: 1000
FTS クエリーでは、クエリー解析のツリー、単語の重み、クエリーの処理時間、およびメモリーの使用状況が出力されます。 例:
FTS Search Processing time: 1 secs: 100 millisec: row(s) 10000 Full Search Memory: 245666 (bytes), Row: 10000
コマンド行形式 | --innodb-ft-enable-stopword[={OFF|ON}] |
---|---|
システム変数 | innodb_ft_enable_stopword |
スコープ | グローバル、セッション |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
インデックスの作成時に、一連のストップワードが InnoDB
の FULLTEXT
インデックスに関連付けられることを指定します。 innodb_ft_user_stopword_table
オプションが設定されている場合は、そのテーブルからストップワードが取得されます。 そうでなければ、innodb_ft_server_stopword_table
オプションが設定されている場合は、そのテーブルからストップワードが取得されます。 それ以外の場合は、組み込みのデフォルトストップワードセットが使用されます。
詳細は、セクション12.10.4「全文ストップワード」を参照してください。
コマンド行形式 | --innodb-ft-max-token-size=# |
---|---|
システム変数 | innodb_ft_max_token_size |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 84 |
最小値 | 10 |
最大値 | 84 |
InnoDB
FULLTEXT
インデックスに格納される単語の最大文字長。 この値に制限を設定すると、実在の単語ではなく、検索語句になる可能性の低い英字の任意のコレクションや長いキーワードが省略されることで、インデックスのサイズが削減されるため、クエリーの速度が上がります。
詳細は、セクション12.10.6「MySQL の全文検索の微調整」を参照してください。
コマンド行形式 | --innodb-ft-min-token-size=# |
---|---|
システム変数 | innodb_ft_min_token_size |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 3 |
最小値 | 0 |
最大値 | 16 |
InnoDB
FULLTEXT
インデックスに格納される単語の最小長。 この値を大きくすると、英語の 「a」 や 「to」 などの検索コンテキストで重要ではない一般的な単語が省略されるため、インデックスのサイズが減り、クエリーが高速化されます。 内容で CJK (中国語、日本語、韓国語) 文字セットが使用されている場合は、値 1 を指定します。
詳細は、セクション12.10.6「MySQL の全文検索の微調整」を参照してください。
コマンド行形式 | --innodb-ft-num-word-optimize=# |
---|---|
システム変数 | innodb_ft_num_word_optimize |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 2000 |
最小値 | 1000 |
最大値 | 10000 |
InnoDB
の FULLTEXT
インデックスでの各 OPTIMIZE TABLE
操作時に処理される単語数です。 全文検索インデックスを含むテーブルへの一括挿入または一括更新操作では、すべての変更を組み込むために大量のインデックスのメンテナンスが必要となる可能性があるため、それぞれが最後に終了した場所から再開する一連の OPTIMIZE TABLE
ステートメントを実行するとよいでしょう。
詳細は、セクション12.10.6「MySQL の全文検索の微調整」を参照してください。
コマンド行形式 | --innodb-ft-result-cache-limit=# |
---|---|
システム変数 | innodb_ft_result_cache_limit |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 2000000000 |
最小値 | 1000000 |
最大値 | 2**32-1 |
全文検索クエリーまたはスレッド当たりの InnoDB
全文検索クエリーの結果キャッシュ制限 (バイト単位で定義)。 中間および最終的な InnoDB
全文検索クエリー結果はメモリー内で処理されます。 innodb_ft_result_cache_limit
を使用して全文検索のクエリー結果キャッシュにサイズ制限を設定し、InnoDB
全文検索のクエリー結果が非常に大きい場合 (数百万行や数百万行など) にメモリーを過剰に消費しないようにします。 全文検索クエリーの処理時に、必要に応じてメモリーが割り当てられます。 結果のキャッシュサイズ制限に達すると、クエリーで最大限に許可されるメモリー量を超えたことを示すエラーが返されます。
すべてのプラットフォームタイプおよびビットサイズに対する innodb_ft_result_cache_limit
の最大値は、2**32-1 です。
innodb_ft_server_stopword_table
コマンド行形式 | --innodb-ft-server-stopword-table=db_name/table_name |
---|---|
システム変数 | innodb_ft_server_stopword_table |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | 文字列 |
デフォルト値 | NULL |
このオプションは、すべての InnoDB
テーブルに対応した独自の InnoDB
の FULLTEXT
インデックスストップワードリストを指定する際に使用されます。 特定の InnoDB
テーブルに独自のストップワードリストを構成するには、innodb_ft_user_stopword_table
を使用します。
の形式で、db_name
/table_name
innodb_ft_server_stopword_table
をストップワードリストを含むテーブルの名前に設定します。
innodb_ft_server_stopword_table
を構成する前に、ストップワードテーブルが存在する必要があります。FULLTEXT
インデックスを作成する前に、innodb_ft_enable_stopword
を有効にし、innodb_ft_server_stopword_table
オプションを構成する必要があります。
ストップワードテーブルは、value
という名前の単一の VARCHAR
カラムを含む InnoDB
テーブルである必要があります。
詳細は、セクション12.10.4「全文ストップワード」を参照してください。
コマンド行形式 | --innodb-ft-sort-pll-degree=# |
---|---|
システム変数 | innodb_ft_sort_pll_degree |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 2 |
最小値 | 1 |
最大値 | 32 |
search index の構築時に InnoDB
FULLTEXT
インデックスのテキストをインデックス付けおよびトークン化するためにパラレルで使用されるスレッドの数。
関連情報は、セクション15.6.2.4「InnoDB FULLTEXT インデックス」 および innodb_sort_buffer_size
を参照してください。
コマンド行形式 | --innodb-ft-total-cache-size=# |
---|---|
システム変数 | innodb_ft_total_cache_size |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 640000000 |
最小値 | 32000000 |
最大値 | 1600000000 |
すべてのテーブルの InnoDB
全文検索インデックスキャッシュに割り当てられた合計メモリー (バイト)。 FULLTEXT
検索インデックスを使用して多数のテーブルを作成すると、使用可能なメモリーの大部分が消費される可能性があります。innodb_ft_total_cache_size
では、過剰なメモリー消費を回避するために、すべての全文検索インデックスに対してグローバルメモリー制限を定義します。 インデックス操作によってグローバル制限に達すると、強制同期がトリガーされます。
詳細は、InnoDB 全文インデックスキャッシュを参照してください。
コマンド行形式 | --innodb-ft-user-stopword-table=db_name/table_name |
---|---|
システム変数 | innodb_ft_user_stopword_table |
スコープ | グローバル、セッション |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | 文字列 |
デフォルト値 | NULL |
このオプションは、特定のテーブルに独自の InnoDB
の FULLTEXT
インデックスストップワードリストを指定する際に使用されます。 すべての InnoDB
テーブル用に独自のストップワードリストを構成するには、innodb_ft_server_stopword_table
を使用します。
の形式で、db_name
/table_name
innodb_ft_user_stopword_table
をストップワードリストを含むテーブルの名前に設定します。
innodb_ft_user_stopword_table
を構成する前に、ストップワードテーブルが存在する必要があります。FULLTEXT
インデックスを作成する前に、innodb_ft_enable_stopword
を有効にし、innodb_ft_user_stopword_table
を構成する必要があります。
ストップワードテーブルは、value
という名前の単一の VARCHAR
カラムを含む InnoDB
テーブルである必要があります。
詳細は、セクション12.10.4「全文ストップワード」を参照してください。
コマンド行形式 | --innodb-idle-flush-pct=# |
---|---|
導入 | 8.0.18 |
システム変数 | innodb_idle_flush_pct |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 100 |
最小値 | 0 |
最大値 | 100 |
InnoDB
がアイドル状態の場合のページフラッシュを制限します。 innodb_idle_flush_pct
値は、InnoDB
で使用可能な I/O 操作数/秒を定義する innodb_io_capacity
設定の割合です。 詳細は、アイドル期間中のバッファフラッシュの制限を参照してください。
コマンド行形式 | --innodb-io-capacity=# |
---|---|
システム変数 | innodb_io_capacity |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 200 |
最小値 | 100 |
最大値 (64 ビットプラットフォーム) | 2**64-1 |
最大値 (32 ビットプラットフォーム) | 2**32-1 |
innodb_io_capacity
変数は、buffer pool からの flushing ページや change buffer からのデータのマージなど、InnoDB
バックグラウンドタスクで使用可能な秒当たりの I/O 操作数 (IOPS) を定義します。
innodb_io_capacity
変数の構成の詳細は、セクション15.8.7「InnoDB I/O Capacity の構成」 を参照してください。
コマンド行形式 | --innodb-io-capacity-max=# |
---|---|
システム変数 | innodb_io_capacity_max |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | see description |
最小値 | 100 |
最大値 (32 ビットプラットフォーム) | 2**32-1 |
最大値 (Unix, 64 ビットプラットフォーム) | 2**64-1 |
最大値 (Windows, 64 ビットプラットフォーム) | 2**32-1 |
フラッシュアクティビティが遅れている場合、InnoDB
は innodb_io_capacity
変数で定義されているよりも高い速度の I/O 操作/秒 (IOPS) で、より積極的にフラッシュできます。 innodb_io_capacity_max
変数は、このような状況で InnoDB
バックグラウンドタスクによって実行される IOPS の最大数を定義します。
innodb_io_capacity_max
変数の構成の詳細は、セクション15.8.7「InnoDB I/O Capacity の構成」 を参照してください。
innodb_limit_optimistic_insert_debug
コマンド行形式 | --innodb-limit-optimistic-insert-debug=# |
---|---|
システム変数 | innodb_limit_optimistic_insert_debug |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 0 |
最小値 | 0 |
最大値 | 2**32-1 |
B-tree ページ当たりのレコード数を制限します。 デフォルト値 0 は、制限が課されないことを意味します。 このオプションは、デバッグサポートが WITH_DEBUG
CMake オプションを使用してコンパイルされている場合にのみ使用できます。
コマンド行形式 | --innodb-lock-wait-timeout=# |
---|---|
システム変数 | innodb_lock_wait_timeout |
スコープ | グローバル、セッション |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 50 |
最小値 | 1 |
最大値 | 1073741824 |
行ロックが解除されるまで InnoDB
トランザクションが待機する時間の長さ (秒単位) です。 デフォルト値は 50 秒です。 別の InnoDB
トランザクションでロックされている行へのアクセスを試みるトランザクションは、行への書き込みアクセスを最大でこの秒数間待機してから、次のエラーを発行します。
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
ロック待機のタイムアウトが発生すると、(トランザクション全体ではなく) 現在のステートメントがロールバックされます。 トランザクション全体をロールバックするには、--innodb-rollback-on-timeout
オプションを使用してサーバーを起動します。 セクション15.21.4「InnoDB のエラー処理」も参照してください。
高度にインタラクティブなアプリケーションまたは OLTP システムでは、ユーザーのフィードバックをすばやく表示したり、あとで処理するために更新をキューに入れたりするために、この値を小さくするとよいでしょう。 長時間実行されるバックエンド操作 (その他の大規模な挿入操作や更新操作が完了するまで待機するデータウェアハウスでの変換ステップなど) では、この値を大きくするとよいでしょう。
innodb_lock_wait_timeout
は、InnoDB
の行ロックに適用されます。 MySQL のテーブルロックは InnoDB
内部では発生せず、このタイムアウトはテーブルロックの待機には適用されません。
InnoDB
ではデッドロックが即時に検出され、デッドロックされたトランザクションのいずれかがロールバックされるため、innodb_deadlock_detect
が有効な場合 (デフォルト)、ロック待機タイムアウト値は deadlocks には適用されません。 innodb_deadlock_detect
が無効になっている場合、InnoDB
はデッドロック発生時のトランザクションロールバックを innodb_lock_wait_timeout
に依存します。 セクション15.7.5.2「デッドロック検出」を参照してください。
innodb_lock_wait_timeout
は、実行時に SET GLOBAL
または SET SESSION
ステートメントとともに設定できます。 GLOBAL
設定を変更するには、グローバルシステム変数を設定するのに十分な権限 (セクション5.1.9.1「システム変数権限」 を参照) が必要であり、その後接続するすべてのクライアントの操作に影響します。 任意のクライアントが innodb_lock_wait_timeout
の SESSION
設定を変更でき、そのクライアントのみが影響を受けます。
コマンド行形式 | --innodb-log-buffer-size=# |
---|---|
システム変数 | innodb_log_buffer_size |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 16777216 |
最小値 | 1048576 |
最大値 | 4294967295 |
ディスク上のログファイルに書き込む際に InnoDB
で使用されるバッファーのサイズ (バイト単位) です。 デフォルトは 16M バイトです。 大規模な log buffer では、トランザクション commit の前にログをディスクに書き込むことなく、大規模な transactions を実行できます。 したがって、多数の行を更新、挿入、または削除するトランザクションの場合、ログバッファーを大きくすると、ディスク I/O を節約できます。 関連情報については、メモリー構成,およびセクション8.5.4「InnoDB redo ロギングの最適化」を参照してください。 一般的な I/O チューニングのアドバイスについては、セクション8.5.8「InnoDB ディスク I/O の最適化」を参照してください。
innodb_log_checkpoint_fuzzy_now
コマンド行形式 | --innodb-log-checkpoint-fuzzy-now[={OFF|ON}] |
---|---|
導入 | 8.0.13 |
システム変数 | innodb_log_checkpoint_fuzzy_now |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
InnoDB
にファジーチェックポイントの書込みを強制するには、このデバッグオプションを有効にします。 このオプションは、デバッグサポートが WITH_DEBUG
CMake オプションを使用してコンパイルされている場合にのみ使用できます。
コマンド行形式 | --innodb-log-checkpoint-now[={OFF|ON}] |
---|---|
システム変数 | innodb_log_checkpoint_now |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
InnoDB
にチェックポイントの書込みを強制するには、このデバッグオプションを有効にします。 このオプションは、デバッグサポートが WITH_DEBUG
CMake オプションを使用してコンパイルされている場合にのみ使用できます。
コマンド行形式 | --innodb-log-checksums[={OFF|ON}] |
---|---|
システム変数 | innodb_log_checksums |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
redo ログページのチェックサムを有効または無効にします。
innodb_log_checksums=ON
では、redo ログページの CRC-32C
チェックサムアルゴリズムを有効にします。 innodb_log_checksums
が無効な場合、redo ログページのチェックサムフィールドの内容は無視されます。
redo ログヘッダーページおよび redo ログチェックポイントページのチェックサムは無効化されません。
コマンド行形式 | --innodb-log-compressed-pages[={OFF|ON}] |
---|---|
システム変数 | innodb_log_compressed_pages |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
re-compressed pages のイメージを redo log に書き込むかどうかを指定します。 圧縮されたデータが変更されると、再圧縮が発生する場合があります。
innodb_log_compressed_pages
は、リカバリ時に異なるバージョンの zlib
圧縮アルゴリズムが使用された場合に発生する可能性がある破損を防ぐために、デフォルトで有効になっています。 zlib
のバージョンが変更されないことが確実な場合は、innodb_log_compressed_pages
を無効にして、圧縮データを変更するワークロードの redo ログ生成を減らすことができます。
innodb_log_compressed_pages
の有効化または無効化の影響を測定するには、同じワークロードで両方の設定の redo ログ生成を比較します。 redo ログ生成の測定オプションには、SHOW ENGINE INNODB STATUS
出力の LOG
セクションでの Log sequence number
(LSN) の監視、または redo ログファイルに書き込まれたバイト数の Innodb_os_log_written
ステータスの監視が含まれます。
関連情報については、セクション15.9.1.6「OLTP ワークロードの圧縮」を参照してください。
コマンド行形式 | --innodb-log-file-size=# |
---|---|
システム変数 | innodb_log_file_size |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 50331648 |
最小値 | 4194304 |
最大値 | 512GB / innodb_log_files_in_group |
ロググループ内の各ログファイルのサイズ (バイト単位) です。 ログファイルを結合したサイズ (innodb_log_file_size
* innodb_log_files_in_group
) は、512G バイトよりもわずかに小さい最大値を上回ることができません。 たとえば、255 GB のログファイルのペアは制限に近づいていますが、それを超えていません。 デフォルト値は 48M バイトです。
一般に、ログファイルの合計サイズは、サーバーがワークロードアクティビティのピークおよびトラブルをスムーズにできる十分な大きさである必要があります。これは、書込みアクティビティを 1 時間以上処理するための十分な redo ログ領域があることを意味することがよくあります。 この値が大きいほど、バッファプールで必要なチェックポイントフラッシュアクティビティが少なくなり、ディスク I/O が節約されます。 ログファイルが大きいほど、crash recovery も遅くなります。
最小の innodb_log_file_size
は 4MB です。
関連情報については、redo ログファイル構成を参照してください。 一般的な I/O チューニングのアドバイスについては、セクション8.5.8「InnoDB ディスク I/O の最適化」を参照してください。
innodb_dedicated_server
が有効な場合、innodb_log_file_size
値は明示的に定義されていなければ自動的に構成されます。 詳細は、セクション15.8.12「専用 MySQL Server の自動構成の有効化」を参照してください。
コマンド行形式 | --innodb-log-files-in-group=# |
---|---|
システム変数 | innodb_log_files_in_group |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 2 |
最小値 | 2 |
最大値 | 100 |
ロググループ内のログファイルの数です。 InnoDB
はファイルに輪状に書き込みをします。 デフォルト (推奨) 値は 2 です。 ファイルの場所は、innodb_log_group_home_dir
によって指定されます。 ログファイルを結合したサイズ (innodb_log_file_size
* innodb_log_files_in_group
) は、最大で 512G バイトにすることができます。
関連情報については、redo ログファイル構成を参照してください。
コマンド行形式 | --innodb-log-group-home-dir=dir_name |
---|---|
システム変数 | innodb_log_group_home_dir |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | ディレクトリ名 |
InnoDB
の Redo ログファイルへのディレクトリパスです。この数は、innodb_log_files_in_group
で指定されます。 どの InnoDB
ログ変数も指定しない場合は、デフォルトで、MySQL データディレクトリ内に ib_logfile0
および ib_logfile1
という名前の 2 つのファイルが作成されます。 ログファイルのサイズは、innodb_log_file_size
システム変数によって指定されます。
関連情報については、redo ログファイル構成を参照してください。
コマンド行形式 | --innodb-log-spin-cpu-abs-lwm=# |
---|---|
システム変数 | innodb_log_spin_cpu_abs_lwm |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 80 |
最小値 | 0 |
最大値 | 4294967295 |
フラッシュされた redo の待機中にユーザースレッドがスピンしなくなる CPU 使用率の最小量を定義します。 この値は、CPU コア使用率の合計として表されます。 たとえば、80 のデフォルト値は、単一の CPU コアの 80% です。 マルチコアプロセッサを搭載したシステムでは、150 の値は、1 つの CPU コアの 100% 使用率と 2 つ目の CPU コアの 50% 使用率を表します。
関連情報については、セクション8.5.4「InnoDB redo ロギングの最適化」を参照してください。
コマンド行形式 | --innodb-log-spin-cpu-pct-hwm=# |
---|---|
システム変数 | innodb_log_spin_cpu_pct_hwm |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 50 |
最小値 | 0 |
最大値 | 100 |
フラッシュされた redo の待機中にユーザースレッドがスピンしなくなる CPU 使用率の最大量を定義します。 この値は、すべての CPU コアの合計処理能力の割合として表されます。 デフォルト値は 50% です。 たとえば、2 つの CPU コアの 100% 使用率は、4 つの CPU コアを持つサーバーでの CPU 処理能力の合計の 50% です。
innodb_log_spin_cpu_pct_hwm
変数は、プロセッサアフィニティを考慮します。 たとえば、サーバーに 48 個のコアがあり、mysqld プロセスが 4 個の CPU コアにのみ固定されている場合、他の 44 個の CPU コアは無視されます。
関連情報については、セクション8.5.4「InnoDB redo ロギングの最適化」を参照してください。
innodb_log_wait_for_flush_spin_hwm
コマンド行形式 | --innodb-log-wait-for-flush-spin-hwm=# |
---|---|
システム変数 | innodb_log_wait_for_flush_spin_hwm |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 400 |
最小値 | 0 |
最大値 (64 ビットプラットフォーム) | 2**64-1 |
最大値 (32 ビットプラットフォーム) | 2**32-1 |
フラッシュされた redo の待機中にユーザースレッドがスピンしなくなる最大平均ログフラッシュ時間を定義します。 デフォルト値は 400 マイクロ秒です。
関連情報については、セクション8.5.4「InnoDB redo ロギングの最適化」を参照してください。
コマンド行形式 | --innodb-log-write-ahead-size=# |
---|---|
システム変数 | innodb_log_write_ahead_size |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 8192 |
最小値 | 512 (log file block size) |
最大値 | Equal to innodb_page_size |
redo ログの先行書込みブロックサイズをバイト単位で定義します。 「read-on-write」 を回避するには、オペレーティングシステムまたはファイルシステムのキャッシュブロックサイズと一致するように innodb_log_write_ahead_size
を設定します。 デフォルト設定は 8192 バイトです。 読取り/書込みは、redo ログの先行書込みブロックサイズとオペレーティングシステムまたはファイルシステムのキャッシュブロックサイズが一致しないために、redo ログブロックがオペレーティングシステムまたはファイルシステムに完全にキャッシュされない場合に発生します。
innodb_log_write_ahead_size
の有効な値は、InnoDB
ログファイルのブロックサイズ (2 n) の倍数です。 最小値は、InnoDB
ログファイルのブロックサイズ (512) です。 最小値が指定されている場合、ライトアヘッドは発生しません。 最大値は innodb_page_size
値と同じです。 innodb_log_write_ahead_size
に innodb_page_size
値より大きい値を指定すると、innodb_log_write_ahead_size
設定は innodb_page_size
値に切り捨てられます。
オペレーティングシステムまたはファイルシステムのキャッシュブロックサイズに対する innodb_log_write_ahead_size
値の設定が低すぎると、「read-on-write」 が発生します。 値を高く設定しすぎると、一度に複数のブロックが書き込まれるため、ログファイル書込みの fsync
パフォーマンスにわずかな影響を与える可能性があります。
関連情報については、セクション8.5.4「InnoDB redo ロギングの最適化」を参照してください。
コマンド行形式 | --innodb-log-writer-threads[={OFF|ON}] |
---|---|
導入 | 8.0.22 |
システム変数 | innodb_log_writer_threads |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
ログバッファからシステムバッファに redo ログレコードを書き込み、システムバッファを redo ログファイルにフラッシュするための専用のログライタースレッドを有効にします。 専用ログライタースレッドを使用すると、同時実行性の高いシステムのパフォーマンスを向上させることができますが、同時実行性の低いシステムでは、専用ログライタースレッドを無効にすると、パフォーマンスが向上します。
詳細は、セクション8.5.4「InnoDB redo ロギングの最適化」を参照してください。
コマンド行形式 | --innodb-lru-scan-depth=# |
---|---|
システム変数 | innodb_lru_scan_depth |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 1024 |
最小値 | 100 |
最大値 (64 ビットプラットフォーム) | 2**64-1 |
最大値 (32 ビットプラットフォーム) | 2**32-1 |
InnoDB
のバッファープールでのフラッシュ操作のアルゴリズムおよびヒューリスティクスに影響を与えるパラメータです。 主に、I/O インテンシブなワークロードを調整するパフォーマンスの専門家が関心を持つものです。 バッファプールインスタンスごとに、フラッシュする dirty pages を検索するページクリーナスレッドスキャンをバッファプール LRU ページにリストする距離を指定します。 これは、1 秒に 1 回実行されるバックグラウンド操作です。
デフォルトより小さい設定は、通常、ほとんどのワークロードに適しています。 必要以上の値を指定すると、パフォーマンスに影響する可能性があります。 通常のワークロードでスペア I/O 容量がある場合のみ、値を増やすことを検討してください。 逆に、書込み集中型のワークロードが I/O の容量を満たしている場合は、特に大きなバッファプールの場合に値を減らします。
innodb_lru_scan_depth
をチューニングする場合は、小さい値から始めて、ゼロの空きページが表示されることがほとんどないという目標で設定を上方に構成します。 また、innodb_lru_scan_depth
* innodb_buffer_pool_instances
は毎秒ページクリーナスレッドによって実行される作業量を定義するため、バッファプールインスタンスの数を変更するときに innodb_lru_scan_depth
を調整することを検討してください。
関連情報については、セクション15.8.3.5「バッファープールのフラッシュの構成」を参照してください。 一般的な I/O チューニングのアドバイスについては、セクション8.5.8「InnoDB ディスク I/O の最適化」を参照してください。
コマンド行形式 | --innodb-max-dirty-pages-pct=# |
---|---|
システム変数 | innodb_max_dirty_pages_pct |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | 数値 |
デフォルト値 | 90 |
最小値 | 0 |
最大値 | 99.99 |
InnoDB
は、ダーティーページの割合がこの値を超えないように、バッファープールからデータをフラッシュしようと試みます。
innodb_max_dirty_pages_pct
設定は、フラッシュアクティビティーのターゲットを確立します。 フラッシュの頻度には影響を与えません。 フラッシュの頻度の管理については、セクション15.8.3.5「バッファープールのフラッシュの構成」を参照してください。
関連情報については、セクション15.8.3.5「バッファープールのフラッシュの構成」を参照してください。 一般的な I/O チューニングのアドバイスについては、セクション8.5.8「InnoDB ディスク I/O の最適化」を参照してください。
innodb_max_dirty_pages_pct_lwm
コマンド行形式 | --innodb-max-dirty-pages-pct-lwm=# |
---|---|
システム変数 | innodb_max_dirty_pages_pct_lwm |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | 数値 |
デフォルト値 | 10 |
最小値 | 0 |
最大値 | 99.99 |
ダーティページ率を制御するために事前フラッシュが有効になる dirty pages の割合を表す最低水位標を定義します。 値 0 を指定すると、事前フラッシュ動作が完全に無効になります。 詳細は、セクション15.8.3.5「バッファープールのフラッシュの構成」を参照してください。
コマンド行形式 | --innodb-max-purge-lag=# |
---|---|
システム変数 | innodb_max_purge_lag |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 0 |
最小値 | 0 |
最大値 | 4294967295 |
必要な最大パージラグを定義します。 この値を超えると、INSERT
、UPDATE
および DELETE
操作に遅延が課され、パージが捕捉されるまでの時間が許可されます。 デフォルト値は 0 です。これは、最大パージラグおよび遅延がないことを意味します。
詳細は、セクション15.8.9「パージ構成」を参照してください。
コマンド行形式 | --innodb-max-purge-lag-delay=# |
---|---|
システム変数 | innodb_max_purge_lag_delay |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 0 |
最小値 | 0 |
最大値 | 10000000 |
innodb_max_purge_lag
しきい値を超えた場合に課される遅延の最大遅延をマイクロ秒単位で指定します。 指定された innodb_max_purge_lag_delay
値は、innodb_max_purge_lag
式で計算された遅延期間の上限です。
詳細は、セクション15.8.9「パージ構成」を参照してください。
コマンド行形式 | --innodb-max-undo-log-size=# |
---|---|
システム変数 | innodb_max_undo_log_size |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 1073741824 |
最小値 | 10485760 |
最大値 | 2**64-1 |
undo テーブルスペースのしきい値サイズを定義します。 undo テーブルスペースがしきい値を超えると、innodb_undo_log_truncate
が有効になっているときに切り捨てられるようにマークできます。 デフォルト値は 1073741824 バイト (1024 MiB) です。
詳細は、undo テーブルスペースの切捨てを参照してください。
innodb_merge_threshold_set_all_debug
コマンド行形式 | --innodb-merge-threshold-set-all-debug=# |
---|---|
システム変数 | innodb_merge_threshold_set_all_debug |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 50 |
最小値 | 1 |
最大値 | 50 |
ディクショナリキャッシュに現在存在するすべてのインデックスの現在の MERGE_THRESHOLD
設定をオーバーライドするインデックスページのページフルパーセント値を定義します。 このオプションは、デバッグサポートが WITH_DEBUG
CMake オプションを使用してコンパイルされている場合にのみ使用できます。 関連情報については、セクション15.8.11「インデックスページのマージしきい値の構成」を参照してください。
コマンド行形式 | --innodb-monitor-disable={counter|module|pattern|all} |
---|---|
システム変数 | innodb_monitor_disable |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | 文字列 |
InnoDB
metrics counters を無効にします。 カウンタデータは INFORMATION_SCHEMA.INNODB_METRICS
テーブルを使用してクエリーすることができます。 使用法については、セクション15.15.6「InnoDB INFORMATION_SCHEMA メトリックテーブル」を参照してください。
innodb_monitor_disable='latch'
は、SHOW ENGINE INNODB MUTEX
の統計収集を無効にします。 詳細は、セクション13.7.7.15「SHOW ENGINE ステートメント」を参照してください。
コマンド行形式 | --innodb-monitor-enable={counter|module|pattern|all} |
---|---|
システム変数 | innodb_monitor_enable |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | 文字列 |
InnoDB
metrics counters を有効にします。 カウンタデータは INFORMATION_SCHEMA.INNODB_METRICS
テーブルを使用してクエリーすることができます。 使用法については、セクション15.15.6「InnoDB INFORMATION_SCHEMA メトリックテーブル」を参照してください。
innodb_monitor_enable='latch'
では、SHOW ENGINE INNODB MUTEX
の統計収集が可能です。 詳細は、セクション13.7.7.15「SHOW ENGINE ステートメント」を参照してください。
コマンド行形式 | --innodb-monitor-reset={counter|module|pattern|all} |
---|---|
システム変数 | innodb_monitor_reset |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | 列挙 |
デフォルト値 | empty string |
有効な値 |
|
InnoDB
metrics counters のカウント値をゼロにリセットします。 カウンタデータは INFORMATION_SCHEMA.INNODB_METRICS
テーブルを使用してクエリーすることができます。 使用法については、セクション15.15.6「InnoDB INFORMATION_SCHEMA メトリックテーブル」を参照してください。
innodb_monitor_reset='latch'
は、SHOW ENGINE INNODB MUTEX
によって報告された統計をリセットします。 詳細は、セクション13.7.7.15「SHOW ENGINE ステートメント」を参照してください。
コマンド行形式 | --innodb-monitor-reset-all={counter|module|pattern|all} |
---|---|
システム変数 | innodb_monitor_reset_all |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | 列挙 |
デフォルト値 | empty string |
有効な値 |
|
InnoDB
metrics counters のすべての値 (最小、最大など) をリセットします。 カウンタデータは INFORMATION_SCHEMA.INNODB_METRICS
テーブルを使用してクエリーすることができます。 使用法については、セクション15.15.6「InnoDB INFORMATION_SCHEMA メトリックテーブル」を参照してください。
コマンド行形式 | --innodb-numa-interleave[={OFF|ON}] |
---|---|
システム変数 | innodb_numa_interleave |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
NUMA インターリーブメモリーポリシーを有効にして、InnoDB
バッファプールを割り当てます。 innodb_numa_interleave
が有効な場合、NUMA メモリーポリシーは mysqld プロセスに対して MPOL_INTERLEAVE
に設定されます。 InnoDB
バッファプールが割り当てられると、NUMA メモリーポリシーは MPOL_DEFAULT
に戻されます。 innodb_numa_interleave
オプションを使用できるようにするには、NUMA 対応の Linux システムで MySQL をコンパイルする必要があります。
CMake では、現在のプラットフォームに NUMA
サポートがあるかどうかに基づいて、デフォルトの WITH_NUMA
値が設定されます。 詳細は、セクション2.9.7「MySQL ソース構成オプション」を参照してください。
コマンド行形式 | --innodb-old-blocks-pct=# |
---|---|
システム変数 | innodb_old_blocks_pct |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 37 |
最小値 | 5 |
最大値 | 95 |
古いブロックサブリストで使用される InnoDB
のバッファープールの概算割合を指定します。 値の範囲は 5 から 95 です。 デフォルト値は 37 (つまり、プールの 3/8 ) です。 多くの場合、innodb_old_blocks_time
と組み合わせて使用されます。
詳細は、セクション15.8.3.3「バッファープールをスキャンに耐えられるようにする」を参照してください。 バッファープールの管理、LRU アルゴリズム、および eviction ポリシーについては、セクション15.5.1「バッファプール」 を参照してください。
コマンド行形式 | --innodb-old-blocks-time=# |
---|---|
システム変数 | innodb_old_blocks_time |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 1000 |
最小値 | 0 |
最大値 | 2**32-1 |
ゼロ以外の値は、full table scan の実行中など、短い期間のみ参照されるデータによって入力される buffer pool から保護します。 この値を大きくすると、テーブルの完全スキャンがバッファープール内にキャッシュされたデータとやりとりすることからさらに保護されます。
新しいサブリストに移動する前に、古い sublist に挿入されたブロックが最初のアクセス後も保持される必要がある時間をミリ秒単位で指定します。 値を 0 にすると、古いサブリストに挿入されたブロックは、挿入後にどのくらいの期間でアクセスが発生するのかには関係なく、最初のアクセスの直後に新しいサブリストに移動します。 値が 0 より大きい場合、最初のアクセス後に少なくとも何ミリ秒もアクセスが発生するまで、ブロックは古いサブリストに残ります。 たとえば、1000 の値では、ブロックは最初のアクセス後、それらが新しいサブリストに移動される資格を得るまで、1 秒間古いサブリストにとどまります。
デフォルト値は 1000 です。
多くの場合、この変数は innodb_old_blocks_pct
と組み合わせて使用されます。 詳細は、セクション15.8.3.3「バッファープールをスキャンに耐えられるようにする」を参照してください。 バッファープールの管理、LRU アルゴリズム、および eviction ポリシーについては、セクション15.5.1「バッファプール」 を参照してください。
innodb_online_alter_log_max_size
コマンド行形式 | --innodb-online-alter-log-max-size=# |
---|---|
システム変数 | innodb_online_alter_log_max_size |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 134217728 |
最小値 | 65536 |
最大値 | 2**64-1 |
InnoDB
テーブルの online DDL 操作中に使用される一時ログファイルのサイズの上限をバイト単位で指定します。 作成されるインデックスまたは変更されるテーブルごとに、このようなログファイルが 1 つ存在します。 このログファイルには、DDL 操作時にテーブルで挿入、更新、または削除されたデータが格納されます。 一時ログファイルは、innodb_sort_buffer_size
の値で必要になったときに、最大で innodb_online_alter_log_max_size
で指定された最大値まで拡張されます。 一時ログファイルが上限サイズを超えると、ALTER TABLE
操作は失敗し、コミットされていないすべての同時 DML 操作がロールバックされます。 したがって、このオプションの値を大きくすると、オンライン DDL 操作中に発生する DML が増えますが、ログからデータを適用するためにテーブルがロックされているときの DDL 操作の終了時の期間も長くなります。
コマンド行形式 | --innodb-open-files=# |
---|---|
システム変数 | innodb_open_files |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | -1 (自動サイズ設定を示します。このリテラル値を割り当てないでください) |
最小値 | 10 |
最大値 | 4294967295 |
この変数は、複数の InnoDB
tablespaces を使用する場合にのみ関連します。 MySQL で一度に開いたままにできる .ibd
ファイルの最大数が指定されます。 最小値は 10 です。 デフォルト値は、innodb_file_per_table
が有効になっていない場合は 300 で、それ以外の場合は 300 以上および table_open_cache
です。
.ibd
ファイルで使用されるファイルディスクリプタは、InnoDB
テーブルでのみ使用されます。 これらは、open_files_limit
システム変数で指定されたものとは独立しており、テーブルキャッシュの操作には影響しません。 一般的な I/O チューニングのアドバイスについては、セクション8.5.8「InnoDB ディスク I/O の最適化」を参照してください。
コマンド行形式 | --innodb-optimize-fulltext-only[={OFF|ON}] |
---|---|
システム変数 | innodb_optimize_fulltext_only |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
InnoDB
テーブルでの OPTIMIZE TABLE
の動作方法を変更します。 FULLTEXT
インデックスを含む InnoDB
テーブルのメンテナンス操作時に、一時的に有効にするために使用されます。
デフォルトでは、OPTIMIZE TABLE
はテーブルの clustered index のデータを再編成します。 このオプションを有効にすると、OPTIMIZE TABLE
はテーブルデータの再編成をスキップし、かわりに InnoDB
FULLTEXT
インデックスに対して新しく追加、削除および更新されたトークンデータを処理します。 詳細は、InnoDB 全文インデックスの最適化を参照してください。
コマンド行形式 | --innodb-page-cleaners=# |
---|---|
システム変数 | innodb_page_cleaners |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 4 |
最小値 | 1 |
最大値 | 64 |
バッファープールインスタンスからダーティーページをフラッシュするページクリーナースレッドの数。 ページクリーナスレッドは、フラッシュリストおよび LRU フラッシュを実行します。 ページクリーナスレッドが複数ある場合、バッファプールインスタンスごとにバッファプールのフラッシュタスクがアイドル状態のページクリーナスレッドにディスパッチされます。 innodb_page_cleaners
のデフォルト値は 4 です。 ページクリーナスレッドの数がバッファプールインスタンスの数を超えると、innodb_page_cleaners
は自動的に innodb_buffer_pool_instances
と同じ値に設定されます。
ダーティページをバッファプールインスタンスからデータファイルにフラッシュするときにワークロードが書込み IO バインドされている場合、およびシステムハードウェアに使用可能な容量がある場合は、ページクリーナスレッドの数を増やすと書込み IO スループットの向上に役立つことがあります。
マルチスレッドページクリーナのサポートは、停止フェーズおよびリカバリフェーズまで拡張されています。
setpriority()
システムコールは、サポートされている Linux プラットフォームで使用され、mysqld 実行ユーザーが page_cleaner
スレッドに他の MySQL および InnoDB
スレッドよりも優先順位を与えることを認可されている場合、ページフラッシュが現在のワークロードに対応できるようにします。setpriority()
のサポートは、次の InnoDB
起動メッセージで示されます:
[Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
サーバーの起動および停止が systemd によって管理されていないシステムでは、/etc/security/limits.conf
で mysqld 実行ユーザー認可を構成できます。 たとえば、mysqld が mysql
ユーザーで実行されている場合、次の行を/etc/security/limits.conf
に追加することで mysql
ユーザーを認可できます:
mysql hard nice -20 mysql soft nice -20
systemd 管理対象システムの場合は、ローカライズされた systemd 構成ファイルで LimitNICE=-20
を指定することで同じことを実現できます。 たとえば、/etc/systemd/system/mysqld.service.d/override.conf
で override.conf
という名前のファイルを作成し、次のエントリを追加します:
[Service] LimitNICE=-20
override.conf
を作成または変更した後、systemd 構成をリロードし、MySQL サービスを再起動するように systemd に指示します:
systemctl daemon-reload systemctl restart mysqld # RPM platforms systemctl restart mysql # Debian platforms
ローカライズされた systemd 構成ファイルの使用の詳細は、MySQL の systemd の構成 を参照してください。
mysqld 実行ユーザーを認可した後、cat コマンドを使用して、mysqld プロセスに構成されている Nice
制限を確認します:
shell> cat /proc/mysqld_pid
/limits | grep nice
Max nice priority 18446744073709551596 18446744073709551596
コマンド行形式 | --innodb-page-size=# |
---|---|
システム変数 | innodb_page_size |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | 列挙 |
デフォルト値 | 16384 |
有効な値 |
|
InnoDB
tablespaces 用の page size を指定します。 値はバイト単位または KB 単位で指定できます。 たとえば、16K バイトのページサイズ値は 16384、16K バイト、または 16K と指定できます。
innodb_page_size
は、MySQL インスタンスの初期化前にのみ構成でき、後で変更することはできません。 値を指定しない場合、インスタンスはデフォルトのページサイズを使用して初期化されます。 セクション15.8.1「InnoDB の起動構成」を参照してください。
32KB と 64KB の両方のページサイズで、行の最大長は約 16000 バイトです。 innodb_page_size
が 32KB または 64KB に設定されている場合、ROW_FORMAT=COMPRESSED
はサポートされません。 innodb_page_size=32KB
の場合、エクステントサイズは 2MB です。 innodb_page_size=64KB
の場合、エクステントサイズは 4MB です。32KB または 64KB のページサイズを使用する場合は、innodb_log_buffer_size
を 16M (デフォルト) 以上に設定する必要があります。
デフォルトの 16KB ページサイズ以上は、workloads の広範囲、特にバルク更新を伴うテーブルスキャンおよび DML 操作を含むクエリーに適しています。 単一ページに多数の行が含まれている場合、競合が問題になる可能性がある多数の小さい書込みを含む OLTP ワークロードでは、ページサイズを小さくする方が効率的です。 ページを小さくすると、一般に小さなブロックサイズが使用される SSD ストレージデバイスの効率性が高くなる可能性もあります。 InnoDB
のページサイズをストレージデバイスのブロックサイズに近づけると、ディスクに再度書き込まれる未変更データの量が最小限になります。
最初のシステムテーブルスペースデータファイル (ibdata1
) の最小ファイルサイズは、innodb_page_size
の値によって異なります。 詳細は、innodb_data_file_path
オプションの説明を参照してください。
一般的な I/O チューニングのアドバイスについては、セクション8.5.8「InnoDB ディスク I/O の最適化」を参照してください。
コマンド行形式 | --innodb-parallel-read-threads=# |
---|---|
導入 | 8.0.14 |
システム変数 | innodb_parallel_read_threads |
スコープ | セッション |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 4 |
最小値 | 1 |
最大値 | 256 |
パラレルクラスタインデックス読取りに使用できるスレッドの数を定義します。 パーティションのパラレルスキャンは、MySQL 8.0.17 でサポートされています。 パラレル読取りスレッドを使用すると、CHECK TABLE
のパフォーマンスを向上できます。 InnoDB
は、CHECK TABLE
操作中にクラスタ化されたインデックスを 2 回読み取ります。 2 番目の読取りはパラレルで実行できます。 この機能は、セカンダリインデックススキャンには適用されません。 パラレルクラスタインデックス読取りを実行するには、innodb_parallel_read_threads
セッション変数を 1 より大きい値に設定する必要があります。 パラレルクラスタインデックス読取りの実行に使用されるスレッドの実際の数は、innodb_parallel_read_threads
設定またはスキャンするインデックスサブツリーの数 (いずれか小さい方) によって決まります。 スキャン中にバッファープールに読み取られたページは、空きバッファープールページが必要なときにすぐに破棄できるように、バッファープール LRU リストの末尾に保持されます。
MySQL 8.0.17 では、パラレル読取りスレッドの最大数 (256) は、すべてのクライアント接続のスレッドの合計数です。 スレッド制限に達すると、接続は単一スレッドの使用にフォールバックします。
コマンド行形式 | --innodb-print-all-deadlocks[={OFF|ON}] |
---|---|
システム変数 | innodb_print_all_deadlocks |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
このオプションを有効にすると、mysqld
エラーログに、InnoDB
のユーザートランザクション内のすべてのデッドロックに関する情報が記録されます。 それ以外の場合は、SHOW ENGINE INNODB STATUS
コマンドを使用すると、最後のデッドロックに関する情報のみが表示されます。 状況は InnoDB
によってただちに検出され、いずれかのトランザクションが自動的にロールバックされるため、場合によっては InnoDB
デッドロックは必ずしも問題ではありません。 このオプションを使用して、ロールバックを検出してその操作を再試行するための適切なエラー処理ロジックがアプリケーションにない場合にデッドロックが発生する理由をトラブルシューティングできます。 多数のデッドロックが発生する場合は、各トランザクションが同じ順序でテーブルにアクセスするように (これにより、デッドロックの状況が回避されます)、複数のテーブルに対して DML または SELECT ... FOR UPDATE
ステートメントを発行するトランザクションを再構築する必要があることを示している可能性があります。
関連情報については、セクション15.7.5「InnoDB のデッドロック」を参照してください。
コマンド行形式 | --innodb-print-ddl-logs[={OFF|ON}] |
---|---|
システム変数 | innodb_print_ddl_logs |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
このオプションを有効にすると、MySQL は DDL ログを stderr
に書き込みます。 詳細は、DDL ログの表示を参照してください。
コマンド行形式 | --innodb-purge-batch-size=# |
---|---|
システム変数 | innodb_purge_batch_size |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 300 |
最小値 | 1 |
最大値 | 5000 |
history list から一度に解析および処理をパージする undo ログページの数を定義します。 マルチスレッドパージ構成では、コーディネータパージスレッドは innodb_purge_batch_size
を innodb_purge_threads
で除算し、その数のページを各パージスレッドに割り当てます。 innodb_purge_batch_size
変数では、undo ログを 128 回反復するたびに消去する undo ログページの数も定義されます。
innodb_purge_batch_size
オプションは、innodb_purge_threads
設定と組み合せた高度なパフォーマンスチューニングを目的としています。 ほとんどのユーザーは、innodb_purge_batch_size
をデフォルト値から変更する必要はありません。
関連情報については、セクション15.8.9「パージ構成」を参照してください。
コマンド行形式 | --innodb-purge-threads=# |
---|---|
システム変数 | innodb_purge_threads |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 4 |
最小値 | 1 |
最大値 | 32 |
InnoDB
purge 操作専用のバックグラウンドスレッドの数。 この値を大きくすると、追加のパージスレッドが作成されるため、DML 操作が複数のテーブルで実行されるシステムの効率が向上します。
関連情報については、セクション15.8.9「パージ構成」を参照してください。
innodb_purge_rseg_truncate_frequency
コマンド行形式 | --innodb-purge-rseg-truncate-frequency=# |
---|---|
システム変数 | innodb_purge_rseg_truncate_frequency |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 128 |
最小値 | 1 |
最大値 | 128 |
パージが起動された回数に関して、パージシステムがロールバックセグメントを解放する頻度を定義します。 undo テーブルスペースは、ロールバックセグメントが解放されるまで切り捨てられません。 通常、パージシステムは、パージが起動される 128 回ごとにロールバックセグメントを解放します。 デフォルト値は 128 です。 この値を減らすと、パージスレッドがロールバックセグメントを解放する頻度が高くなります。
innodb_purge_rseg_truncate_frequency
は、innodb_undo_log_truncate
での使用を目的としています。 詳細は、undo テーブルスペースの切捨てを参照してください。
コマンド行形式 | --innodb-random-read-ahead[={OFF|ON}] |
---|---|
システム変数 | innodb_random_read_ahead |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
InnoDB
の I/O を最適化するために、ランダムな先読み技術を有効にします。
様々なタイプの先読みリクエストのパフォーマンスに関する考慮事項の詳細は、セクション15.8.3.4「InnoDB バッファープールのプリフェッチ (先読み) の構成」 を参照してください。 一般的な I/O チューニングのアドバイスについては、セクション8.5.8「InnoDB ディスク I/O の最適化」を参照してください。
コマンド行形式 | --innodb-read-ahead-threshold=# |
---|---|
システム変数 | innodb_read_ahead_threshold |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 56 |
最小値 | 0 |
最大値 | 64 |
バッファープールにページをプリフェッチする際に InnoDB
で使用される線形の先読みの感度を制御します。 InnoDB
が少なくとも innodb_read_ahead_threshold
ページをエクステント (64 ページ) から連続して読み取る場合は、次のエクステント全体の非同期読み取りが開始されます。 許可される値の範囲は 0 から 64 までです。 値 0 は先読みを無効にします。 デフォルトの 56 では、InnoDB
は次のエクステント全体の非同期読み取りを開始するために、少なくとも 56 ページをエクステントから連続して読み取る必要があります。
先読みメカニズムを使用して読み取られるページの数と、アクセスされずにバッファープールから削除されるページの数を把握しておくと、innodb_read_ahead_threshold
設定を微調整する場合に役立ちます。 SHOW ENGINE INNODB STATUS
出力には、Innodb_buffer_pool_read_ahead
および Innodb_buffer_pool_read_ahead_evicted
のグローバルステータス変数からのカウンタ情報が表示されます。これらの変数は、先読みリクエストによって buffer pool に取り込まれたページ数と、アクセスされたことなくバッファプールから evicted のそのようなページ数をそれぞれレポートします。 ステータス変数は、最後のサーバー再起動以降のグローバル値を報告します。
SHOW ENGINE INNODB STATUS
には、先読みページが読み取られる速度と、そのようなページがアクセスされずに削除される速度も表示されます。 秒当たりの平均は、SHOW ENGINE INNODB STATUS
の最後の呼出し以降に収集された統計に基づき、SHOW ENGINE INNODB STATUS
出力の BUFFER POOL AND MEMORY
セクションに表示されます。
詳細は、セクション15.8.3.4「InnoDB バッファープールのプリフェッチ (先読み) の構成」を参照してください。 一般的な I/O チューニングのアドバイスについては、セクション8.5.8「InnoDB ディスク I/O の最適化」を参照してください。
コマンド行形式 | --innodb-read-io-threads=# |
---|---|
システム変数 | innodb_read_io_threads |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 4 |
最小値 | 1 |
最大値 | 64 |
InnoDB
での読み取り操作で使用される I/O スレッドの数です。 書き込みスレッドで対応するものは、innodb_write_io_threads
です。 詳細は、セクション15.8.5「InnoDB バックグラウンド I/O スレッドの数の構成」を参照してください。 一般的な I/O チューニングのアドバイスについては、セクション8.5.8「InnoDB ディスク I/O の最適化」を参照してください。
Linux システムでは、デフォルトの innodb_read_io_threads
設定で複数 (一般には 12 台よりも多く) の MySQL サーバーを実行すると、innodb_write_io_threads
および Linux の aio-max-nr
設定がシステムの制限を超過する可能性があります。 理想的には、aio-max-nr
設定を増やします。回避策として、いずれかまたは両方の MySQL 変数の設定を減らすことができます。
コマンド行形式 | --innodb-read-only[={OFF|ON}] |
---|---|
システム変数 | innodb_read_only |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
InnoDB
を読取り専用モードで起動します。 読み取り専用メディア上のデータベースアプリケーションまたはデータセットを配布するために使用されます。 複数のインスタンス間で同じデータディレクトリを共有する際に、データウェアハウスで使用することもできます。 詳細は、セクション15.8.2「読み取り専用操作用の InnoDB の構成」を参照してください。
以前は、innodb_read_only
システム変数を有効にすると、InnoDB
ストレージエンジンのテーブルの作成および削除のみができなくなりました。 MySQL 8.0 の時点では、innodb_read_only
を有効にすると、すべてのストレージエンジンでこれらの操作が防止されます。 ストレージエンジンのテーブルの作成および削除操作では、mysql
システムデータベース内のデータディクショナリテーブルが変更されますが、これらのテーブルは InnoDB
ストレージエンジンを使用するため、innodb_read_only
が有効になっている場合は変更できません。 データディクショナリテーブルの変更を必要とする他のテーブル操作にも、同じ原則が適用されます。 例:
innodb_read_only
システム変数が有効になっている場合、InnoDB
を使用するデータディクショナリの統計テーブルを更新できないため、ANALYZE TABLE
が失敗することがあります。 キー分散を更新する ANALYZE TABLE
操作では、操作によってテーブル自体が更新された場合でも (MyISAM
テーブルの場合など)、障害が発生する可能性があります。 更新された分散統計を取得するには、information_schema_stats_expiry=0
を設定します。
データディクショナリに格納されているストレージエンジンの指定が更新されるため、ALTER TABLE
は失敗します。
tbl_name
ENGINE=engine_name
また、mysql
システムデータベースの他のテーブルでは、MySQL 8.0 の InnoDB
ストレージエンジンが使用されます。 これらのテーブルを読取り専用にすると、テーブルを変更する操作が制限されます。 例:
付与テーブルで InnoDB
が使用されているため、CREATE USER
や GRANT
などのアカウント管理ステートメントは失敗します。
mysql.plugin
システムテーブルで InnoDB
が使用されているため、INSTALL PLUGIN
および UNINSTALL PLUGIN
プラグイン管理ステートメントは失敗します。
mysql.func
システムテーブルで InnoDB
が使用されているため、CREATE FUNCTION
および DROP FUNCTION
UDF 管理ステートメントは失敗します。
コマンド行形式 | --innodb-redo-log-archive-dirs |
---|---|
導入 | 8.0.17 |
システム変数 | innodb_redo_log_archive_dirs |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | 文字列 |
デフォルト値 | NULL |
redo ログアーカイブファイルを作成できるラベル付きディレクトリを定義します。 複数のラベル付きディレクトリをセミコロン区切りリストで定義できます。 例:
innodb_redo_log_archive_dirs='label1:/backups1;label2:/backups2'
ラベルには任意の文字列を指定できますが、コロン (:) は使用できません。 空のラベルも使用できますが、この場合もコロン (:) が必要です。
パスを指定する必要があり、ディレクトリが存在する必要があります。 パスにはコロン (':') を含めることができますが、セミコロン (;) は使用できません。
コマンド行形式 | --innodb-redo-log-encrypt[={OFF|ON}] |
---|---|
システム変数 | innodb_redo_log_encrypt |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
InnoDB
data-at-rest encryption feature を使用して暗号化されたテーブルの redo ログデータの暗号化を制御します。 redo ログデータの暗号化は、デフォルトで無効になっています。 詳細は、redo ログの暗号化を参照してください。
コマンド行形式 | --innodb-replication-delay=# |
---|---|
システム変数 | innodb_replication_delay |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 0 |
最小値 | 0 |
最大値 | 4294967295 |
innodb_thread_concurrency
に到達した場合のレプリカサーバーのレプリケーションスレッド遅延 (ミリ秒)。
コマンド行形式 | --innodb-rollback-on-timeout[={OFF|ON}] |
---|---|
システム変数 | innodb_rollback_on_timeout |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
InnoDB
rolls back では、トランザクションタイムアウトの最後のステートメントのみがデフォルトで実行されます。 --innodb-rollback-on-timeout
が指定されている場合、トランザクションタイムアウトにより、InnoDB
はトランザクション全体を中断およびロールバックします。
詳細は、セクション15.21.4「InnoDB のエラー処理」を参照してください。
コマンド行形式 | --innodb-rollback-segments=# |
---|---|
システム変数 | innodb_rollback_segments |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 128 |
最小値 | 1 |
最大値 | 128 |
innodb_rollback_segments
では、undo レコードを生成するトランザクションに対して、各 undo テーブルスペースおよびグローバル一時テーブルスペースに割り当てられる rollback segments の数を定義します。 各ロールバックセグメントでサポートされるトランザクションの数は、InnoDB
のページサイズおよび各トランザクションに割り当てられた undo ログの数によって異なります。 詳細は、セクション15.6.6「undo ログ」を参照してください。
関連情報については、セクション15.3「InnoDB マルチバージョン」を参照してください。 undo テーブルスペースの詳細は、セクション15.6.3.4「undo テーブルスペース」 を参照してください。
innodb_saved_page_number_debug
コマンド行形式 | --innodb-saved-page-number-debug=# |
---|---|
システム変数 | innodb_saved_page_number_debug |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 0 |
最大値 | 2**23-1 |
ページ番号を保存します。 innodb_fil_make_page_dirty_debug
オプションを設定すると、innodb_saved_page_number_debug
で定義されたページがダーティになります。 innodb_saved_page_number_debug
オプションは、デバッグサポートが WITH_DEBUG
CMake オプションを使用してコンパイルされている場合にのみ使用できます。
コマンド行形式 | --innodb-sort-buffer-size=# |
---|---|
システム変数 | innodb_sort_buffer_size |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 1048576 |
最小値 | 65536 |
最大値 | 67108864 |
InnoDB
インデックスの作成時にデータのソートに使用されるソートバッファのサイズを指定します。 指定されたサイズは、内部ソートのためにメモリーに読み取られ、ディスクに書き込まれるデータの量を定義します。 このプロセスは 「run」 と呼ばれます。 マージフェーズでは、指定したサイズのバッファのペアが読み取られ、マージされます。 設定が大きいほど、実行数が少なくなり、マージされます。
このソート領域は、後続のインデックスのメンテナンス操作時ではなく、インデックスの作成時のマージソートでのみ使用されます。 インデックスの作成が完了すると、バッファーの割り当てが解除されます。
このオプションの値は、online DDL 操作中に同時 DML を記録するために一時ログファイルを拡張する量も制御します。
この設定を構成可能にする前は、サイズは 1048576 バイト (1MB) にハードコードされていましたが、これはデフォルトのままです。
インデックスを作成する ALTER TABLE
または CREATE TABLE
ステートメントの実行時に、それぞれが、このオプションで定義されたサイズを持つ 3 つのバッファーが割り当てられます。 さらに、ポインタ上でソートを実行できるように、ソートバッファー内の行に補助ポインタが割り当てられます (これは、ソート操作時の行の移動とは異なります)。
一般的なソート操作では、次のような式を使用してメモリー消費量を見積もることができます:
(6 /*FTS_NUM_AUX_INDEX*/ * (3*@@GLOBAL.innodb_sort_buffer_size) + 2 * number_of_partitions * number_of_secondary_indexes_created * (@@GLOBAL.innodb_sort_buffer_size/dict_index_get_min_size(index)*/) * 8 /*64-bit sizeof *buf->tuples*/")
@@GLOBAL.innodb_sort_buffer_size/dict_index_get_min_size(index)
は、保持される最大タプル数を示します。2 * (@@GLOBAL.innodb_sort_buffer_size/*dict_index_get_min_size(index)*/) * 8 /*64-bit size of *buf->tuples*/
は、割り当てられた補助ポインタを示します。
32 ビットの場合は、8 の代わりに 4 で乗算します。
全文インデックスでの並列ソートでは、innodb_ft_sort_pll_degree
の設定で乗算します。
(6 /*FTS_NUM_AUX_INDEX*/ * @@GLOBAL.innodb_ft_sort_pll_degree)
コマンド行形式 | --innodb-spin-wait-delay=# |
---|---|
システム変数 | innodb_spin_wait_delay |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 6 |
最小値 | 0 |
最大値 (64 ビットプラットフォーム, ≤ 8.0.13) | 2**64-1 |
最大値 (32 ビットプラットフォーム, ≤ 8.0.13) | 2**32-1 |
最大値 (≥ 8.0.14) | 1000 |
スピンロックでのポーリング間の最大遅延です。 このメカニズムの低レベルの実装は、ハードウェアとオペレーティングシステムの組み合わせによって異なるため、遅延は一定の時間間隔に対応しません。
スピンロックポーリング遅延の期間をより詳細に制御するために、innodb_spin_wait_pause_multiplier
変数と組み合せて使用できます。
詳細は、セクション15.8.8「スピンロックのポーリングの構成」を参照してください。
innodb_spin_wait_pause_multiplier
コマンド行形式 | --innodb-spin-wait-pause-multiplier=# |
---|---|
導入 | 8.0.16 |
システム変数 | innodb_spin_wait_pause_multiplier |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 50 |
最小値 | 1 |
最大値 | 100 |
スレッドが mutex または rw-lock の取得を待機するときに発生するスピン待機ループ内の PAUSE 命令の数を決定するために使用される乗数値を定義します。
詳細は、セクション15.8.8「スピンロックのポーリングの構成」を参照してください。
コマンド行形式 | --innodb-stats-auto-recalc[={OFF|ON}] |
---|---|
システム変数 | innodb_stats_auto_recalc |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
テーブル内のデータが大幅に変更されたあとは、InnoDB
によって自動的に永続的統計が再計算されます。 しきい値は、テーブルの行の 10% です。 この設定は、innodb_stats_persistent
オプションが有効な場合に作成されるテーブルに適用されます。 自動統計再計算は、CREATE TABLE
ステートメントまたは ALTER TABLE
ステートメントで STATS_PERSISTENT=1
を指定して構成することもできます。 統計を生成するためにサンプリングされるデータの量は、innodb_stats_persistent_sample_pages
変数によって制御されます。
詳細は、セクション15.8.10.1「永続的オプティマイザ統計のパラメータの構成」を参照してください。
innodb_stats_include_delete_marked
コマンド行形式 | --innodb-stats-include-delete-marked[={OFF|ON}] |
---|---|
システム変数 | innodb_stats_include_delete_marked |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
デフォルトでは、InnoDB
は統計の計算時にコミットされていないデータを読み取ります。 テーブルから行を削除するコミットされていないトランザクションの場合、InnoDB
では、行の見積りおよびインデックス統計の計算時に削除マークが付けられたレコードが除外されるため、READ UNCOMMITTED
以外のトランザクション分離レベルを使用してテーブルで同時に操作している他のトランザクションの実行計画が最適でなくなる可能性があります。 このシナリオを回避するために、innodb_stats_include_delete_marked
を有効にして、永続オプティマイザ統計の計算時に InnoDB
に削除マーク付きレコードが含まれるようにできます。
innodb_stats_include_delete_marked
が有効な場合、ANALYZE TABLE
では、統計の再計算時に削除マークが付けられたレコードが考慮されます。
innodb_stats_include_delete_marked
は、すべての InnoDB
テーブルに影響するグローバル設定です。 永続オプティマイザ統計にのみ適用されます。
関連情報については、セクション15.8.10.1「永続的オプティマイザ統計のパラメータの構成」を参照してください。
コマンド行形式 | --innodb-stats-method=value |
---|---|
システム変数 | innodb_stats_method |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | 列挙 |
デフォルト値 | nulls_equal |
有効な値 |
|
InnoDB
テーブルのインデックス値の分布に関する統計を収集するときに、サーバーが NULL
値を処理する方法です。 許可される値は、nulls_equal
、nulls_unequal
および nulls_ignored
です。 nulls_equal
の場合、すべての NULL
インデックス値は等しいとみなされ、NULL
値の数と等しいサイズの単一の値グループを形成します。 nulls_unequal
の場合、NULL
値同士を同等として扱わず、それぞれの NULL
はサイズが 1 の別個のグループを生成します。 nulls_ignored
の場合、NULL
値は無視されます。
テーブル統計の生成に使用される方法は、セクション8.3.8「InnoDB および MyISAM インデックス統計コレクション」 で説明されているように、オプティマイザがクエリーを実行するためにインデックスを選択する方法に影響します。
コマンド行形式 | --innodb-stats-on-metadata[={OFF|ON}] |
---|---|
システム変数 | innodb_stats_on_metadata |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
このオプションは、オプティマイザ statistics が非永続として構成されている場合にのみ適用されます。 オプティマイザ統計は、innodb_stats_persistent
が無効な場合、または STATS_PERSISTENT=0
を使用して個々のテーブルが作成または変更された場合、ディスクに永続化されません。 詳細は、セクション15.8.10.2「非永続的オプティマイザ統計のパラメータの構成」を参照してください。
innodb_stats_on_metadata
が有効になっている場合、SHOW TABLE STATUS
などのメタデータステートメントの場合、または INFORMATION_SCHEMA.TABLES
テーブルまたは INFORMATION_SCHEMA.STATISTICS
テーブルにアクセスする場合、InnoDB
は非永続 statistics を更新します。 (これらの更新は、ANALYZE TABLE
で実行されるものに似ています。) 無効にすると、これらの操作時に InnoDB
によって統計が更新されません。 この設定を無効のままにすると、多数のテーブルまたはインデックスを持つスキーマのアクセス速度を向上させることができます。 InnoDB
テーブルが関与するクエリーの実行計画の安定性も改善できます。
設定を変更するには、SET GLOBAL innodb_stats_on_metadata=
ステートメントを発行します。ここで、mode
は mode
ON
と OFF
のいずれか (または 1
と 0
のいずれか) です。 設定を変更するには、グローバルシステム変数を設定するのに十分な権限 (セクション5.1.9.1「システム変数権限」 を参照) が必要で、すべての接続の操作にすぐに影響します。
コマンド行形式 | --innodb-stats-persistent[={OFF|ON}] |
---|---|
システム変数 | innodb_stats_persistent |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
InnoDB
インデックス統計をディスクに永続化するかどうかを指定します。 それ以外の場合は、頻繁に統計が再計算される可能性があります。これにより、クエリーの実行計画が変化する可能性があります。 テーブルが作成されると、この設定が各テーブルとともに格納されます。 テーブルを作成する前にグローバルレベルで innodb_stats_persistent
を設定することも、CREATE TABLE
および ALTER TABLE
ステートメントで STATS_PERSISTENT
句を使用して、システム全体の設定をオーバーライドし、個々のテーブルの永続的統計を構成することもできます。
詳細は、セクション15.8.10.1「永続的オプティマイザ統計のパラメータの構成」を参照してください。
innodb_stats_persistent_sample_pages
コマンド行形式 | --innodb-stats-persistent-sample-pages=# |
---|---|
システム変数 | innodb_stats_persistent_sample_pages |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 20 |
インデックス付きカラムのカーディナリティーやその他の統計 (ANALYZE TABLE
で計算された統計など) を見積もるときに、サンプルとして取得されるインデックスページの数です。 値を大きくすると、クエリーの実行計画を改善するインデックス統計の精度が改善されますが、InnoDB
テーブルに対する ANALYZE TABLE
の実行時に I/O が増加することになります。 詳細は、セクション15.8.10.1「永続的オプティマイザ統計のパラメータの構成」を参照してください。
innodb_stats_persistent_sample_pages
に大きな値を設定すると、ANALYZE TABLE
の実行時間が長くなる可能性があります。 ANALYZE TABLE
によってアクセスされるデータベースページの数を見積もるには、セクション15.8.10.3「InnoDB テーブルに対する ANALYZE TABLE の複雑さの推定」 を参照してください。
innodb_stats_persistent_sample_pages
は、テーブルに対して innodb_stats_persistent
が有効になっている場合にのみ適用され、innodb_stats_persistent
が無効になっている場合は、かわりに innodb_stats_transient_sample_pages
が適用されます。
innodb_stats_transient_sample_pages
コマンド行形式 | --innodb-stats-transient-sample-pages=# |
---|---|
システム変数 | innodb_stats_transient_sample_pages |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 8 |
インデックス付きカラムのカーディナリティーやその他の統計 (ANALYZE TABLE
で計算された統計など) を見積もるときに、サンプルとして取得されるインデックスページの数です。 デフォルト値は 8 です。 値を大きくすると、インデックス統計の精度が改善されます。これにより、クエリーの実行計画を改善できますが、InnoDB
テーブルを開くときや統計を再計算するときに I/O が増加するという犠牲が伴います。 詳細は、セクション15.8.10.2「非永続的オプティマイザ統計のパラメータの構成」を参照してください。
innodb_stats_transient_sample_pages
に大きな値を設定すると、ANALYZE TABLE
の実行時間が長くなる可能性があります。 ANALYZE TABLE
によってアクセスされるデータベースページの数を見積もるには、セクション15.8.10.3「InnoDB テーブルに対する ANALYZE TABLE の複雑さの推定」 を参照してください。
innodb_stats_transient_sample_pages
は、テーブルに対して innodb_stats_persistent
が無効になっている場合にのみ適用され、innodb_stats_persistent
が有効になっている場合は、かわりに innodb_stats_persistent_sample_pages
が適用されます。 innodb_stats_sample_pages
のかわりに使用します。 詳細は、セクション15.8.10.2「非永続的オプティマイザ統計のパラメータの構成」を参照してください。
コマンド行形式 | --innodb-status-output[={OFF|ON}] |
---|---|
システム変数 | innodb_status_output |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
標準 InnoDB
モニターの定期出力を有効または無効にします。 また、InnoDB
Lock Monitor の定期的な出力を有効または無効にする際に、innodb_status_output_locks
と組み合わせて使用されます。 詳細は、セクション15.17.2「InnoDB モニターの有効化」を参照してください。
コマンド行形式 | --innodb-status-output-locks[={OFF|ON}] |
---|---|
システム変数 | innodb_status_output_locks |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
InnoDB
ロックモニターを有効または無効にします。 有効にすると、InnoDB
ロックモニターは、SHOW ENGINE INNODB STATUS
出力および MySQL エラーログに出力される定期的な出力にロックに関する追加情報を出力します。 InnoDB
ロックモニターの定期的な出力は、標準の InnoDB
モニター出力の一部として出力されます。 したがって、InnoDB
ロックモニターで MySQL エラーログに定期的にデータを出力するには、標準の InnoDB
モニターを有効にする必要があります。 詳細は、セクション15.17.2「InnoDB モニターの有効化」を参照してください。
コマンド行形式 | --innodb-strict-mode[={OFF|ON}] |
---|---|
システム変数 | innodb_strict_mode |
スコープ | グローバル、セッション |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
innodb_strict_mode
が有効になっている場合、InnoDB
は特定の条件に対して警告ではなくエラーを返します。
厳密モードは、SQL 内の無視できる誤字や構文エラー、または操作モードと SQL ステートメントのさまざまな組み合わせによる意図しないその他の結果から保護する際に役立ちます。 innodb_strict_mode
が有効になっている場合、InnoDB
では、警告を発行して指定されたステートメントを処理するのではなく (おそらく意図しない動作で)、特定のケースでエラー状態が発生します。 これは、MySQL で受け入れられる SQL 構文を制御し、警告なしでエラーを無視するのか、入力構文とデータ値を検証するのかを決定する MySQL の sql_mode
と類似しています。
innodb_strict_mode
設定は、CREATE TABLE
, ALTER TABLE
, CREATE INDEX
および OPTIMIZE TABLE
ステートメントの構文エラーの処理に影響します。innodb_strict_mode
ではレコードサイズチェックも有効になるため、INSERT
または UPDATE
は、選択したページサイズに対してレコードが大きすぎるために失敗することはありません。
CREATE TABLE
ステートメント、ALTER TABLE
ステートメントおよび CREATE INDEX
ステートメントで ROW_FORMAT
句および KEY_BLOCK_SIZE
句を使用する場合は、Oracle で innodb_strict_mode
を有効にすることをお薦めします。 innodb_strict_mode
が無効になっている場合、InnoDB
は競合する句を無視し、メッセージログに警告のみを表示してテーブルまたはインデックスを作成します。 結果のテーブルには、圧縮テーブルを作成しようとしたときの圧縮サポートの不足など、意図したものとは異なる特性がある場合があります。 innodb_strict_mode
が有効な場合、このような問題により即時エラーが生成され、テーブルまたはインデックスは作成されません。
innodb_strict_mode
は、mysqld
の起動時にコマンドラインで、または MySQL configuration file で有効または無効にできます。 SET [GLOBAL|SESSION] innodb_strict_mode=
ステートメントを使用して、実行時に mode
innodb_strict_mode
を有効または無効にすることもできます。ここで、
は mode
ON
または OFF
です。 GLOBAL
設定を変更するには、グローバルシステム変数を設定するのに十分な権限 (セクション5.1.9.1「システム変数権限」 を参照) が必要であり、その後接続するすべてのクライアントの操作に影響します。 任意のクライアントが innodb_strict_mode
の SESSION
設定を変更でき、そのクライアントのみが設定の影響を受けます。
innodb_strict_mode
は、general tablespaces には適用できません。 一般的なテーブルスペースのテーブルスペース管理ルールは、innodb_strict_mode
とは無関係に厳密に適用されます。 詳細は、セクション13.1.21「CREATE TABLESPACE ステートメント」を参照してください。
コマンド行形式 | --innodb-sync-array-size=# |
---|---|
システム変数 | innodb_sync_array_size |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 1 |
最小値 | 1 |
最大値 | 1024 |
mutex/lock 待機配列のサイズを定義します。 値を大きくすると、スレッドの調整に使用される内部データ構造が分割され、多数の待機スレッドを持つワークロードの同時実行性が向上します。 この設定は MySQL インスタンスの起動時に構成する必要があり、あとで変更することはできません。 頻繁に多数の待機スレッドを生成するワークロード (通常は 768 を超える) では、値を増やすことをお薦めします。
コマンド行形式 | --innodb-sync-spin-loops=# |
---|---|
システム変数 | innodb_sync_spin_loops |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 30 |
最小値 | 0 |
最大値 | 4294967295 |
スレッドが中断される前に、InnoDB
相互排他ロックが開放されるまでスレッドが待機する回数です。
コマンド行形式 | --innodb-sync-debug[={OFF|ON}] |
---|---|
システム変数 | innodb_sync_debug |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
InnoDB
ストレージエンジンの同期デバッグ検査を有効にします。 このオプションは、デバッグサポートが WITH_DEBUG
CMake オプションを使用してコンパイルされている場合にのみ使用できます。
コマンド行形式 | --innodb-table-locks[={OFF|ON}] |
---|---|
システム変数 | innodb_table_locks |
スコープ | グローバル、セッション |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
autocommit = 0
の要求を受け入れます。MySQL はすべてのスレッドがテーブルに対するすべてのロックを解放するまで、 の場合、
InnoDB は
LOCK TABLESLOCK TABLES ... WRITE
から戻りません。 innodb_table_locks
のデフォルト値は 1 です。これは、autocommit = 0
. の場合、LOCK TABLES
によって InnoDB がテーブルを内部的にロックすることを意味します。
innodb_table_locks = 0
は、LOCK TABLES ... WRITE
で明示的にロックされたテーブルには影響しません。 LOCK TABLES ... WRITE
で暗黙的に (たとえば、トリガーを使用して)、または LOCK TABLES ... READ
によって、読み取りまたは書き込み用にロックされたテーブルには有効です。
関連情報については、セクション15.7「InnoDB のロックおよびトランザクションモデル」を参照してください。
コマンド行形式 | --innodb-temp-data-file-path=file_name |
---|---|
システム変数 | innodb_temp_data_file_path |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | 文字列 |
デフォルト値 | ibtmp1:12M:autoextend |
グローバル一時テーブルスペースデータファイルの相対パス、名前、サイズおよび属性を定義します。 グローバル一時テーブルスペースには、ユーザー作成一時テーブルに対する変更のロールバックセグメントが格納されます。
innodb_temp_data_file_path
に値が指定されていない場合、デフォルトの動作では、ibtmp1
という名前の単一の自動拡張データファイルが innodb_data_home_dir
ディレクトリに作成されます。 初期ファイルサイズは 12MB を少し超えています。
グローバル一時テーブルスペースのデータファイル指定の構文には、ファイル名、ファイルサイズ、autoextend
および max
属性が含まれます:
file_name
:file_size
[:autoextend[:max:max_file_size
]]
グローバル一時テーブルスペースデータファイルには、別の InnoDB
データファイルと同じ名前を付けることはできません。 グローバル一時テーブルスペースデータファイルを作成できない場合やエラーが発生した場合は、致命的として扱われ、サーバーの起動は拒否されます。
ファイルサイズは、K
、M
または G
をサイズ値に追加することで、KB、MB または GB で指定します。 ファイルサイズの合計は、12MB より少し大きくする必要があります。
個々のファイルのサイズ制限は、オペレーティングシステムによって決まります。 大規模ファイルをサポートするオペレーティングシステムでは、ファイルサイズが 4GB を超える場合があります。 グローバル一時テーブルスペースデータファイルに対する RAW ディスクパーティションの使用はサポートされていません。
autoextend
および max
属性は、innodb_temp_data_file_path
設定で最後に指定されたデータファイルにのみ使用できます。 例:
[mysqld] innodb_temp_data_file_path=ibtmp1:50M;ibtmp2:12M:autoextend:max:500MB
autoextend
オプションを使用すると、データファイルの空き領域がなくなると、データファイルのサイズが自動的に増加します。 デフォルトでは、autoextend
の増分は 64MB です。 増分を変更するには、innodb_autoextend_increment
変数の設定を変更します。
グローバル一時テーブルスペースデータファイルのディレクトリパスは、innodb_data_home_dir
および innodb_temp_data_file_path
で定義されたパスを連結することによって形成されます。
InnoDB
を読取り専用モードで実行する前に、innodb_temp_data_file_path
をデータディレクトリ外の場所に設定します。 パスは、データディレクトリに対する相対パスである必要があります。 例:
--innodb-temp-data-file-path=../../../tmp/ibtmp1:12M:autoextend
詳細は、グローバル一時テーブルスペースを参照してください。
コマンド行形式 | --innodb-temp-tablespaces-dir=dir_name |
---|---|
導入 | 8.0.13 |
システム変数 | innodb_temp_tablespaces_dir |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | ディレクトリ名 |
デフォルト値 | #innodb_temp |
起動時に InnoDB
がセッション一時テーブルスペースのプールを作成する場所を定義します。 デフォルトの場所は、データディレクトリ内の#innodb_temp
ディレクトリです。 データディレクトリに対する完全修飾パスまたは相対パスが許可されます。
MySQL 8.0.16 では、セッション一時テーブルスペースには常に、InnoDB
を使用してオプティマイザによって作成されたユーザー作成一時テーブルおよび内部一時テーブルが格納されます。 (以前は、内部一時テーブルのディスク上のストレージエンジンは、サポートされなくなった internal_tmp_disk_storage_engine
システム変数によって決定されていました。 オンディスク内部一時テーブルのストレージエンジンを参照してください。)
詳細は、セッション一時テーブルスペースを参照してください。
コマンド行形式 | --innodb-thread-concurrency=# |
---|---|
システム変数 | innodb_thread_concurrency |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 0 |
最小値 | 0 |
最大値 | 1000 |
InnoDB
内で許可されるスレッドの最大数を定義します。 値 0 (デフォルト) は、無限同時実行性 (制限なし) として解釈されます。 この変数は、高同時実行性システムでのパフォーマンスチューニングを目的としています。
InnoDB
は、InnoDB
内のスレッド数を innodb_thread_concurrency
の制限以下に保つことを試みます。 制限に達すると、待機スレッドの「「先入れ先出し」」 (FIFO) キューに追加のスレッドが配置されます。 ロックを待機しているスレッドは、並列実行中のスレッドの数にカウントされません。
正しい設定は、ワークロードおよびコンピューティング環境によって異なります。 MySQL インスタンスが CPU リソースを他のアプリケーションと共有している場合、またはワークロードや同時ユーザー数が増加している場合は、この変数の設定を検討してください。 値の範囲をテストして、最適なパフォーマンスを提供する設定を決定します。innodb_thread_concurrency
は動的変数で、ライブテストシステムで様々な設定を試すことができます。 特定の設定でパフォーマンスが低下した場合は、すぐに innodb_thread_concurrency
を 0 に戻してください。
次のガイドラインに従うと、適切な設定を見つけて保持する際に役立ちます。
ワークロードの同時ユーザースレッドの数が一貫して小さく、パフォーマンスに影響しない場合は、innodb_thread_concurrency=0
を設定します (制限なし)。
ワークロードが一貫して大きく、または時々スパイクする場合は、innodb_thread_concurrency
値を設定し、最適なパフォーマンスを提供するスレッドの数が見つかるまで調整します。 たとえば、システムに通常 40 から 50 人のユーザーがいるが、定期的に 60、70 以上に増加するとします。 テストにより、同時ユーザー数は 80 に制限され、パフォーマンスはほとんど安定したままであることがわかります。 この場合、innodb_thread_concurrency
を 80 に設定します。
InnoDB
でユーザースレッドに特定の数を超える仮想 CPU (たとえば、20 個の仮想 CPU) を使用しない場合は、innodb_thread_concurrency
をこの数に設定します (パフォーマンステストによっては小さくなる可能性があります)。 MySQL を他のアプリケーションから分離することを目的としている場合は、mysqld
プロセスを仮想 CPU のみにバインドすることを検討してください。 ただし、排他的バインドを使用すると、mysqld
プロセスが一貫してビジー状態でない場合に最適でないハードウェア使用量になる可能性があることに注意してください。 この場合、mysqld
プロセスを仮想 CPU にバインドできますが、他のアプリケーションが一部またはすべての仮想 CPU を使用できるようになります。
オペレーティングシステムの観点からは、リソース管理ソリューションを使用して、mysqld
プロセスをバインドするよりもアプリケーション間で CPU 時間がどのように共有されるかを管理することをお薦めします。 たとえば、他のクリティカルプロセスが実行されていないときに特定のアプリケーションに 90% の仮想 CPU 時間を割り当て、他のクリティカルプロセスが実行されているときにその値を 40% にスケールバックできます。
場合によっては、最適な innodb_thread_concurrency
設定が仮想 CPU の数より小さいことがあります。
innodb_thread_concurrency
値が高すぎると、システム内部およびリソースの競合が増加するため、パフォーマンスが低下する可能性があります。
定期的にシステムをモニターし、分析してください。 ワークロード、ユーザー数、またはコンピューティング環境を変更するために、innodb_thread_concurrency
設定の調整が必要なことがあります。
値 0 を指定すると、SHOW ENGINE INNODB STATUS
出力の ROW OPERATIONS
セクションの queries inside InnoDB
および queries in queue
カウンタが無効になります。
関連情報については、セクション15.8.4「InnoDB のスレッド並列性の構成」を参照してください。
コマンド行形式 | --innodb-thread-sleep-delay=# |
---|---|
システム変数 | innodb_thread_sleep_delay |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 10000 |
最小値 | 0 |
最大値 | 1000000 |
InnoDB
キューに参加するまでに、InnoDB
スレッドがスリープ状態になる期間 (マイクロ秒単位) です。 デフォルト値は 10000 です。 0 の値はスリープを無効にします。 innodb_adaptive_max_sleep_delay
を innodb_thread_sleep_delay
に許可する最大値に設定すると、InnoDB
は現在のスレッドスケジュールアクティビティに応じて innodb_thread_sleep_delay
を自動的に上下に調整します。 この動的調整は、システムが軽くロードされているとき、またはほぼ全容量で動作しているときに、スレッドスケジューリングメカニズムが円滑に機能するのに役立ちます。
詳細は、セクション15.8.4「InnoDB のスレッド並列性の構成」を参照してください。
コマンド行形式 | --innodb-tmpdir=dir_name |
---|---|
システム変数 | innodb_tmpdir |
スコープ | グローバル、セッション |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | ディレクトリ名 |
デフォルト値 | NULL |
テーブルを再構築するオンライン ALTER TABLE
操作中に作成される一時ソートファイルの代替ディレクトリを定義するために使用します。
テーブルを再構築するオンライン ALTER TABLE
操作では、元のテーブルと同じディレクトリに中間テーブルファイルも作成されます。 innodb_tmpdir
オプションは、中間テーブルファイルには適用されません。
有効な値は、MySQL データディレクトリパス以外の任意のディレクトリパスです。 値が NULL の場合 (デフォルト)、一時ファイルは MySQL 一時ディレクトリ (Unix の場合は $TMPDIR
、Windows の場合は %TEMP%
、--tmpdir
構成オプションで指定されたディレクトリ)、作成されます。 ディレクトリが指定されている場合、SET
ステートメントを使用して innodb_tmpdir
が構成されている場合にのみ、ディレクトリの存在と権限がチェックされます。 symlink がディレクトリ文字列に指定されている場合、symlink は解決され、絶対パスとして格納されます。 パスは 512 バイトを超えることはできません。 innodb_tmpdir
が無効なディレクトリに設定されている場合、オンラインの ALTER TABLE
操作でエラーが報告されます。innodb_tmpdir
は、MySQL tmpdir
設定をオーバーライドしますが、オンラインの ALTER TABLE
操作の場合のみです。
innodb_tmpdir
を構成するには、FILE
権限が必要です。
tmpfs
ファイルシステムにある一時ファイルディレクトリのオーバーフローを回避するために、innodb_tmpdir
オプションが導入されました。 このようなオーバーフローは、テーブルを再構築するオンライン ALTER TABLE
操作中に作成された大規模な一時ソートファイルの結果として発生する可能性があります。
レプリケーション環境では、すべてのサーバーに同じオペレーティングシステム環境がある場合にのみ、innodb_tmpdir
設定のレプリケートを検討してください。 それ以外の場合、innodb_tmpdir
設定をレプリケートすると、テーブルを再構築するオンライン ALTER TABLE
操作の実行時にレプリケーションが失敗する可能性があります。 サーバーの動作環境が異なる場合は、各サーバーで個別に innodb_tmpdir
を構成することをお薦めします。
詳細は、セクション15.12.3「オンライン DDL 領域の要件」を参照してください。 ALTER TABLE
のオンライン操作の詳細は、セクション15.12「InnoDB とオンライン DDL」 を参照してください。
innodb_trx_purge_view_update_only_debug
コマンド行形式 | --innodb-trx-purge-view-update-only-debug[={OFF|ON}] |
---|---|
システム変数 | innodb_trx_purge_view_update_only_debug |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
パージビューの更新を許可しながら、削除マーク付きレコードのパージを一時停止します。 このオプションでは、パージビューは更新されますが、パージはまだ実行されていない状況が人為的に作成されます。 このオプションは、デバッグサポートが WITH_DEBUG
CMake オプションを使用してコンパイルされている場合にのみ使用できます。
コマンド行形式 | --innodb-trx-rseg-n-slots-debug=# |
---|---|
システム変数 | innodb_trx_rseg_n_slots_debug |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 0 |
最大値 | 1024 |
TRX_RSEG_N_SLOTS
を、undo ログセグメントの空きスロットを検索する trx_rsegf_undo_find_free
関数の特定の値に制限するデバッグフラグを設定します。 このオプションは、デバッグサポートが WITH_DEBUG
CMake オプションを使用してコンパイルされている場合にのみ使用できます。
コマンド行形式 | --innodb-undo-directory=dir_name |
---|---|
システム変数 | innodb_undo_directory |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | ディレクトリ名 |
InnoDB
が undo テーブルスペースを作成するパス。 通常、undo テーブルスペースを別のストレージデバイスに配置するために使用されます。
デフォルト値はありません (NULL)。 innodb_undo_directory
変数が定義されていない場合、undo テーブルスペースはデータディレクトリに作成されます。
MySQL インスタンスの初期化時に作成されるデフォルトの undo テーブルスペース (innodb_undo_001
および innodb_undo_002
) は、innodb_undo_directory
変数で定義されたディレクトリに常に存在します。
別のパスが指定されていない場合、CREATE UNDO TABLESPACE
構文を使用して作成された undo テーブルスペースは、innodb_undo_directory
変数で定義されたディレクトリに作成されます。
詳細は、セクション15.6.3.4「undo テーブルスペース」を参照してください。
コマンド行形式 | --innodb-undo-log-encrypt[={OFF|ON}] |
---|---|
システム変数 | innodb_undo_log_encrypt |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | OFF |
InnoDB
data-at-rest encryption feature を使用して暗号化されたテーブルの undo ログデータの暗号化を制御します。 個別の undo tablespaces に存在する undo ログにのみ適用されます。 セクション15.6.3.4「undo テーブルスペース」を参照してください。 システムテーブルスペースに存在する undo ログデータの暗号化はサポートされていません。 詳細は、undo ログの暗号化を参照してください。
コマンド行形式 | --innodb-undo-log-truncate[={OFF|ON}] |
---|---|
システム変数 | innodb_undo_log_truncate |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
有効にすると、innodb_max_undo_log_size
で定義されたしきい値を超える undo テーブルスペースに切捨てのマークが付けられます。 undo テーブルスペースのみ切り捨てられます。 システムテーブルスペースに存在する undo ログの切捨てはサポートされていません。 切捨てを実行するには、少なくとも 2 つの undo テーブルスペースが必要です。
innodb_purge_rseg_truncate_frequency
変数を使用すると、undo テーブルスペースの切捨てを迅速に実行できます。
詳細は、undo テーブルスペースの切捨てを参照してください。
コマンド行形式 | --innodb-undo-tablespaces=# |
---|---|
非推奨 | はい |
システム変数 | innodb_undo_tablespaces |
スコープ | グローバル |
動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 2 |
最小値 | 2 |
最大値 | 127 |
InnoDB
で使用される undo tablespaces の数を定義します。 デフォルト値と最小値は 2 です。
innodb_undo_tablespaces
変数は非推奨であり、MySQL 8.0.14 の時点では構成できなくなりました。 将来のリリースで削除される予定です。
詳細は、セクション15.6.3.4「undo テーブルスペース」を参照してください。
コマンド行形式 | --innodb-use-native-aio[={OFF|ON}] |
---|---|
システム変数 | innodb_use_native_aio |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
Linux の非同期 I/O サブシステムを使用するかどうかを指定します。 この変数は Linux システムにのみ適用され、サーバーの実行中は変更できません。 通常、このオプションはデフォルトで有効になっているため、構成する必要はありません。
Windows システムで InnoDB
が持つ asynchronous I/O 機能は、Linux システムで使用できます。 (その他の Unix に似たシステムでは、引き続き同期 I/O 呼び出しが使用されます。) この機能により、SHOW ENGINE INNODB STATUS\G
出力に多くの保留中の読取り/書込みが通常表示される、大量の I/O-bound システムのスケーラビリティが向上します。
大量の InnoDB
I/O スレッドとともに実行すると (特に、同じサーバーマシン上で複数のこのようなインスタンスを実行すると)、Linux システムの能力制限を超える可能性があります。 この場合、次のエラーを受信する可能性があります。
EAGAIN: The specified maxevents exceeds the user's limit of available events.
一般に、/proc/sys/fs/aio-max-nr
により大きな制限を記述すれば、このエラーに対処できます。
ただし、OS の非同期 I/O サブシステムに問題があるために InnoDB
を起動できない場合は、innodb_use_native_aio=0
を使用してサーバーを起動できます。 このオプションは、tmpfs
で AIO をサポートしていない tmpdir
の場所、tmpfs
ファイルシステム、Linux カーネルの組合せなどの潜在的な問題が InnoDB
によって検出された場合にも、起動時に自動的に無効になることがあります。
詳細は、セクション15.8.6「Linux での非同期 I/O の使用」を参照してください。
innodb_validate_tablespace_paths
コマンド行形式 | --innodb-validate-tablespace-paths[={OFF|ON}] |
---|---|
導入 | 8.0.21 |
システム変数 | innodb_validate_tablespace_paths |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Boolean |
デフォルト値 | ON |
テーブルスペースファイルパスの検証を制御します。 起動時に、InnoDB
は、テーブルスペースファイルが別の場所に移動された場合に備えて、データディクショナリに格納されているテーブルスペースファイルパスに対して既知のテーブルスペースファイルのパスを検証します。 innodb_validate_tablespace_paths
変数を使用すると、テーブルスペースパスの検証を無効にできます。 この機能は、テーブルスペースファイルを移動しない環境を対象としています。 パス検証を無効にすると、多数のテーブルスペースファイルがあるシステムでの起動時間が短縮されます。
テーブルスペースファイルの移動後にテーブルスペースパス検証を無効にしてサーバーを起動すると、動作が未定義になる可能性があります。
詳細は、セクション15.6.3.7「テーブルスペースパス検証の無効化」を参照してください。
InnoDB
のバージョン番号です。 MySQL 8.0 では、InnoDB
の個別のバージョン番号は適用されず、この値はサーバーの version
番号と同じです。
コマンド行形式 | --innodb-write-io-threads=# |
---|---|
システム変数 | innodb_write_io_threads |
スコープ | グローバル |
動的 | いいえ |
SET_VAR ヒントの適用 |
いいえ |
型 | Integer |
デフォルト値 | 4 |
最小値 | 1 |
最大値 | 64 |
InnoDB
の書き込み操作で使用される I/O スレッドの数です。 デフォルト値は 4 です。 読み取りスレッドで対応するものは、innodb_read_io_threads
です。 詳細は、セクション15.8.5「InnoDB バックグラウンド I/O スレッドの数の構成」を参照してください。 一般的な I/O チューニングのアドバイスについては、セクション8.5.8「InnoDB ディスク I/O の最適化」を参照してください。
Linux システムでは、デフォルトの innodb_read_io_threads
設定で複数 (一般には 12 台よりも多く) の MySQL サーバーを実行すると、innodb_write_io_threads
および Linux の aio-max-nr
設定がシステムの制限を超過する可能性があります。 理想的には、aio-max-nr
設定を増やします。回避策として、いずれかまたは両方の MySQL 変数の設定を減らすことができます。
また、バイナリログとディスクの同期を制御する sync_binlog
の値も考慮してください。
一般的な I/O チューニングのアドバイスについては、セクション8.5.8「InnoDB ディスク I/O の最適化」を参照してください。