MySQL 5.6 リファレンスマニュアル  /  InnoDB ストレージエンジン  /  InnoDB の起動オプションおよびシステム変数

14.12 InnoDB の起動オプションおよびシステム変数

  • 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.5.2「動的システム変数」を参照してください)。

  • GLOBAL および SESSION 変数スコープ修飾子については、SET ステートメントのドキュメントを参照してください。

  • 特定のオプションでは、InnoDB データファイルの場所およびレイアウトが制御されます。セクション14.3「InnoDB の構成」では、これらのオプションを使用する方法について説明します。

  • 初期段階では使用しないような一部のオプションは、マシンの処理能力やデータベースのワークロードに基づいて、InnoDB のパフォーマンス特性を調整する際に役立ちます。

  • オプションおよびシステム変数の指定に関する詳細は、セクション4.2.3「プログラムオプションの指定」を参照してください。

表 14.6 InnoDB オプション/変数のリファレンス

名前 コマンド行 オプションファイル システム変数 ステータス変数 変数スコープ 動的
daemon_memcached_enable_binlog はい はい はい グローバル いいえ
daemon_memcached_engine_lib_name はい はい はい グローバル いいえ
daemon_memcached_engine_lib_path はい はい はい グローバル いいえ
daemon_memcached_option はい はい はい グローバル いいえ
daemon_memcached_r_batch_size はい はい はい グローバル いいえ
daemon_memcached_w_batch_size はい はい はい グローバル いいえ
foreign_key_checks はい 両方 はい
have_innodb はい グローバル いいえ
ignore-builtin-innodb はい はい グローバル いいえ
- 変数: ignore_builtin_innodb はい グローバル いいえ
innodb はい はい
innodb_adaptive_flushing はい はい はい グローバル はい
innodb_adaptive_flushing_lwm はい はい はい グローバル はい
innodb_adaptive_hash_index はい はい はい グローバル はい
innodb_adaptive_max_sleep_delay はい はい はい グローバル はい
innodb_additional_mem_pool_size はい はい はい グローバル いいえ
innodb_api_bk_commit_interval はい はい はい グローバル はい
innodb_api_disable_rowlock はい はい はい グローバル いいえ
innodb_api_enable_binlog はい はい はい グローバル いいえ
innodb_api_enable_mdl はい はい はい グローバル いいえ
innodb_api_trx_level はい はい はい グローバル はい
innodb_autoextend_increment はい はい はい グローバル はい
innodb_autoinc_lock_mode はい はい はい グローバル いいえ
Innodb_available_undo_logs はい グローバル いいえ
Innodb_buffer_pool_bytes_data はい グローバル いいえ
Innodb_buffer_pool_bytes_dirty はい グローバル いいえ
innodb_buffer_pool_dump_at_shutdown はい はい はい グローバル はい
innodb_buffer_pool_dump_now はい はい はい グローバル はい
Innodb_buffer_pool_dump_status はい グローバル いいえ
innodb_buffer_pool_filename はい はい はい グローバル はい
innodb_buffer_pool_instances はい はい はい グローバル いいえ
innodb_buffer_pool_load_abort はい はい はい グローバル はい
innodb_buffer_pool_load_at_startup はい はい はい グローバル いいえ
innodb_buffer_pool_load_now はい はい はい グローバル はい
Innodb_buffer_pool_load_status はい グローバル いいえ
Innodb_buffer_pool_pages_data はい グローバル いいえ
Innodb_buffer_pool_pages_dirty はい グローバル いいえ
Innodb_buffer_pool_pages_flushed はい グローバル いいえ
Innodb_buffer_pool_pages_free はい グローバル いいえ
Innodb_buffer_pool_pages_latched はい グローバル いいえ
Innodb_buffer_pool_pages_misc はい グローバル いいえ
Innodb_buffer_pool_pages_total はい グローバル いいえ
Innodb_buffer_pool_read_ahead はい グローバル いいえ
Innodb_buffer_pool_read_ahead_evicted はい グローバル いいえ
Innodb_buffer_pool_read_requests はい グローバル いいえ
Innodb_buffer_pool_reads はい グローバル いいえ
innodb_buffer_pool_size はい はい はい グローバル いいえ
Innodb_buffer_pool_wait_free はい グローバル いいえ
Innodb_buffer_pool_write_requests はい グローバル いいえ
innodb_change_buffer_max_size はい はい はい グローバル はい
innodb_change_buffering はい はい はい グローバル はい
innodb_checksum_algorithm はい はい はい グローバル はい
innodb_checksums はい はい はい グローバル いいえ
innodb_cmp_per_index_enabled はい はい はい グローバル はい
innodb_commit_concurrency はい はい はい グローバル はい
innodb_compression_failure_threshold_pct はい はい はい グローバル はい
innodb_compression_level はい はい はい グローバル はい
innodb_compression_pad_pct_max はい はい はい グローバル はい
innodb_concurrency_tickets はい はい はい グローバル はい
innodb_data_file_path はい はい はい グローバル いいえ
Innodb_data_fsyncs はい グローバル いいえ
innodb_data_home_dir はい はい はい グローバル いいえ
Innodb_data_pending_fsyncs はい グローバル いいえ
Innodb_data_pending_reads はい グローバル いいえ
Innodb_data_pending_writes はい グローバル いいえ
Innodb_data_read はい グローバル いいえ
Innodb_data_reads はい グローバル いいえ
Innodb_data_writes はい グローバル いいえ
Innodb_data_written はい グローバル いいえ
Innodb_dblwr_pages_written はい グローバル いいえ
Innodb_dblwr_writes はい グローバル いいえ
innodb_disable_sort_file_cache はい はい はい グローバル はい
innodb_doublewrite はい はい はい グローバル いいえ
innodb_fast_shutdown はい はい はい グローバル はい
innodb_file_format はい はい はい グローバル はい
innodb_file_format_check はい はい はい グローバル いいえ
innodb_file_format_max はい はい はい グローバル はい
innodb_file_per_table はい はい はい グローバル はい
innodb_flush_log_at_timeout はい グローバル はい
innodb_flush_log_at_trx_commit はい はい はい グローバル はい
innodb_flush_method はい はい はい グローバル いいえ
innodb_flush_neighbors はい はい はい グローバル はい
innodb_flushing_avg_loops はい はい はい グローバル はい
innodb_force_load_corrupted はい はい はい グローバル いいえ
innodb_force_recovery はい はい はい グローバル いいえ
innodb_ft_aux_table はい グローバル はい
innodb_ft_cache_size はい はい はい グローバル いいえ
innodb_ft_enable_diag_print はい はい はい グローバル はい
innodb_ft_enable_stopword はい はい はい グローバル はい
innodb_ft_max_token_size はい はい はい グローバル いいえ
innodb_ft_min_token_size はい はい はい グローバル いいえ
innodb_ft_num_word_optimize はい はい はい グローバル はい
innodb_ft_result_cache_limit はい はい はい グローバル はい
innodb_ft_server_stopword_table はい はい はい グローバル はい
innodb_ft_sort_pll_degree はい はい はい グローバル いいえ
innodb_ft_total_cache_size はい はい はい グローバル いいえ
innodb_ft_user_stopword_table はい はい はい 両方 はい
Innodb_have_atomic_builtins はい グローバル いいえ
innodb_io_capacity はい はい はい グローバル はい
innodb_io_capacity_max はい はい はい グローバル はい
innodb_large_prefix はい はい はい グローバル はい
innodb_lock_wait_timeout はい はい はい 両方 はい
innodb_locks_unsafe_for_binlog はい はい はい グローバル いいえ
innodb_log_buffer_size はい はい はい グローバル いいえ
innodb_log_compressed_pages はい はい はい グローバル はい
innodb_log_file_size はい はい はい グローバル いいえ
innodb_log_files_in_group はい はい はい グローバル いいえ
innodb_log_group_home_dir はい はい はい グローバル いいえ
Innodb_log_waits はい グローバル いいえ
Innodb_log_write_requests はい グローバル いいえ
Innodb_log_writes はい グローバル いいえ
innodb_lru_scan_depth はい はい はい グローバル はい
innodb_max_dirty_pages_pct はい はい はい グローバル はい
innodb_max_dirty_pages_pct_lwm はい はい はい グローバル はい
innodb_max_purge_lag はい はい はい グローバル はい
innodb_max_purge_lag_delay はい はい はい グローバル はい
innodb_mirrored_log_groups はい はい はい グローバル いいえ
innodb_monitor_disable はい はい はい グローバル はい
innodb_monitor_enable はい はい はい グローバル はい
innodb_monitor_reset はい はい はい グローバル はい
innodb_monitor_reset_all はい はい はい グローバル はい
Innodb_num_open_files はい グローバル いいえ
innodb_old_blocks_pct はい はい はい グローバル はい
innodb_old_blocks_time はい はい はい グローバル はい
innodb_online_alter_log_max_size はい はい はい グローバル はい
innodb_open_files はい はい はい グローバル いいえ
innodb_optimize_fulltext_only はい はい はい グローバル はい
Innodb_os_log_fsyncs はい グローバル いいえ
Innodb_os_log_pending_fsyncs はい グローバル いいえ
Innodb_os_log_pending_writes はい グローバル いいえ
Innodb_os_log_written はい グローバル いいえ
Innodb_page_size はい グローバル いいえ
innodb_page_size はい はい はい グローバル いいえ
Innodb_pages_created はい グローバル いいえ
Innodb_pages_read はい グローバル いいえ
Innodb_pages_written はい グローバル いいえ
innodb_print_all_deadlocks はい はい はい グローバル はい
innodb_purge_batch_size はい はい はい グローバル はい
innodb_purge_threads はい はい はい グローバル いいえ
innodb_random_read_ahead はい はい はい グローバル はい
innodb_read_ahead_threshold はい はい はい グローバル はい
innodb_read_io_threads はい はい はい グローバル いいえ
innodb_read_only はい はい はい グローバル いいえ
innodb_replication_delay はい はい はい グローバル はい
innodb_rollback_on_timeout はい はい はい グローバル いいえ
innodb_rollback_segments はい はい はい グローバル はい
Innodb_row_lock_current_waits はい グローバル いいえ
Innodb_row_lock_time はい グローバル いいえ
Innodb_row_lock_time_avg はい グローバル いいえ
Innodb_row_lock_time_max はい グローバル いいえ
Innodb_row_lock_waits はい グローバル いいえ
Innodb_rows_deleted はい グローバル いいえ
Innodb_rows_inserted はい グローバル いいえ
Innodb_rows_read はい グローバル いいえ
Innodb_rows_updated はい グローバル いいえ
innodb_sort_buffer_size はい はい はい グローバル いいえ
innodb_spin_wait_delay はい はい はい グローバル はい
innodb_stats_auto_recalc はい はい はい グローバル はい
innodb_stats_method はい はい はい グローバル はい
innodb_stats_on_metadata はい はい はい グローバル はい
innodb_stats_persistent はい はい はい グローバル はい
innodb_stats_persistent_sample_pages はい はい はい グローバル はい
innodb_stats_sample_pages はい はい はい グローバル はい
innodb_stats_transient_sample_pages はい はい はい グローバル はい
innodb-status-file はい はい
innodb_status_output はい はい はい グローバル はい
innodb_status_output_locks はい はい はい グローバル はい
innodb_strict_mode はい はい はい 両方 はい
innodb_support_xa はい はい はい 両方 はい
innodb_sync_array_size はい はい はい グローバル いいえ
innodb_sync_spin_loops はい はい はい グローバル はい
innodb_table_locks はい はい はい 両方 はい
innodb_thread_concurrency はい はい はい グローバル はい
innodb_thread_sleep_delay はい はい はい グローバル はい
Innodb_truncated_status_writes はい グローバル いいえ
innodb_undo_directory はい はい はい グローバル いいえ
innodb_undo_logs はい はい はい グローバル はい
innodb_undo_tablespaces はい はい はい グローバル いいえ
innodb_use_native_aio はい はい はい グローバル いいえ
innodb_use_sys_malloc はい はい はい グローバル いいえ
innodb_version はい グローバル いいえ
innodb_write_io_threads はい はい はい グローバル いいえ
timed_mutexes はい はい はい グローバル はい
unique_checks はい 両方 はい

InnoDB コマンドオプション

  • --ignore-builtin-innodb

    非推奨 5.5.22
    コマンド行形式 --ignore-builtin-innodb
    システム変数 名前 ignore_builtin_innodb
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール

    MySQL 5.1 では、このオプションを使用すると、サーバーは組み込み InnoDB が存在しない場合と同様に動作し、代わりに InnoDB Plugin を使用できました。MySQL 5.6 では、InnoDB がデフォルトのストレージエンジンとなり、InnoDB Plugin は使用されないため、このオプションは無効です。MySQL 5.6.5 の時点では、無視されます。

  • --innodb[=value]

    非推奨 5.6.21
    コマンド行形式 --innodb[=value]
    許可されている値 列挙
    デフォルト ON
    有効な値 OFF
    ON
    FORCE

    サーバーが InnoDB サポートでコンパイルされた場合に、InnoDB ストレージエンジンのロードを制御します。このオプションの形式はトライステートであり、指定可能な値は OFFON、または FORCE です。セクション5.1.8.1「プラグインのインストールおよびアンインストール」を参照してください。

    InnoDB を無効にするには、--innodb=OFF または --skip-innodb を使用します。この場合、デフォルトのストレージエンジンは InnoDB であるため、--default-storage-engine および --default-tmp-storage-engine を使用して、永続テーブルと TEMPORARY テーブルの両方についてデフォルトを別のエンジンに設定しないかぎりサーバーは開始しません。

    MySQL 5.6.21 の時点では、--innodb=OFF および --skip-innodb オプションが非推奨となり、使用すると警告が発生します。これらのオプションは、今後の MySQL リリースで削除されます。

  • --innodb-status-file

    コマンド行形式 --innodb-status-file
    許可されている値 ブール
    デフォルト OFF

    InnoDB が MySQL データディレクトリに innodb_status.pid という名前のファイルを作成するかどうかを制御します。有効にすると、InnoDB は定期的に SHOW ENGINE INNODB STATUS の出力をこのファイルに書き込みます。

    このファイルはデフォルトでは作成されません。これを作成するには、--innodb-status-file=1 オプションを付けて mysqld を起動します。このファイルは、通常のシャットダウン中に削除されます。

  • --skip-innodb

    InnoDB ストレージエンジンを無効にします。--innodb の説明を参照してください。

InnoDB システム変数

  • daemon_memcached_enable_binlog

    導入 5.6.6
    コマンド行形式 --daemon_memcached_enable_binlog=#
    システム変数 名前 daemon_memcached_enable_binlog
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール
    デフォルト false

    このオプションの使用法の詳細は、セクション14.18「InnoDB と memcached の統合」を参照してください。

  • daemon_memcached_engine_lib_name

    導入 5.6.6
    コマンド行形式 --daemon_memcached_engine_lib_name=library
    システム変数 名前 daemon_memcached_engine_lib_name
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ファイル名
    デフォルト innodb_engine.so

    InnoDB memcached プラグインを実装する共有ライブラリを指定します。

    このオプションの使用法の詳細は、セクション14.18「InnoDB と memcached の統合」を参照してください。

  • daemon_memcached_engine_lib_path

    導入 5.6.6
    コマンド行形式 --daemon_memcached_engine_lib_path=directory
    システム変数 名前 daemon_memcached_engine_lib_path
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ディレクトリ名
    デフォルト NULL

    InnoDB memcached プラグインを実装する共有ライブラリを含むディレクトリのパスです。デフォルト値は、MySQL プラグインディレクトリを表す NULL です。MySQL プラグインディレクトリの外部に配置されている別のストレージエンジンの memcached プラグインを指定していなければ、このパラメータを変更する必要はないはずです。

    このオプションの使用法の詳細は、セクション14.18「InnoDB と memcached の統合」を参照してください。

  • daemon_memcached_option

    導入 5.6.6
    コマンド行形式 --daemon_memcached_option=options
    システム変数 名前 daemon_memcached_option
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 文字列
    デフォルト

    起動時に、空白文字で区切られた memcached オプションをベースとなる memcached メモリーオブジェクトのキャッシュデーモンに渡すために使用されます。たとえば、memcached が待機するポートを変更したり、同時接続の最大数を削減したり、鍵と値のペアの最大メモリーサイズを変更したり、エラーログに関するメッセージのデバッグを有効にしたりします。

    このオプションの使用法の詳細は、セクション14.18「InnoDB と memcached の統合」を参照してください。memcached のオプションについては、memcached のマニュアルページを参照してください。

  • daemon_memcached_r_batch_size

    導入 5.6.6
    コマンド行形式 --daemon_memcached_r_batch_size=#
    システム変数 名前 daemon_memcached_r_batch_size
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 数値
    デフォルト 1

    COMMIT を実行して新しいトランザクションを開始する前に、実行される memcached 読み取り操作 (get) の数を指定します。daemon_memcached_w_batch_size の対の片方です。

    この値は、SQL ステートメントを使用してテーブルに行われた変更がすぐに memcached 操作に表示されるように、デフォルトで 1 に設定されています。ベースとなるテーブルが memcached インタフェースからのみアクセスされているシステム上で、頻繁なコミットによるオーバーヘッドを削減するために、これを大きくすることがあります。大きすぎる値を設定すると、Undo データまたは Redo データの量によっては、長時間実行されるトランザクションの場合と同様に、一部のストレージでオーバーヘッドが発生する可能性があります。

    このオプションの使用法の詳細は、セクション14.18「InnoDB と memcached の統合」を参照してください。

  • daemon_memcached_w_batch_size

    導入 5.6.6
    コマンド行形式 --daemon_memcached_w_batch_size=#
    システム変数 名前 daemon_memcached_w_batch_size
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 数値
    デフォルト 1

    COMMIT を実行して新しいトランザクションを開始する前に、実行される memcached 書き込み操作 (addsetincr など) の数を指定します。daemon_memcached_r_batch_size の対の一方です。

    この値は、格納されるデータはすべて停止に備えて保持しておくことが重要であり、すぐにコミットされるべきであるという仮定に基づいて、デフォルトで 1 に設定されています。クリティカルでないデータを格納するときは、頻繁なコミットによるオーバーヘッドを削減するために、この値を大きくすることがあります。ただし、クラッシュ時に、コミットされていない最後の N-1 回の書き込み操作が失われる可能性があります。

    このオプションの使用法の詳細は、セクション14.18「InnoDB と memcached の統合」を参照してください。

  • ignore_builtin_innodb

    非推奨 5.5.22
    コマンド行形式 --ignore-builtin-innodb
    システム変数 名前 ignore_builtin_innodb
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール

    このセクションの前半の InnoDB コマンドオプションの下にある --ignore-builtin-innodb の説明を参照してください。

  • innodb_adaptive_flushing

    コマンド行形式 --innodb_adaptive_flushing=#
    システム変数 名前 innodb_adaptive_flushing
    変数スコープ グローバル
    動的変数 はい
    許可されている値 ブール
    デフォルト ON

    ワークロードに基づいて、InnoDB バッファープール内のダーティーページをフラッシュする比率を動的に調整するかどうかを指定します。フラッシュ比率を動的に調整する目的は、I/O アクティビティーのバーストを回避することです。この設定はデフォルトで有効になっています。詳細は、セクション14.13.1.2「InnoDB バッファープールのフラッシュの頻度の構成」を参照してください。一般的な I/O チューニングのアドバイスについては、セクション8.5.7「InnoDB ディスク I/O の最適化」を参照してください。

  • innodb_adaptive_flushing_lwm

    導入 5.6.6
    コマンド行形式 --innodb_adaptive_flushing_lwm=#
    システム変数 名前 innodb_adaptive_flushing_lwm
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 10
    最小値 0
    最大値 70

    適応型フラッシュが有効になっている Redo ログ容量の割合を表す低位境界値です。

  • innodb_adaptive_hash_index

    コマンド行形式 --innodb_adaptive_hash_index=#
    システム変数 名前 innodb_adaptive_hash_index
    変数スコープ グローバル
    動的変数 はい
    許可されている値 ブール
    デフォルト ON

    InnoDB 適応型ハッシュインデックスが有効と無効のどちらになっているのかを示します。ワークロードに応じて、適応型ハッシュインデックスの作成を動的に有効または無効にして、クエリーのパフォーマンスを改善することが望ましい場合があります。適応型ハッシュインデックスがすべてのワークロードに役立つとは限らないため、現実的なワークロードを使用して、有効と無効の両方でベンチマークを実施してください。詳細は、セクション14.2.13.6「適応型ハッシュインデックス」を参照してください。

    この変数はデフォルトで有効になっています。SET GLOBAL ステートメントを使用すると、サーバーを再起動せずに、このパラメータを変更できます。この設定を変更するには、SUPER 権限が必要です。また、サーバーの起動時に --skip-innodb_adaptive_hash_index を使用すると、無効にすることができます。

    適応型ハッシュインデックスを無効にすると、すぐにハッシュテーブルが空になります。ハッシュテーブルが空になっても通常の操作は続行でき、ハッシュテーブルを使用していた実行中のクエリーは、代わりにインデックスの B ツリーに直接アクセスします。適応型ハッシュインデックスを再度有効にすると、通常の操作時にハッシュテーブルが再度移入されます。

  • innodb_adaptive_max_sleep_delay

    導入 5.6.3
    コマンド行形式 --innodb_adaptive_max_sleep_delay=#
    システム変数 名前 innodb_adaptive_max_sleep_delay
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 150000
    最小値 0
    最大値 1000000

    現在のワークロードに応じて、InnoDB によって自動的に innodb_thread_sleep_delay の値が上下に調整されるようにします。ゼロ以外の値に指定すると、最大で innodb_adaptive_max_sleep_delay オプションで指定された最大値まで、自動的に innodb_thread_sleep_delay 値の動的な調整が行われます。値はマイクロ秒数を表しています。このオプションは、InnoDB スレッド数が 16 個を上回る高負荷のシステムで役立つことがあります。(実際には、同時接続数が数百または数千になる MySQL システムの大部分の変数です。)

    詳細は、セクション14.13.5「InnoDB のスレッド並列性の構成」を参照してください。

  • innodb_additional_mem_pool_size

    非推奨 5.6.3
    コマンド行形式 --innodb_additional_mem_pool_size=#
    システム変数 名前 innodb_additional_mem_pool_size
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 数値
    デフォルト 8388608
    最小値 2097152
    最大値 4294967295

    データディクショナリ情報およびその他の内部データ構造を格納する際に InnoDB で使用されるメモリープールのサイズ (バイト単位) です。アプリケーションに存在するテーブル数が多いほど、ここで割り当てるメモリー量も多くなります。このプール内のメモリーが InnoDB によって使い果たされると、オペレーティングシステムからのメモリーの割り当てが開始され、MySQL エラーログに警告メッセージが書き込まれます。デフォルトの値は 8M バイトです。

    この変数は、InnoDB の内部メモリーアロケータに関連します。これは、innodb_use_sys_malloc が有効になっている場合は使用されません。MySQL 5.6.3 の時点では、innodb_additional_mem_pool_size は非推奨となり、今後の MySQL リリースで削除される予定です。

  • innodb_api_bk_commit_interval

    導入 5.6.7
    コマンド行形式 --innodb_api_bk_commit_interval=#
    システム変数 名前 innodb_api_bk_commit_interval
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 5
    最小値 1
    最大値 1073741824

    InnoDB memcached インタフェースが使用されるアイドル状態の接続が自動コミットされる頻度 (秒単位) です。このオプションの使用法の詳細は、セクション14.18「InnoDB と memcached の統合」を参照してください。

  • innodb_api_disable_rowlock

    導入 5.6.6
    コマンド行形式 --innodb_api_disable_rowlock=#
    システム変数 名前 innodb_api_disable_rowlock
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール
    デフォルト OFF

    この変数を使用すると、InnoDB memcached で DML 操作が実行されるときに、行ロックが無効になります。デフォルトでは、innodb_api_disable_rowlockOFF に設定されており、memcached が get および set 操作の行ロックをリクエストします。innodb_api_disable_rowlockON に設定すると、memcached は行ロックの代わりに、テーブルロックをリクエストします。

    innodb_api_disable_rowlock オプションは動的ではありません。これは mysqld コマンド行で指定するか、または MySQL 構成ファイルに入力する必要があります。構成は、MySQL サーバーが起動されるたびに行うプラグインのインストール時に有効になります。

  • innodb_api_enable_binlog

    導入 5.6.6
    コマンド行形式 --innodb_api_enable_binlog=#
    システム変数 名前 innodb_api_enable_binlog
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール
    デフォルト OFF

    MySQL バイナリログとともに、InnoDB memcached プラグインを使用できます。このオプションの使用法の詳細は、セクション14.18「InnoDB と memcached の統合」を参照してください。

  • innodb_api_enable_mdl

    導入 5.6.6
    コマンド行形式 --innodb_api_enable_mdl=#
    システム変数 名前 innodb_api_enable_mdl
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール
    デフォルト OFF

    InnoDB memcached プラグインで使用されるテーブルをロックします。これにより、SQL インタフェースから DDL によって削除または変更できなくなります。このオプションの使用法の詳細は、セクション14.18「InnoDB と memcached の統合」を参照してください。

  • innodb_api_trx_level

    導入 5.6.6
    コマンド行形式 --innodb_api_trx_level=#
    システム変数 名前 innodb_api_trx_level
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 0

    memcached インタフェースで処理されたクエリー上のトランザクション分離レベルを制御できます。このオプションの使用法の詳細は、セクション14.18「InnoDB と memcached の統合」を参照してください。よく聞く名前に対応する定数は、次のとおりです。

    • 0 = READ UNCOMMITTED

    • 1 = READ COMMITTED

    • 2 = REPEATABLE READ

    • 3 = SERIALIZABLE

  • innodb_autoextend_increment

    コマンド行形式 --innodb_autoextend_increment=#
    システム変数 名前 innodb_autoextend_increment
    変数スコープ グローバル
    動的変数 はい
    許可されている値 (<= 5.6.5) 数値
    デフォルト 8
    最小値 1
    最大値 1000
    許可されている値 (>= 5.6.6) 数値
    デフォルト 64
    最小値 1
    最大値 1000

    InnoDB の自動拡張システムテーブルスペースファイルがいっぱいになったときに、そのサイズを拡張する際の増分サイズ (M バイト単位) です。デフォルト値は、MySQL 5.6.6 の時点では 64、それよりも前では 8 です。この変数によって、innodb_file_per_table=1 を使用した場合に作成されるテーブルごとのテーブルスペースファイルは影響を受けません。innodb_autoextend_increment の値には関係なく、これらのファイルは自動拡張されます。拡張は少量で始まり、その後の拡張は増分が 4MB で発生します。

  • innodb_autoinc_lock_mode

    コマンド行形式 --innodb_autoinc_lock_mode=#
    システム変数 名前 innodb_autoinc_lock_mode
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 数値
    デフォルト 1
    有効な値 0
    1
    2

    自動インクリメント値を生成する際に使用されるロックモードです。許可される値は、従来を表す 0、連続 を表す 1、または インターリーブ を表す 2 です。セクション14.6.5「InnoDB での AUTO_INCREMENT 処理」では、これらのモードの特性について説明します。

    この変数のデフォルトは、1 (連続ロックモード) です。

  • innodb_buffer_pool_dump_at_shutdown

    導入 5.6.3
    コマンド行形式 --innodb_buffer_pool_dump_at_shutdown=#
    システム変数 名前 innodb_buffer_pool_dump_at_shutdown
    変数スコープ グローバル
    動的変数 はい
    許可されている値 ブール
    デフォルト OFF

    次回再起動時のウォームアッププロセスの時間を短縮するために、MySQL サーバーのシャットダウン時に、InnoDB のバッファープールにキャッシュされるページを記録するかどうかを指定します。一般に、innodb_buffer_pool_load_at_startup と組み合わせて使用されます。

    関連情報については、セクション14.13.1.5「再起動を高速化するための InnoDB バッファープールのプリロード」を参照してください。

  • innodb_buffer_pool_dump_now

    導入 5.6.3
    コマンド行形式 --innodb_buffer_pool_dump_now=#
    システム変数 名前 innodb_buffer_pool_dump_now
    変数スコープ グローバル
    動的変数 はい
    許可されている値 ブール
    デフォルト OFF

    InnoDB のバッファープールにキャッシュされるページをすぐに記録します。一般に、innodb_buffer_pool_load_now と組み合わせて使用されます。

    関連情報については、セクション14.13.1.5「再起動を高速化するための InnoDB バッファープールのプリロード」を参照してください。

  • innodb_buffer_pool_filename

    導入 5.6.3
    コマンド行形式 --innodb_buffer_pool_filename=file
    システム変数 名前 innodb_buffer_pool_filename
    変数スコープ グローバル
    動的変数 はい
    許可されている値 ファイル名
    デフォルト ib_buffer_pool

    innodb_buffer_pool_dump_at_shutdown または innodb_buffer_pool_dump_now で生成されるテーブルスペース ID およびページ ID のリストを保持するファイルの名前を指定します。テーブルスペース ID およびページ ID は、space, page_id という形式で保存されます。デフォルトでは、このファイルは InnoDB データディレクトリに配置されます。

    関連情報については、セクション14.13.1.5「再起動を高速化するための InnoDB バッファープールのプリロード」を参照してください。

  • innodb_buffer_pool_instances

    コマンド行形式 --innodb_buffer_pool_instances=#
    システム変数 名前 innodb_buffer_pool_instances
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 (<= 5.6.5) 数値
    デフォルト 1
    最小値 1
    最大値 64
    許可されている値 (Windows, 32 ビットプラットフォーム, >= 5.6.6) 数値
    デフォルト (autosized)
    最小値 1
    最大値 64
    許可されている値 (その他, >= 5.6.6) 数値
    デフォルト 8
    最小値 1
    最大値 64

    InnoDBバッファープールが分割される領域の数です。バッファープールが数 G バイトの範囲にあるシステムでは、バッファープールを個別のインスタンスに分割すると、キャッシュされたページに対して異なるスレッドが読み取りおよび書き込みを行うときの競合が減るため、並列性が向上する場合があります。バッファープールに格納される各ページまたはバッファープールから読み取られる各ページは、ハッシュ関数を使用して、バッファープールインスタンスのいずれかにランダムに割り当てられます。各バッファープールは、独自の空きリスト、フラッシュリストLRU、およびバッファープールに接続されたその他のすべてのデータ構造を管理し、独自のバッファープール相互排他ロックによって保護されます。

    このオプションは、innodb_buffer_pool_size を 1G バイト以上のサイズに設定した場合にのみ有効になります。指定した合計サイズは、すべてのバッファープール間で分割されます。最高の効率を得るには、innodb_buffer_pool_instancesinnodb_buffer_pool_size の組み合わせを、各バッファープールインスタンスが少なくとも 1G バイトになるように指定します。

    MySQL 5.6.6 より前では、デフォルトは 1 です。MySQL 5.6.6 の時点では、デフォルトは 8 です。ただし、32 ビットの 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_load_abort

    導入 5.6.3
    コマンド行形式 --innodb_buffer_pool_load_abort=#
    システム変数 名前 innodb_buffer_pool_load_abort
    変数スコープ グローバル
    動的変数 はい
    許可されている値 ブール
    デフォルト OFF

    innodb_buffer_pool_load_at_startup または innodb_buffer_pool_load_now でトリガーされる InnoDB のバッファープールの内容をリストアするプロセスを中断します。

    関連情報については、セクション14.13.1.5「再起動を高速化するための InnoDB バッファープールのプリロード」を参照してください。

  • innodb_buffer_pool_load_at_startup

    導入 5.6.3
    コマンド行形式 --innodb_buffer_pool_load_at_startup=#
    システム変数 名前 innodb_buffer_pool_load_at_startup
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール
    デフォルト OFF

    MySQL サーバーの起動時に、以前に保持されたときと同じページをロードすることで、InnoDB のバッファープールが自動的にウォームアップされるように指定します。一般に、innodb_buffer_pool_dump_at_shutdown と組み合わせて使用されます。

    関連情報については、セクション14.13.1.5「再起動を高速化するための InnoDB バッファープールのプリロード」を参照してください。

  • innodb_buffer_pool_load_now

    導入 5.6.3
    コマンド行形式 --innodb_buffer_pool_load_now=#
    システム変数 名前 innodb_buffer_pool_load_now
    変数スコープ グローバル
    動的変数 はい
    許可されている値 ブール
    デフォルト OFF

    サーバーの再起動を待機せずにデータページのセットをロードすることで、InnoDB のバッファープールをすぐにウォームアップします。ベンチマーク時にキャッシュメモリーを既知の状態に戻したり、レポートやメンテナンスのためにクエリーを実行したあとに、MySQL サーバーの通常のワークロードを再開する準備をしたりする際に役立ちます。

    関連情報については、セクション14.13.1.5「再起動を高速化するための InnoDB バッファープールのプリロード」を参照してください。

  • innodb_buffer_pool_size

    コマンド行形式 --innodb_buffer_pool_size=#
    システム変数 名前 innodb_buffer_pool_size
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 (32 ビットプラットフォーム) 数値
    デフォルト 134217728
    最小値 5242880
    最大値 2**32-1
    許可されている値 (64 ビットプラットフォーム) 数値
    デフォルト 134217728
    最小値 5242880
    最大値 2**64-1

    InnoDB がテーブルおよびインデックスのデータをキャッシュするメモリー領域であるバッファープールのサイズ (バイト単位) です。デフォルト値は 128M バイトです。最大値は、CPU アーキテクチャーによって異なります。最大値は、32 ビットシステムでは 4294967295 (232-1)、64 ビットシステムでは 18446744073709551615 (264-1) です。32 ビットシステムでは、CPU アーキテクチャーおよびオペレーティングシステムに、指定された最大値よりも小さい実用的な最大サイズが課されている可能性があります。バッファープールのサイズが 1G バイトよりも大きい場合に、innodb_buffer_pool_instances を 1 よりも大きい値に設定すると、高負荷のサーバーで拡張性を改善できます。

    この値を大きく設定するほど、テーブル内の同じデータに複数回アクセスするために必要なディスク I/O が少なくなります。専用のデータベースサーバーでは、これを最大でマシンの物理メモリーサイズの 80% まで設定することがあります。次のようなその他の問題が発生した場合は、この値を小さくする準備をしてください。

    • 物理メモリーが競合すると、オペレーティングシステムでページングが発生する可能性があります。

    • InnoDB では、割り当てられた領域の合計が指定されたサイズよりも約 10% 大きくなるように、バッファーおよび制御構造用に追加のメモリーが予約されています。

    • アドレス空間は隣接しているはすです。これにより、Windows システムで特定のアドレスにロードする DLL に関する問題が発生する可能性があります。

    • バッファープールを初期化する時間は、ほぼそのサイズに比例しています。大規模なインストールでは、この初期化時間が重要となる場合もあります。たとえば、最新の Linux x86_64 サーバーで 10G バイトのバッファープールを初期化するには、約 6 秒かかります。セクション8.9.1「InnoDB バッファープール」を参照してください。

  • innodb_change_buffer_max_size

    導入 5.6.2
    コマンド行形式 --innodb_change_buffer_max_size=#
    システム変数 名前 innodb_change_buffer_max_size
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 25
    最小値 0
    最大値 50

    バッファープールの合計サイズの割合として示した、InnoDB の変更バッファーの最大サイズです。この値は、MySQL サーバーで頻繁に挿入、更新、および削除アクティビティーが発生する場合は大きくし、MySQL サーバーでレポート用に使用されるデータが変更されない場合は小さくするとよいでしょう。一般的な I/O チューニングのアドバイスについては、セクション8.5.7「InnoDB ディスク I/O の最適化」を参照してください。

  • innodb_change_buffering

    コマンド行形式 --innodb_change_buffering=#
    システム変数 名前 innodb_change_buffering
    変数スコープ グローバル
    動的変数 はい
    許可されている値 列挙
    デフォルト all
    有効な値 inserts
    deletes
    purges
    changes
    all
    none

    InnoDBバッファリングの変更 (I/O 操作を連続して実行できるように、セカンダリインデックスへの書き込み操作を遅延させる最適化) を実行するかどうかを指定します。許可される値は inserts (挿入操作のバッファリング)、deletes (削除操作のバッファリング。厳密に言えば、パージ操作時にあとで削除するインデックスレコードにマークを付ける書き込み)、changes (挿入操作および削除マーク操作のバッファリング)、purges (パージ操作のバッファリング。削除されたインデックスエントリのガベージコレクションが最終的に実行される書き込み)、all (挿入、削除マーク、パージ操作のバッファリング)、および none (操作のバッファリングなし) です。デフォルトは all です。詳細については、セクション14.13.4「InnoDB 変更バッファリングの構成」を参照してください。一般的な I/O チューニングのアドバイスについては、セクション8.5.7「InnoDB ディスク I/O の最適化」を参照してください。

  • innodb_checksum_algorithm

    導入 5.6.3
    コマンド行形式 --innodb_checksum_algorithm=#
    システム変数 名前 innodb_checksum_algorithm
    変数スコープ グローバル
    動的変数 はい
    許可されている値 (<= 5.6.5) 列挙
    デフォルト innodb
    有効な値 innodb
    crc32
    none
    strict_innodb
    strict_crc32
    strict_none
    許可されている値 (5.6.6) 列挙
    デフォルト crc32
    有効な値 innodb
    crc32
    none
    strict_innodb
    strict_crc32
    strict_none
    許可されている値 (>= 5.6.7) 列挙
    デフォルト innodb
    有効な値 innodb
    crc32
    none
    strict_innodb
    strict_crc32
    strict_none

    InnoDB の各テーブルスペースの各ディスクブロックに格納されているチェックサムを生成および検証する方法を指定します。

    MySQL 5.6.3 の時点で innodb_checksums オプションは、innodb_checksum_algorithm で置き換えられました。次の値は、互換性を保つために提供されています。

    • innodb_checksum_algorithm=innodbinnodb_checksums=ON と同じです。

    • innodb_checksum_algorithm=noneinnodb_checksums=OFF と同じです。

    競合を回避するには、構成ファイルおよび MySQL 起動スクリプトから innodb_checksums への参照を削除します。

    innodb は、すべての MySQL バージョンとの下位互換性があります。値 crc32 では、より高速に、変更されたすべてのブロックのチェックサムを計算し、ディスク読み取りごとにチェックサムをチェックするアルゴリズムが使用されます。値 none では、ブロックデータに基づいて値が計算されるのではなく、チェックサムフィールドに定数値が書き込まれます。テーブルスペース内のブロックは、古い値、新しい値、およびチェックサムなしの値を混在させて使用でき、データが更新されるにつれ徐々に更新されます。テーブルスペース内のブロックが crc32 アルゴリズムを使用するように変更されたあとは、関連付けられたテーブルを以前のバージョンの MySQL で読み取ることはできません。

    strict_* 形式の機能は、innodbcrc32、および none と同じです。ただし、InnoDB は、同じテーブルスペース内でチェックサム値の混在が発生した場合に停止します。これらのオプションを完全に新しいインスタンスで使用するだけで、はじめてでもすべてのテーブルスペースを設定できます。strict_* 設定では、ディスクの読み取り時に新しいチェックサム値と古いチェックサム値の両方を受け入れるために、その両方を計算する必要がないため、多少高速になります。

    次の表には、noneinnodbcrc32 オプション値、およびそれぞれに対応する strict_ オプション値間の相違点を示します。noneinnodb、および crc32 では、特定のタイプのチェックサム値が各データブロックに書き込まれますが、互換性を保つために、読み取り操作中にブロックを検証する際に、その他のチェックサム値のいずれかが受け入れられます。strict_ 形式の各パラメータでは、1 種類のチェックサムのみが認識されます。これにより、検証が高速になりますが、インスタンス内のすべての InnoDB データファイルが同じ innodb_checksum_algorithm 値で作成される必要があります。

    表 14.7 innodb_checksum_algorithm で許可される設定

    生成されるチェックサム (書き込み時) 許可されるチェックサム (読み取り時)
    none 定数。 noneinnodb、または crc32 で生成されるチェックサムのいずれか。
    innodb ソフトウェアで InnoDB の元のアルゴリズムを使用して計算されたチェックサム。 noneinnodb、または crc32 で生成されるチェックサムのいずれか。
    crc32 crc32 アルゴリズムを使用して計算されたチェックサム (ハードウェアの支援を得て実行される可能性もあります)。 noneinnodb、または crc32 で生成されるチェックサムのいずれか。
    strict_none 定数 none で生成されるチェックサムのみ。
    strict_innodb ソフトウェアで InnoDB の元のアルゴリズムを使用して計算されたチェックサム。 innodb で生成されるチェックサムのみ。
    strict_crc32 crc32 アルゴリズムを使用して計算されたチェックサム (ハードウェアの支援を得て実行される可能性もあります)。 crc32 で生成されるチェックサムのみ。

    innodb_checksum_algorithm のデフォルト値は MySQL 5.6.6 で innodb から crc32 に変更されましたが、以前の MySQL バージョンへのダウングレード中の InnoDB データファイルの互換性向上のため、および MySQL Enterprise Backup で使用するために 5.6.7 で innodb に戻されました。検出された制限には、次のものが含まれます。

    • CRC32 チェックサムを含む .ibd ファイルは、5.6.3 より前の MySQL バージョンへのダウングレード中に問題が発生する可能性があります。MySQL 5.6.3 以降では、ディスクからブロックを読み取るとき、そのブロックの新しいチェックサム値と古いチェックサム値のどちらも正しいとして認識します。それにより、アルゴリズムの設定には関係なく、アップグレードおよびダウングレード中にそのデータブロックの互換性を保証します。新しいチェックサム値で書き込まれたデータが 5.6.3 より前のレベルの MySQL によって処理された場合は、破損しているとしてレポートされる可能性があります。

    • 3.8.0 までのバージョンの MySQL Enterprise Backup は、CRC32 チェックサムを使用するテーブルスペースのバックアップをサポートしていません。MySQL Enterprise Backup は、CRC32 チェックサムのサポートを 3.8.1 で (いくつかの制限付きで) 追加しています。詳細は、MySQL Enterprise Backup 3.8.1 の変更履歴を参照してください。

    crc32 チェックサムアルゴリズムに関する追加情報については、セクション14.13.15「チェックサムの高速化のための CRC32 チェックサムアルゴリズムの使用」を参照してください。

  • innodb_checksums

    非推奨 5.6.3
    コマンド行形式 --innodb_checksums
    システム変数 名前 innodb_checksums
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール
    デフォルト ON

    InnoDB では、ディスクから読み取られるすべてのテーブルスペースページ上でチェックサム検証を使用することで、ハードウェアの障害やデータファイルの破損に対する追加のフォールトトレランスを実現できます。この検証はデフォルトで有効になっています。特殊な状況 (ベンチマークの実行時など) では、このような追加の安全機能は --skip-innodb-checksums を使用して無効にすることができます。innodb_checksum_algorithm を使用すると、チェックサムを計算する方法を指定できます。

    MySQL 5.6.3 以降では、このオプションは非推奨となり、innodb_checksum_algorithm で置き換えられました。innodb_checksum_algorithm=innodbinnodb_checksums=ON (デフォルト) と同じです。innodb_checksum_algorithm=noneinnodb_checksums=OFF と同じです。innodb_checksum_algorithm との競合を回避するために、構成ファイルおよび起動スクリプトからすべての innodb_checksums オプションを削除してください。innodb_checksums=OFF によって自動的に innodb_checksum_algorithm=none が設定され、innodb_checksums=ON は無視され、innodb_checksum_algorithm のその他の設定でオーバーライドされます。

  • innodb_cmp_per_index_enabled

    導入 5.6.7
    コマンド行形式 --innodb_cmp_per_index_enabled=#
    システム変数 名前 innodb_cmp_per_index_enabled
    変数スコープ グローバル
    動的変数 はい
    許可されている値 ブール
    デフォルト OFF
    有効な値 OFF
    ON

    INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX テーブルでインデックスごとの圧縮関連の統計を有効にします。これらの統計を収集すると負荷が高くなるため、このオプションは、InnoDB圧縮済みテーブルに関連するパフォーマンスチューニング時に開発、テスト、またはスレーブのインスタンス上でのみ有効にしてください。

  • innodb_commit_concurrency

    コマンド行形式 --innodb_commit_concurrency=#
    システム変数 名前 innodb_commit_concurrency
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 0
    最小値 0
    最大値 1000

    同時にコミットできるスレッドの数です。値を 0 (デフォルト) にすると、任意の数のトランザクションを同時にコミットすることが許可されます。

    innodb_commit_concurrency の値は、実行時にゼロからゼロ以外 (またはその逆) に変更できません。ゼロ以外の値から別のゼロ以外の値に変更することはできます。

  • innodb_compression_failure_threshold_pct

    導入 5.6.7
    コマンド行形式 --innodb_compression_failure_threshold_pct=#
    システム変数 名前 innodb_compression_failure_threshold_pct
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 5
    最小値 0
    最大値 100

    高負荷での圧縮の失敗を回避するために、圧縮されたページ内のパディングの追加が MySQL で開始されるカットオフポイントを設定します。値をゼロにすると、圧縮の効率性をモニターするメカニズムが無効になり、パディングの量が動的に調整されます。

  • innodb_compression_level

    導入 5.6.7
    コマンド行形式 --innodb_compression_level=#
    システム変数 名前 innodb_compression_level
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 6
    最小値 0
    最大値 9

    InnoDB圧縮されたテーブルおよびインデックスで使用される zlib 圧縮のレベルを指定します。

  • innodb_compression_pad_pct_max

    導入 5.6.7
    コマンド行形式 --innodb_compression_pad_pct_max=#
    システム変数 名前 innodb_compression_pad_pct_max
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 50
    最小値 0
    最大値 75

    圧縮された各ページ内の空き領域として予約できる最大の割合を指定します。これにより、圧縮されたテーブルまたはインデックスが更新され、データが再度圧縮される可能性があるときに、ページ内のデータおよび変更ログを再編成する余地が得られます。innodb_compression_failure_threshold_pct がゼロ以外の値に設定され、圧縮エラーの比率がカットオフポイントを超えたときにのみ適用されます。

  • innodb_concurrency_tickets

    コマンド行形式 --innodb_concurrency_tickets=#
    システム変数 名前 innodb_concurrency_tickets
    変数スコープ グローバル
    動的変数 はい
    許可されている値 (<= 5.6.5) 数値
    デフォルト 500
    最小値 1
    最大値 4294967295
    許可されている値 (>= 5.6.6) 数値
    デフォルト 5000
    最小値 1
    最大値 4294967295

    同時に InnoDB に入ることができるスレッドの数を決定します。スレッドが InnoDB に入ろうとしたときに、すでにスレッド数が並列実行の制限に達している場合は、そのスレッドがキューに配置されます。スレッドが InnoDB に入ることが許可されている場合は、innodb_concurrency_tickets の値に等しい数の空きチケットが付与され、スレッドはそのチケットを使い果たすまで自由に InnoDB に出入りすることができます。それ以降は、スレッドが次に InnoDB に入ろうとしたときに、再度並列実行チェックの対象となります (キューに入る対象となる可能性もあります)。デフォルト値は、MySQL 5.6.6 の時点では 5000、それよりも前では 500 です。

    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 カラムから取得することもできます。

    詳細は、セクション14.13.5「InnoDB のスレッド並列性の構成」を参照してください。

  • innodb_data_file_path

    コマンド行形式 --innodb_data_file_path=name
    システム変数 名前 innodb_data_file_path
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 (<= 5.6.6) 文字列
    デフォルト ibdata1:10M:autoextend
    許可されている値 (>= 5.6.7) 文字列
    デフォルト ibdata1:12M:autoextend

    InnoDB の各データファイルへのパスとそれらのサイズです。各データファイルへの完全ディレクトリパスは、ここに指定された各パスに innodb_data_home_dir を結合することで形成されます。サイズ値に KM、または G を追加することで、ファイルサイズが K バイト、M バイト、または G バイト (1024M バイト) で指定されます。データファイルのサイズをキロバイト (K バイト) で指定する場合は、1024 の倍数で指定してください。それ以外の場合は、K バイト値はもっとも近いメガバイト (M バイト) の境界で丸められます。ファイルサイズの合計は、わずかに 10M バイトを上回る大きさにする必要があります。innodb_data_file_path を指定しない場合は、デフォルトの動作で、ibdata1 という名前の単一の自動拡張データファイルが 12M バイトをわずかに上回る大きさで作成されます。各ファイルのサイズ制限は、オペレーティングシステムによって決定されます。大きいファイルをサポートするオペレーティングシステムでは、4G バイトよりも大きいファイルサイズを設定できます。データファイルとして生のディスクパーティションを使用することもできます。InnoDBテーブルスペースファイルの構成についての詳細は、セクション14.3「InnoDB の構成」を参照してください。

  • innodb_data_home_dir

    コマンド行形式 --innodb_data_home_dir=path
    システム変数 名前 innodb_data_home_dir
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ディレクトリ名

    システムテーブルスペース内のすべての InnoDBデータファイルのディレクトリパスに共通する部分です。この設定によって、innodb_file_per_table を有効にしたときの file-per-table テーブルスペースの場所は影響を受けません。デフォルト値は、MySQL の data ディレクトリです。値を空の文字列として指定した場合は、innodb_data_file_path 内で完全なファイルパスを使用できます。

  • innodb_disable_sort_file_cache

    導入 5.6.4
    コマンド行形式 --innodb_disable_sort_file_cache=#
    システム変数 名前 innodb_disable_sort_file_cache
    変数スコープ グローバル
    動的変数 はい
    許可されている値 ブール
    デフォルト OFF

    この変数を有効にすると、マージソート一時ファイル用のオペレーティングシステムファイルシステムのキャッシュが無効になります。その結果、このようなファイルが O_DIRECT の同等のものとともに開きます。この変数は MySQL 5.6.4 で追加されました。

  • innodb_doublewrite

    コマンド行形式 --innodb-doublewrite
    システム変数 名前 innodb_doublewrite
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール
    デフォルト ON

    この変数を有効にすると (デフォルト)、InnoDB にすべてのデータが 2 回 (まず二重書き込みバッファー、次に実際のデータファイルに) 格納されます。データの整合性や失敗の可能性の懸念より、ベンチマークや最高のパフォーマンスが必要なケースでは、--skip-innodb_doublewrite を使用すれば、この変数を無効にすることができます。

  • innodb_fast_shutdown

    コマンド行形式 --innodb_fast_shutdown[=#]
    システム変数 名前 innodb_fast_shutdown
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 1
    有効な値 0
    1
    2

    InnoDBシャットダウンモードです。この値を 0 にすると、InnoDB低速シャットダウン、完全なパージ、および挿入バッファーのマージを実行してから、シャットダウンします。この値を 1 (デフォルト) にすると、InnoDB はシャットダウン時に、これらの操作をスキップします。このプロセスは、高速シャットダウンと呼ばれます。この値を 2 にすると、InnoDB は MySQL がクラッシュした場合と同様に、そのログをフラッシュし、コールドシャットダウンを実行します。コミットされていないトランザクションは失われませんが、クラッシュリカバリ操作によって次回の起動時間が長くなります。

    低速シャットダウンには数分間かかる可能性があり、大量のデータがバッファーに存在する極端なケースでは、数時間かかる可能性もあります。MySQL のメジャーリリース間でアップグレードまたはダウングレードを行う前には、アップグレードプロセスによってファイル形式が更新される場合に備えて、すべてのデータファイルが完全に準備されるように、低速シャットダウン技術を使用してください。

    データが破損するリスクがある場合に、完全な最速のシャットダウンを行うには、緊急事態またはトラブルシューティングの状況で innodb_fast_shutdown=2 を使用してください。

  • innodb_file_format

    コマンド行形式 --innodb_file_format=#
    システム変数 名前 innodb_file_format
    変数スコープ グローバル
    動的変数 はい
    許可されている値 文字列
    デフォルト Antelope
    有効な値 Antelope
    Barracuda

    新しい InnoDB テーブルで使用されるファイル形式です。現在は、Antelope および Barracuda がサポートされています。これは、独自のテーブルスペースを持つテーブルにのみ適用されるため、これを有効にするには、innodb_file_per_table が有効になっている必要があります。テーブルの圧縮などの特定の InnoDB 機能を使用するには、Barracuda ファイル形式が必要です。

    InnoDB のテーブル (ALGORITHM=COPY) を再作成する ALTER TABLE 操作では、現在の innodb_file_format 設定が使用される (前述の状況が適用される) ことに注意してください。

  • innodb_file_format_check

    コマンド行形式 --innodb_file_format_check=#
    システム変数 名前 innodb_file_format_check
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール
    デフォルト ON

    この変数をサーバーの起動時に 1 または 0 に設定すると、InnoDBシステムテーブルスペースファイル形式タグ (AntelopeBarracuda など) をチェックするかどうかを有効または無効にすることができます。チェックされたタグが最新バージョンの InnoDB でサポートされているよりも大きい場合は、エラーが発生し、InnoDB は起動されません。このタグの方が大きくない場合は、InnoDB によって innodb_file_format_max の値がファイル形式タグに設定されます。

    注記

    デフォルト値が ON または OFF と表示されることがあるにもかかわらず、このオプションを構成ファイルまたはコマンド行でオンまたはオフに切り替えるには、常に数値 1 または 0 を使用します。

  • innodb_file_format_max

    コマンド行形式 --innodb_file_format_max=#
    システム変数 名前 innodb_file_format_max
    変数スコープ グローバル
    動的変数 はい
    許可されている値 文字列
    デフォルト Antelope
    有効な値 Antelope
    Barracuda

    サーバーの起動時に InnoDB によって、この変数の値がシステムテーブルスペースファイル形式タグ (AntelopeBarracuda など) に設定されます。サーバーで大きいファイル形式のテーブルが作成されたり、開かれたりすると、innodb_file_format_max の値がそのファイル形式に設定されます。

  • innodb_file_per_table

    コマンド行形式 --innodb_file_per_table
    システム変数 名前 innodb_file_per_table
    変数スコープ グローバル
    動的変数 はい
    許可されている値 (<= 5.6.5) ブール
    デフォルト OFF
    許可されている値 (>= 5.6.6) ブール
    デフォルト ON

    innodb_file_per_table が有効になっている (5.6.6 以上のデフォルト) 場合、InnoDB では、新たに作成された各テーブルのデータおよびインデックスがシステムテーブルスペースではなく、個別の .ibd ファイルに格納されます。これらの InnoDB テーブル用のストレージは、テーブルが削除されたり、切り捨てられたりすると再利用されます。このように設定すると、テーブルの圧縮などのその他のいくつかの InnoDB 機能が有効になります。このような機能、および file-per-table テーブルスペースを使用する利点および欠点についての詳細は、セクション14.5.2「InnoDB File-Per-Table モード」を参照してください。

    ALTER TABLE でテーブルが再作成されるケース (ALGORITHM=COPY) では、innodb_file_per_table を有効にすることは、ALTER TABLE 操作によって InnoDB テーブルがシステムテーブルスペースから個々の .ibd ファイルに移動されることも意味することに注意してください。

    innodb_file_per_table を無効にすると、InnoDB ではすべてのテーブルおよびインデックス用のデータが、システムテーブルスペースを構成する ibdata ファイルに格納されます。このように設定すると、DROP TABLETRUNCATE TABLE などの操作で、ファイルシステム操作のパフォーマンスオーバーヘッドが削減されます。これは、ストレージデバイス全体が MySQL データ専用になっているサーバー環境に最適です。システムテーブルスペースは縮小されず、インスタンス内のすべてのデータベースにわたって共有されないため、innodb_file_per_table=OFF のときは、領域が制約されているシステムで一時データを大量にロードすることは回避してください。このような場合は、領域を再利用するためにインスタンス全体を削除できるように、個別のインスタンスを設定します。

    MySQL 5.6.6 の時点では、デフォルトで innodb_file_per_table が有効になっています。それよりも前では、無効になっています。MySQL 5.5 または 5.1 との下位互換性が懸念事項となっている場合は、これを無効にすることを検討してください。これにより、ALTER TABLE によって InnoDB テーブルがシステムテーブルスペースから個々の .ibd ファイルに移動することが回避されます。

    innodb_file_per_table は動的であり、SET GLOBAL を使用して ON または OFF に設定できます。このパラメータは、MySQL 構成ファイル (my.cnf または my.ini) でも設定できますが、このためにはサーバーをシャットダウンしてから再起動する必要があります。

    このパラメータの値を動的に変更するには、SUPER 権限が必要です。動的に変更すると、すべての接続の操作がすぐに影響を受けます。

  • innodb_flush_log_at_timeout

    導入 5.6.6
    システム変数 名前 innodb_flush_log_at_timeout
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 1
    最小値 1
    最大値 2700

    ログを N 秒ごとに書き込んで、フラッシュします。innodb_flush_log_at_timeout は MySQL 5.6.6 で導入されました。フラッシュを減らし、バイナリロググループのコミット時のパフォーマンスへの影響を回避するために、フラッシュ間のタイムアウト期間を長くすることができます。MySQL 5.6.6 よりも前では、フラッシュの頻度は 1 秒ごとに 1 回でした。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
    変数スコープ グローバル
    動的変数 はい
    許可されている値 列挙
    デフォルト 1
    有効な値 0
    1
    2

    コミット操作に対する厳密な ACID コンプライアンスと、コミット関連の I/O 操作が再編成およびバッチ処理されるときに実現可能な高いパフォーマンスとの間のバランスを制御します。デフォルト値を変更するとパフォーマンスを改善できますが、クラッシュ時にトランザクションが最大で 1 秒間失われる可能性があります。

    • 完全に ACID コンプライアンスに従うには、デフォルト値の 1 を使用する必要があります。この値を使用すると、トランザクションコミットのたびに、InnoDBログバッファーの内容がログファイルに書き込まれ、ログファイルがディスクにフラッシュされます。

    • 値を 0 にすると、約 1 秒ごとに 1 回、InnoDB のログバッファーの内容がログファイルに書き込まれ、ログファイルがディスクにフラッシュされます。ログバッファーからログファイルに書き込みは、トランザクションコミット時には実行されません。プロセスのスケジューリングの問題が原因で、1 秒ごとに 1 回のフラッシュが毎秒発生する 100% の保証はありません。ディスク操作へのフラッシュは約 1 秒ごとに 1 回しか発生しないため、任意の mysqld プロセスがクラッシュすると、トランザクションが最大で 1 秒間失われる可能性があります。

    • 値を 2 にすると、トランザクションコミットのたびに、InnoDB のログバッファーの内容がログファイルに書き込まれ、約 1 秒ごとに 1 回ログファイルがディスクにフラッシュされます。プロセスのスケジューリングの問題が原因で、1 秒ごとに 1 回のフラッシュが毎秒発生する 100% の保証はありません。ディスク操作へのフラッシュは約 1 秒ごとに 1 回しか発生しないため、オペレーティングシステムがクラッシュしたり、停電が発生したりすると、トランザクションが最大で 1 秒間失われる可能性があります。

    • MySQL 5.6.6 の時点では、InnoDB でのログフラッシュの頻度が innodb_flush_log_at_timeout で制御されます。これにより、ログフラッシュの頻度を N 秒間に設定できます (ここで、N1 ... 2700 で、デフォルト値は 1 です)。ただし、任意の mysqld プロセスがクラッシュすると、トランザクションが最大で N 秒間消失する可能性があります。

    • innodb_flush_log_at_trx_commit の設定とは関係なく、DDL の変更やその他の InnoDB アクティビティーによって、InnoDB のログがフラッシュされます。

    • InnoDBクラッシュリカバリは、innodb_flush_log_at_trx_commit の設定に関係なく機能します。トランザクションは完全に適用されるか、完全に消去されるかのいずれかです。

    トランザクションで InnoDB が使用されるレプリケーションセットアップの持続性および一貫性を保つ場合:

    • バイナリロギングが有効になっている場合は、sync_binlog=1 を設定します。

    • 常に innodb_flush_log_at_trx_commit=1 を設定します。

    注意

    多くのオペレーティングシステムや一部のディスクハードウェアは、ディスクへのフラッシュ操作を行なったと欺きます。フラッシュが行われていなくても、行われたと mysqld に通知される可能性があります。そのため、1 を設定してもトランザクションの持続性は保証されず、最悪のケースでは、停電によって InnoDB のデータが破損する可能性もあります。バッテリーバックアップのディスクキャッシュを SCSI ディスクコントローラ内やディスク自体で使用すると、ファイルフラッシュの速度が上がり、操作が安全になります。ハードウェアキャッシュ内でディスク書き込みのキャッシュを無効にするために、Unix コマンド hdparm を使用してみたり、ハードウェアベンダー固有のその他のコマンドを使用したりすることもできます。

  • innodb_flush_method

    コマンド行形式 --innodb_flush_method=name
    システム変数 名前 innodb_flush_method
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 (Unix, <= 5.6.6) 文字列
    デフォルト fsync
    有効な値 fsync
    O_DSYNC
    O_DIRECT
    許可されている値 (Unix, >= 5.6.7) 文字列
    デフォルト fsync
    有効な値 fsync
    O_DSYNC
    O_DIRECT
    O_DIRECT_NO_FSYNC
    許可されている値 (Windows) 文字列
    デフォルト async_unbuffered

    InnoDBデータファイルおよびログファイルにデータをフラッシュする際に使用される方法を定義します。これにより、I/O スループットが影響を受ける可能性があります。この変数は、Unix および Linux システムでのみ構成可能です。Windows システムでは、フラッシュ方法は常に async_unbuffered であり、変更できません。

    innodb_flush_method オプションの内容は、次のとおりです。

    • fsync: InnoDBfsync() システムコールを使用して、データファイルとログファイルの両方をフラッシュします。fsync はデフォルト設定です。

    • O_DSYNC: InnoDB は、O_SYNC を使用してログファイルを開いてフラッシュし、fsync() を使用してデータファイルをフラッシュします。さまざまな種類の Unix で問題が発生しているため、InnoDB では直接 O_DSYNC が使用されません。

    • O_DIRECT: InnoDB は、O_DIRECT (Solaris では directio()) を使用してデータファイルを開き、fsync() を使用してデータファイルとログファイルの両方をフラッシュします。このオプションは、一部の GNU/Linux バージョン、FreeBSD、および Solaris で使用可能です。

    • O_DIRECT_NO_FSYNC: InnoDB は、I/O のフラッシュ時に O_DIRECT を使用しますが、後続の fsync() システムコールはスキップします。この設定は、一部のタイプのファイルシステムには適していますが、その他には適していません。たとえば、XFS には適していません。たとえば、使用中のファイルシステムですべてのファイルメタデータを保持するために、fsync() が必要であるのかどうかが不明な場合は、代わりに O_DIRECT を使用してください。このオプションは MySQL 5.6.7 (Bug #11754304、Bug #45892) で導入されました。

    各設定によるパフォーマンスへの影響度は、ハードウェア構成およびワークロードによって異なります。使用する設定を決定したり、デフォルト設定のままにするかどうかを決定したりするには、特定の構成でベンチマークを実施します。設定ごとに fsync() 呼び出しの全体数を確認するには、Innodb_data_fsyncs ステータス変数を調査します。ワークロードに読み取り操作と書き込み操作を混在させると、一部の設定での実行が影響を受ける可能性があります。たとえば、ハードウェア RAID コントローラおよびバッテリーでバックアップされる書き込みキャッシュが搭載されたシステムでは、InnoDB のバッファープールとオペレーティングシステムのファイルシステムキャッシュ間での二重バッファリングを回避する際に、O_DIRECT が役立つことがあります。InnoDB のデータファイルとログファイルが SAN 上に配置されている一部のシステムでは、大部分の SELECT ステートメントを含む読み取り負荷の高いワークロードで、デフォルト値または O_DSYNC の速度が速くなる可能性があります。このパラメータは、必ず、本番環境が反映されたハードウェアおよびワークロードでテストしてください。一般的な I/O チューニングのアドバイスについては、セクション8.5.7「InnoDB ディスク I/O の最適化」を参照してください。

  • innodb_flush_neighbors

    導入 5.6.3
    コマンド行形式 --innodb_flush_neighbors
    システム変数 名前 innodb_flush_neighbors
    変数スコープ グローバル
    動的変数 はい
    許可されている値 列挙
    デフォルト 1
    有効な値 0
    1
    2

    InnoDB のバッファープールからページをフラッシュすると、同じエクステント内のその他のダーティーページもフラッシュされるかどうかを指定します。

    • デフォルト値の 1 では、バッファープールから同じエクステント内の連続するダーティーページがフラッシュされます。

    • 0 を設定すると、innodb_flush_neighbors がオフになり、その他のダーティーページはバッファープールからフラッシュされません。

    • 2 を設定すると、同じエクステント内のダーティーページがバッファープールからフラッシュされます。

    テーブルデータが従来の HDD ストレージデバイスに格納されている場合は、1 回の操作でこのような隣接ページをフラッシュすると、さまざまな時間に個々のページをフラッシュする場合と比較して、(主にディスクシーク操作の) I/O オーバーヘッドが削減されます。テーブルデータが SSD 上に格納されている場合は、シーク時間が重要な要素ではないため、この設定をオフにすれば、書き込み操作を分散できます。一般的な I/O チューニングのアドバイスについては、セクション8.5.7「InnoDB ディスク I/O の最適化」を参照してください。

  • innodb_flushing_avg_loops

    導入 5.6.6
    コマンド行形式 --innodb_flushing_avg_loops=#
    システム変数 名前 innodb_flushing_avg_loops
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 30
    最小値 1
    最大値 1000

    InnoDB が以前に計算されたフラッシュ状態のスナップショットを保持する繰り返しの数です。これにより、適応型フラッシュワークロードの変更に対応する速度が制御されます。この値を大きくすると、ワークロードが変化するにつれて、フラッシュ操作の速度が円滑かつ徐々に変化します。この値を小さくすると、適応型フラッシュがワークロードの変化にすばやく適応します。これにより、ワークロードが突然に増減した場合に、フラッシュアクティビティーが急増する可能性があります。

  • innodb_force_load_corrupted

    導入 5.6.3
    コマンド行形式 --innodb_force_load_corrupted
    システム変数 名前 innodb_force_load_corrupted
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール
    デフォルト OFF

    InnoDB の起動時に、破損マークが付けられたテーブルをロードできます。トラブルシューティング時に、何も対処しなければアクセスできないデータをリカバリする際にのみ使用してください。トラブルシューティングが完了したら、この設定をオフに戻して、サーバーを再起動します。

  • innodb_force_recovery

    コマンド行形式 --innodb_force_recovery=#
    システム変数 名前 innodb_force_recovery
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 数値
    デフォルト 0
    最小値 0
    最大値 6

    クラッシュリカバリモードです。一般に、重大なトラブルシューティングの状況でのみ変更されます。指定可能な値は 0 から 6 までです。これらの値の意味および innodb_force_recovery に関する重要な情報については、セクション14.19.2「InnoDB のリカバリの強制的な実行」を参照してください。

    警告

    緊急状況でのみ、この変数を 0 よりも大きい値に設定してください。これにより、InnoDB を起動し、テーブルをダンプできるようになります。安全対策として、innodb_force_recovery を 0 よりも大きくすると、InnoDBINSERTUPDATE、または DELETE 操作が回避されます。また、5.6.15 の時点では、innodb_force_recovery の設定を 4 よりも大きくすると、InnoDB が読み取り専用モードになります。

    このような制約のために、--relay-log-info-repository=TABLE--master-info-repository=TABLE などのレプリケーションオプションによって InnoDB 内のテーブルに情報が格納されると、レプリケーション管理コマンドに失敗し、エラーが発生する可能性があります。

  • innodb_ft_aux_table

    導入 5.6.4
    システム変数 名前 innodb_ft_aux_table
    変数スコープ グローバル
    動的変数 はい
    許可されている値 文字列

    FULLTEXT インデックスを含む InnoDB テーブルの修飾名を指定します。この変数は診断のために使用され、実行時にのみ設定できます。例:

    mysql> set global innodb_ft_aux_table = 'test/t1';
    

    この変数を起動時に設定しようとすると、mysqld: option '--innodb-ft-aux-table' cannot take an argumentエラーが発生し、起動が中止されます。この変数を db_name/table_name 形式の名前に設定すると、INFORMATION_SCHEMA テーブル INNODB_FT_INDEX_TABLEINNODB_FT_INDEX_CACHEINNODB_FT_CONFIGINNODB_FT_DELETED、および INNODB_FT_BEING_DELETED に、指定されたテーブルの検索インデックスに関する情報が表示されます。

  • innodb_ft_cache_size

    導入 5.6.4
    コマンド行形式 --innodb_ft_cache_size=#
    システム変数 名前 innodb_ft_cache_size
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 (>= 5.6.4, <= 5.6.9) 数値
    デフォルト 32000000
    許可されている値 (>= 5.6.10) 数値
    デフォルト 8000000
    最小値 1600000
    最大値 80000000

    InnoDB の FULLTEXT 検索インデックスのキャッシュ用に割り当てられたメモリー量 (バイト単位) です。InnoDBFULLTEXT インデックスの作成時に、この量の解析済みドキュメントがメモリー内に保持されます。innodb_ft_cache_size のサイズ制限に達すると、インデックスの挿入および更新のみがディスクにコミットされます。innodb_ft_cache_size では、キャッシュサイズがテーブルごとに定義されます。すべてのテーブルにグローバルな制限を設定する方法については、innodb_ft_total_cache_size を参照してください。

  • innodb_ft_enable_diag_print

    導入 5.6.4
    コマンド行形式 --innodb_ft_enable_diag_print=#
    システム変数 名前 innodb_ft_enable_diag_print
    変数スコープ グローバル
    動的変数 はい
    許可されている値 (<= 5.6.6) ブール
    デフォルト ON
    許可されている値 (>= 5.6.7) ブール
    デフォルト 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

    導入 5.6.4
    コマンド行形式 --innodb_ft_enable_stopword=#
    システム変数 名前 innodb_ft_enable_stopword
    変数スコープ グローバル
    動的変数 はい
    許可されている値 ブール
    デフォルト ON

    インデックスの作成時に、一連のストップワードInnoDBFULLTEXT インデックスに関連付けられることを指定します。innodb_ft_user_stopword_table オプションが設定されている場合は、そのテーブルからストップワードが取得されます。そうでなければ、innodb_ft_server_stopword_table オプションが設定されている場合は、そのテーブルからストップワードが取得されます。それ以外の場合は、組み込みのデフォルトストップワードセットが使用されます。

  • innodb_ft_max_token_size

    導入 5.6.4
    コマンド行形式 --innodb_ft_max_token_size=#
    システム変数 名前 innodb_ft_max_token_size
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 数値
    デフォルト 84
    最小値 10
    最大値 252

    InnoDB の FULLTEXT インデックスに格納されている単語の最大長です。この値に制限を設定すると、実在の単語ではなく、検索語句になる可能性の低い英字の任意のコレクションや長いキーワードが省略されることで、インデックスのサイズが削減されるため、クエリーの速度が上がります。

  • innodb_ft_min_token_size

    導入 5.6.4
    コマンド行形式 --innodb_ft_min_token_size=#
    システム変数 名前 innodb_ft_min_token_size
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 数値
    デフォルト 3
    最小値 0
    最大値 16

    InnoDB の FULLTEXT インデックスに格納されている単語の最小長です。この値を大きくすると、検索のコンテキストで重要となる可能性の低い一般的な単語 (ato などの英単語) が省略されることで、インデックスのサイズが削減されるため、クエリーの速度が上がります。内容で CJK (中国語、日本語、韓国語) 文字セットが使用されている場合は、値 1 を指定します。

  • innodb_ft_num_word_optimize

    導入 5.6.4
    コマンド行形式 --innodb_ft_num_word_optimize=#
    システム変数 名前 innodb_ft_num_word_optimize
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 2000

    InnoDBFULLTEXT インデックスでの各 OPTIMIZE TABLE 操作時に処理される単語数です。全文検索インデックスを含むテーブルへの一括挿入または一括更新操作では、すべての変更を組み込むために大量のインデックスのメンテナンスが必要となる可能性があるため、それぞれが最後に終了した場所から再開する一連の OPTIMIZE TABLE ステートメントを実行するとよいでしょう。

  • innodb_ft_result_cache_limit

    導入 5.6.13
    コマンド行形式 --innodb_ft_result_cache_limit=#
    システム変数 名前 innodb_ft_result_cache_limit
    変数スコープ グローバル
    動的変数 はい
    許可されている値 (>= 5.6.17) 数値
    デフォルト 2000000000
    最小値 1000000
    最大値 2**32-1
    許可されている値 (Unix, 32 ビットプラットフォーム, >= 5.6.13, <= 5.6.16) 数値
    デフォルト 2000000000
    最小値 1000000
    最大値 2**32-1
    許可されている値 (Unix, 64 ビットプラットフォーム, >= 5.6.13, <= 5.6.16) 数値
    デフォルト 2000000000
    最小値 1000000
    最大値 2**64-1
    許可されている値 (Windows, >= 5.6.13, <= 5.6.16) 数値
    デフォルト 2000000000
    最小値 1000000
    最大値 2**32-1

    FTS クエリーごとまたはスレッドごとに、(バイト単位で定義された) InnoDB の FULLTEXT 検索 (FTS) クエリー結果のキャッシュ制限です。中間および最終の InnoDB FTS クエリー結果は、メモリー内で処理されます。InnoDB の FTS クエリー結果が非常に大きい (何百万や何億もの行数など) 場合に、過剰なメモリー消費を回避するには、innodb_ft_result_cache_limit を使用して InnoDB の FTS クエリー結果のキャッシュにサイズ制限を課します。メモリーは、FTS クエリーの処理時に必要に応じて割り当てられます。結果のキャッシュサイズ制限に達すると、クエリーで最大限に許可されるメモリー量を超えたことを示すエラーが返されます。

    MySQL 5.6.17 の時点では、すべてのプラットフォームタイプおよびプラットフォームビットサイズに対応した innodb_ft_result_cache_limit の最大値は、2**32-1 です。Bug #71554。

  • innodb_ft_server_stopword_table

    導入 5.6.4
    コマンド行形式 --innodb_ft_server_stopword_table=db_name/table_name
    システム変数 名前 innodb_ft_server_stopword_table
    変数スコープ グローバル
    動的変数 はい
    許可されている値 文字列
    デフォルト NULL

    このオプションは、すべての InnoDB テーブルに対応した独自の InnoDBFULLTEXT インデックスストップワードリストを指定する際に使用されます。特定の 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.9.4「全文ストップワード」を参照してください。

  • innodb_ft_sort_pll_degree

    導入 5.6.4
    コマンド行形式 --innodb_ft_sort_pll_degree=#
    システム変数 名前 innodb_ft_sort_pll_degree
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 数値
    デフォルト 2
    最小値 1
    最大値 32

    検索インデックスの構築時に、InnoDBFULLTEXT インデックス内のテキストのインデックス作成およびトークン化を行う際に、並列して使用されるスレッド数です。使用法の追加情報については、innodb_sort_buffer_size を参照してください。

  • innodb_ft_total_cache_size

    導入 5.6.13
    コマンド行形式 --innodb_ft_total_cache_size=#
    システム変数 名前 innodb_ft_total_cache_size
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 数値
    デフォルト 640000000
    最小値 32000000
    最大値 1600000000

    すべてのテーブルに対応した InnoDBFULLTEXT 検索インデックスキャッシュ用に割り当てられた合計メモリー量 (バイト単位) です。それぞれが全文検索インデックスを持つ多数のテーブルを作成すると、使用可能なメモリーの大部分が消費される可能性があります。innodb_ft_total_cache_size では、過剰なメモリー消費を回避する際に役立つ、すべての全文検索インデックスに対応したグローバルなメモリー制限が定義されます。インデックス操作でグローバルな制限に達すると、強制的な同期がトリガーされます。

  • innodb_ft_user_stopword_table

    導入 5.6.4
    コマンド行形式 --innodb_ft_user_stopword_table=db_name/table_name
    システム変数 名前 innodb_ft_user_stopword_table
    変数スコープ グローバル、セッション
    動的変数 はい
    許可されている値 文字列
    デフォルト NULL

    このオプションは、特定のテーブルに独自の InnoDBFULLTEXT インデックスストップワードリストを指定する際に使用されます。すべての 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.9.4「全文ストップワード」を参照してください。

  • innodb_io_capacity

    コマンド行形式 --innodb_io_capacity=#
    システム変数 名前 innodb_io_capacity
    変数スコープ グローバル
    動的変数 はい
    許可されている値 (32 ビットプラットフォーム) 数値
    デフォルト 200
    最小値 100
    最大値 2**32-1
    許可されている値 (64 ビットプラットフォーム) 数値
    デフォルト 200
    最小値 100
    最大値 2**64-1

    innodb_io_capacity パラメータは、InnoDB バックグラウンドタスクで実行される I/O アクティビティー (バッファープールからのページのフラッシュ挿入バッファーからのデータのマージなど) に上限を設定します。デフォルト値は 200 です。高い I/O レートを処理できる高負荷のシステムでは、サーバーの起動時に大きい値を設定すると、サーバーが高いレートの行変更に関連付けられたバックグラウンドメンテナンス作業を処理できるようになります。

    innodb_io_capacity の制限は、すべてのバッファープールインスタンスに対する合計の制限です。ダーティーページがフラッシュされるとき、innodb_io_capacity 制限は、バッファープールインスタンス間で均等に分割されます。

    個別の 5400 RPM または 7200 RPM ドライブが搭載されたシステムでは、元のデフォルトの 100 まで値を小さくするとよいでしょう。

    このパラメータはほぼ、システムが 1 秒あたりに実行できる I/O 操作の数に設定するようにしてください。理想的には、この設定はできるだけ小さく保ちます。ただし、これらのバックグラウンドアクティビティーに遅延が発生するほど小さくしないでください。値が大きすぎる場合は、データがバッファープールおよび挿入バッファーから瞬時に削除されるため、キャッシュを使用する重要な利点が得られません。

    この値は、約 100 IOPS を実行できる旧世代のディスクドライブで実現可能な IOPS (I/O Operations Per Second) の推定比率を表します。現在のデフォルトの 200 は、最新のストレージデバイスがさらに高い I/O レートを処理できることを反映しています。

    一般に、InnoDB の I/O で使用されるドライブ (特に、高い数値の IOPS を処理できる高速ドライブ) の数に応じて、値を大きくすることができます。たとえば、InnoDB 用に複数のディスクまたはソリッドステートディスクを使用するシステムでは、このパラメータを制御する機能の利点が得られる可能性が高くなります。

    非常に大きい数値も指定できますが、実際にはこのような大きな値にすると、利点を得られるとしてもわずかです。たとえば、100 万は非常に大きい値と考えられます。

    innodb_io_capacity の値は、innodb_io_capacity_max で定義された最大値まで、100 以上の任意の数値に設定できます。デフォルト値は 200 です。このパラメータの値は MySQL オプションファイル (my.cnf または my.ini) で設定するか、あるいは SET GLOBAL コマンド (これには SUPER 権限が必要です) で動的に変更できます。

    このオプションに関する詳細なガイドラインについては、セクション14.13.8「InnoDB マスタースレッドの I/O レートの構成」を参照してください。InnoDB の I/O パフォーマンスに関する一般的な情報については、セクション8.5.7「InnoDB ディスク I/O の最適化」を参照してください。

  • innodb_io_capacity_max

    導入 5.6.6
    コマンド行形式 --innodb_io_capacity_max=#
    システム変数 名前 innodb_io_capacity_max
    変数スコープ グローバル
    動的変数 はい
    許可されている値 (32 ビットプラットフォーム) 数値
    デフォルト see description
    最小値 2000
    最大値 2**32-1
    許可されている値 (Unix, 64 ビットプラットフォーム) 数値
    デフォルト see description
    最小値 2000
    最大値 2**64-1
    許可されている値 (Windows, 64 ビットプラットフォーム) 数値
    デフォルト 2000
    最小値 2000
    最大値 2**32-1

    緊急時に innodb_io_capacity の設定を拡張する際に、InnoDB で許可されている上限です。起動時に innodb_io_capacity の設定を指定し、innodb_io_capacity_max に値を指定しない場合は、innodb_io_capacity_max のデフォルト値が innodb_io_capacity の 2 倍となり、下限が 2000 となります。また、2000 は初期のデフォルト innodb_io_capacity_max 構成値です。

    innodb_io_capacity_max 設定は、すべてのバッファープールインスタンスに対する合計の制限です。

    MySQL 5.6 開発中の短期間は、この変数は innodb_max_io_capacity と呼ばれていました。MySQL 5.6.7 では、innodb_io_capacity オプションとの関係を強調するために、innodb_io_capacity_max という名前に変更されました。

  • innodb_large_prefix

    導入 5.6.3
    コマンド行形式 --innodb_large_prefix
    システム変数 名前 innodb_large_prefix
    変数スコープ グローバル
    動的変数 はい
    許可されている値 ブール
    デフォルト OFF

    このオプションを有効にすると、DYNAMIC および COMPRESSED 行フォーマットを使用する InnoDB テーブルで、767 バイトよりも長い (最大で 3072 バイトの) インデックスキープリフィクスが許可されます。(このようなテーブルの作成には、innodb_file_format=barracuda および innodb_file_per_table=true のオプション値も必要になります。)さまざまな設定でインデックスキープリフィクスに関連付けられた関連性の最大値については、セクション14.6.7「InnoDB テーブル上の制限」を参照してください。

    REDUNDANT および COMPACT 行フォーマットを使用したテーブルでは、このオプションによってキープリフィクスの長さは影響を受けません。

  • innodb_lock_wait_timeout

    コマンド行形式 --innodb_lock_wait_timeout=#
    システム変数 名前 innodb_lock_wait_timeout
    変数スコープ グローバル、セッション
    動的変数 はい
    許可されている値 数値
    デフォルト 50
    最小値 1
    最大値 1073741824

    行ロックが解除されるまで InnoDB トランザクションが待機する時間の長さ (秒単位) です。デフォルト値は 50 秒です。別の InnoDB トランザクションでロックされている行へのアクセスを試みるトランザクションは、行への書き込みアクセスを最大でこの秒数間待機してから、次のエラーを発行します。

    ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
    

    ロック待機のタイムアウトが発生すると、(トランザクション全体ではなく) 現在のステートメントがロールバックされます。トランザクション全体をロールバックするには、--innodb_rollback_on_timeout オプションを付けてサーバーを起動します。セクション14.19.4「InnoDB のエラー処理」も参照してください。

    高度にインタラクティブなアプリケーションまたは OLTP システムでは、ユーザーのフィードバックをすばやく表示したり、あとで処理するために更新をキューに入れたりするために、この値を小さくするとよいでしょう。長時間実行されるバックエンド操作 (その他の大規模な挿入操作や更新操作が完了するまで待機するデータウェアハウスでの変換ステップなど) では、この値を大きくするとよいでしょう。

    innodb_lock_wait_timeoutInnoDB の行ロックにのみ適用されます。MySQL のテーブルロックInnoDB 内部では発生せず、このタイムアウトはテーブルロックの待機には適用されません。

    デッドロックInnoDB によってすぐに検出され、デッドロックになったトランザクションのいずれかがロールバックされるため、デッドロックにはロック待機のタイムアウト値が適用されません。

    innodb_lock_wait_timeout は、実行時に SET GLOBAL または SET SESSION ステートメントとともに設定できます。GLOBAL 値を変更するには、SUPER 権限が必要です。これを変更すると、それ以降に接続するすべてのクライアントの操作が影響を受けます。任意のクライアントが innodb_lock_wait_timeoutSESSION 設定を変更でき、そのクライアントのみが影響を受けます。

  • innodb_locks_unsafe_for_binlog

    非推奨 5.6.3
    コマンド行形式 --innodb_locks_unsafe_for_binlog
    システム変数 名前 innodb_locks_unsafe_for_binlog
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール
    デフォルト OFF

    この変数によって、InnoDB が検索およびインデックススキャンでギャップロックを使用する方法が影響を受けます。MySQL 5.6.3 の時点では、innodb_locks_unsafe_for_binlog は非推奨となり、今後の MySQL リリースで削除される予定です。

    通常、InnoDB では、インデックス行ロックとギャップロックを組み合わせた「ネクストキーロック」と呼ばれるアルゴリズムが使用されます。InnoDB は、テーブルインデックスを検索またはスキャンするときに、生成されたインデックスレコード上に共有ロックまたは排他ロックを設定するという方法で、行レベルロックを実行します。したがって、行レベルロックは、実際にはインデックスレコードロックです。さらに、あるインデックスレコードに対するネクストキーロックによって、そのインデックスレコードの前のギャップも影響を受けます。つまり、ネクストキーロックは、インデックスレコードロックと、そのインデックスレコードの前のギャップに対するギャップロックとを組み合わせたものです。あるセッションがインデックス内のレコード R 上に共有ロックまたは排他ロックを持っている場合は、別のセッションがインデックスの順番で R の直前にあるギャップに新しいインデックスレコードを挿入できません。セクション14.2.6「InnoDB のレコード、ギャップ、およびネクストキーロック」を参照してください。

    innodb_locks_unsafe_for_binlog の値はデフォルトで 0 (無効) になっていますが、これは、ギャップロックが有効であることを意味します。InnoDB はネクストキーロックを使用して、検索およびインデックススキャンを実行します。この変数を有効にするには、値を 1 に設定します。これにより、ギャップロックが無効になります。InnoDB はインデックスレコードロックのみを使用して、検索およびインデックススキャンを実行します。

    innodb_locks_unsafe_for_binlog を有効にしても、外部キー制約チェックや重複キーチェックでのギャップロックの使用は無効になりません。

    innodb_locks_unsafe_for_binlog を有効にした場合の影響は、トランザクション分離レベルを READ COMMITTED に設定した場合の影響に似ていますが、同じではありません。

    • innodb_locks_unsafe_for_binlog を有効にすることはグローバルな設定であるため、すべてのセッションが影響を受けます。その一方で、分離レベルは、すべてのセッションに対してグローバルに設定することも、セッションごとに個別に設定することもできます。

    • innodb_locks_unsafe_for_binlog はサーバー起動時にしか設定できないのに対して、分離レベルは起動時に設定することも、実行時に変更することもできます。

    したがって、READ COMMITTED では innodb_locks_unsafe_for_binlog よりも細かく柔軟な制御が提供されます。ギャップロックに対する分離レベルの影響に関する追加の詳細については、セクション13.3.6「SET TRANSACTION 構文」を参照してください。

    ギャップロックが無効になるとほかのセッションが新しい行をギャップに挿入できるため、innodb_locks_unsafe_for_binlog を有効にすると、ファントムの問題が発生する可能性があります。child テーブルの id カラム上にインデックスがあり、識別子の値が 100 よりも大きいすべての行をテーブルから読み取り、選択された行の一部のカラムをあとで更新するという意図でロックすると仮定します。

    SELECT * FROM child WHERE id > 100 FOR UPDATE;
    

    クエリーでは、id が 100 より大きい最初のレコードからインデックスがスキャンされます。その範囲内のインデックスレコード上に設定されたロックによって、ギャップへの挿入がロックアウトされていない場合は、別のセッションがそのテーブルに新しい行を挿入できます。したがって、同じトランザクション内で同じ SELECT を再度実行すると、クエリーから返された結果セット内に新しい行を見つけることができます。これは、データベースに新しい項目が追加された場合は、InnoDB で直列化可能性が保証されないことも意味します。したがって、innodb_locks_unsafe_for_binlog が有効な場合に InnoDB によって保証される最大の分離レベルは、READ COMMITTED になります。(競合直列化可能性は引き続き保証されます。)ファントムの追加情報については、セクション14.2.7「ネクストキーロックによるファントム問題の回避」を参照してください。

    innodb_locks_unsafe_for_binlog を有効にした場合には、次のような影響も発生します。

    • UPDATE または DELETE ステートメントでは、InnoDB は更新または削除の対象となる行に対してのみ、ロックを保持します。一致しなかった行のレコードロックは、MySQL による WHERE 条件の評価後に解除されます。これにより、デッドロックの可能性が大幅に低くなりますが、まだ発生する可能性はあります。

    • UPDATE ステートメントである行がすでにロックされていた場合、InnoDB半一貫性 読み取りを実行し、最後にコミットされたバージョンを MySQL に返すため、MySQL はその行が UPDATEWHERE 条件に一致するかどうかを判断できます。その行が一致した場合 (その行を更新する必要がある場合)、MySQL はその行を再度読み取り、InnoDB は今度はその行をロックするか、その行のロックが解除されるまで待機します。

    次のような例について、このテーブルから検討します。

    CREATE TABLE t (a INT NOT NULL, b INT) ENGINE = InnoDB;
    INSERT INTO t VALUES (1,2),(2,3),(3,2),(4,3),(5,2);
    COMMIT;
    

    この場合は、テーブルにインデックスが設定されていないため、検索およびインデックススキャンでは、非表示のクラスタ化されたインデックスを使用してレコードのロックが行われます (セクション14.2.13.2「クラスタインデックスとセカンダリインデックス」を参照してください)。

    あるクライアントが次のステートメントを使用して、UPDATE を実行すると仮定します。

    SET autocommit = 0;
    UPDATE t SET b = 5 WHERE b = 3;
    

    また、2 番目のクライアントが 1 番目のクライアントの実行後に次のステートメントを実行することで、UPDATE を実行すると仮定します。

    SET autocommit = 0;
    UPDATE t SET b = 4 WHERE b = 2;
    

    InnoDB は各 UPDATE を実行する際に、まず各行の排他ロックを取得し、次にその行を変更するかどうかを判断します。InnoDB がその行を変更せず、かつ innodb_locks_unsafe_for_binlog が有効な場合は、そのロックが解除されます。それ以外の場合、トランザクションが終了するまで InnoDB はそのロックを保持します。これにより、トランザクション処理が次のような影響を受けます。

    innodb_locks_unsafe_for_binlog が無効な場合は次のように、最初の UPDATE は X ロックを取得し、そのいずれも解除しません。

    x-lock(1,2); retain x-lock
    x-lock(2,3); update(2,3) to (2,5); retain x-lock
    x-lock(3,2); retain x-lock
    x-lock(4,3); update(4,3) to (4,5); retain x-lock
    x-lock(5,2); retain x-lock
    

    次のように、2 番目の UPDATE は (1 番目の更新がすべての行のロックを保持しているため)、ロックを取得しようとしてもすぐにブロックされ、1 番目の UPDATE がコミットまたはロールバックを実行するまで続行されません。

    x-lock(1,2); block and wait for first UPDATE to commit or roll back
    

    innodb_locks_unsafe_for_binlog が有効な場合は次のように、最初の UPDATE は X ロックを取得したあとに、変更されない行のロックを解除します。

    x-lock(1,2); unlock(1,2)
    x-lock(2,3); update(2,3) to (2,5); retain x-lock
    x-lock(3,2); unlock(3,2)
    x-lock(4,3); update(4,3) to (4,5); retain x-lock
    x-lock(5,2); unlock(5,2)
    

    2 番目の UPDATE では次のように、InnoDB半一貫性 読み取りを行い、最後にコミットされたバージョンを MySQL に返すため、MySQL はその行が UPDATEWHERE 条件に一致するかどうかを判断できます。

    x-lock(1,2); update(1,2) to (1,4); retain x-lock
    x-lock(2,3); unlock(2,3)
    x-lock(3,2); update(3,2) to (3,4); retain x-lock
    x-lock(4,3); unlock(4,3)
    x-lock(5,2); update(5,2) to (5,4); retain x-lock
    
  • innodb_log_buffer_size

    コマンド行形式 --innodb_log_buffer_size=#
    システム変数 名前 innodb_log_buffer_size
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 数値
    デフォルト 8388608
    最小値 262144
    最大値 4294967295

    ディスク上のログファイルに書き込む際に InnoDB で使用されるバッファーのサイズ (バイト単位) です。デフォルトの値は 8M バイトです。ログバッファーを大きくすると、トランザクションがコミットする前にディスクにログを書き込まなくても、大規模なトランザクションを実行できます。したがって、多数の行を更新、挿入、または削除するトランザクションの場合、ログバッファーを大きくすると、ディスク I/O を節約できます。一般的な I/O チューニングのアドバイスについては、セクション8.5.7「InnoDB ディスク I/O の最適化」を参照してください。

  • innodb_log_compressed_pages

    導入 5.6.11
    コマンド行形式 --innodb_log_compressed_pages=#
    システム変数 名前 innodb_log_compressed_pages
    変数スコープ グローバル
    動的変数 はい
    許可されている値 ブール
    デフォルト ON

    再圧縮されたページのイメージが InnoDBRedo ログに格納されるかどうかを指定します。

    この変数は MySQL 5.6.11 で追加されました。

  • innodb_log_file_size

    コマンド行形式 --innodb_log_file_size=#
    システム変数 名前 innodb_log_file_size
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 (<= 5.6.2) 数値
    デフォルト 5242880
    最小値 1048576
    最大値 4GB / innodb_log_files_in_group
    許可されている値 (>= 5.6.3, <= 5.6.7) 数値
    デフォルト 5242880
    最小値 1048576
    最大値 512GB / innodb_log_files_in_group
    許可されている値 (>= 5.6.8) 数値
    デフォルト 50331648
    最小値 1048576
    最大値 512GB / innodb_log_files_in_group

    ロググループ内の各ログファイルのサイズ (バイト単位) です。ログファイルを結合したサイズ (innodb_log_file_size * innodb_log_files_in_group) は、512G バイトよりもわずかに小さい最大値を上回ることができません。たとえば、255G バイトのログファイルのペアを使用すれば、制限に近づくことはできますが、上回ることはできません。デフォルト値は 48M バイトです。適切な値の範囲は、1M バイトから 1/バッファープールN 番目のサイズまでです。ここで、N はグループ内のログファイルの数です。値を大きくするほど、バッファープール内で必要となるチェックポイントフラッシュアクティビティーの数が少なくなるため、ディスク I/O を節約できます。また、ログファイルを大きくすると、クラッシュリカバリの速度が遅くなります。ただし、MySQL 5.5 以上ではリカバリのパフォーマンスが改善されているため、ログファイルのサイズに対する考慮事項も少なくなります。一般的な I/O チューニングのアドバイスについては、セクション8.5.7「InnoDB ディスク I/O の最適化」を参照してください。

    重要

    Bug #69477 が原因で、外部に格納された大きな BLOB フィールドに対する Redo ログの書き込みによって、最新のチェックポイントが上書きされる可能性があります。このバグに対処するために MySQL 5.6.20 で導入されたパッチを適用すれば、BLOB で書き込まれる Redo ログのサイズが Redo ログファイルサイズの 10% に制限されます。この制限の結果として、innodb_log_file_size は、テーブルの行で見つかった最大の BLOB データサイズの 10 倍よりも大きい値に、その他の変数の長さフィールド (VARCHARVARBINARY、および TEXT 型のフィールド) の長さを加えた値に設定されるはずです。

    MySQL 5.6.22 では、Redo ログ BLOB の書き込み制限は 合計 Redo ログサイズ (innodb_log_file_size * innodb_log_files_in_group) の 10% に緩められました。(Bug #19498877)

  • innodb_log_files_in_group

    コマンド行形式 --innodb_log_files_in_group=#
    システム変数 名前 innodb_log_files_in_group
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 数値
    デフォルト 2
    最小値 2
    最大値 100

    ロググループ内のログファイルの数です。InnoDB はファイルに輪状に書き込みをします。デフォルト (推奨) 値は 2 です。これらのファイルの場所は、innodb_log_group_home_dir で指定されます。ログファイルを結合したサイズ (innodb_log_file_size * innodb_log_files_in_group) は、最大で 512G バイトにすることができます。

  • innodb_log_group_home_dir

    コマンド行形式 --innodb_log_group_home_dir=path
    システム変数 名前 innodb_log_group_home_dir
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ディレクトリ名

    InnoDBRedo ログファイルへのディレクトリパスです。この数は、innodb_log_files_in_group で指定されます。どの InnoDB ログ変数も指定しない場合は、デフォルトで、MySQL データディレクトリ内に ib_logfile0 および ib_logfile1 という名前の 2 つのファイルが作成されます。これらのサイズは、innodb_log_file_size システム変数のサイズで指定されます。

  • innodb_lru_scan_depth

    導入 5.6.3
    コマンド行形式 --innodb_lru_scan_depth=#
    システム変数 名前 innodb_lru_scan_depth
    変数スコープ グローバル
    動的変数 はい
    許可されている値 (32 ビットプラットフォーム) 数値
    デフォルト 1024
    最小値 100
    最大値 2**32-1
    許可されている値 (64 ビットプラットフォーム) 数値
    デフォルト 1024
    最小値 100
    最大値 2**64-1

    InnoDBバッファープールでのフラッシュ操作のアルゴリズムおよびヒューリスティクスに影響を与えるパラメータです。主に、I/O インテンシブなワークロードを調整するパフォーマンスの専門家が関心を持つものです。バッファープールインスタンスごとに、page_cleaner スレッドがフラッシュするダーティーページを検索する際に、どのくらいの深さまでバッファープール LRU リストをスキャンするのかが指定されます。これは、1 秒ごとに 1 回実行されるバックグラウンド操作です。一般的なワークロードで予備の I/O 容量を持っている場合は、この値を大きくします。書き込みが集中するワークロードで I/O 容量がいっぱいになった場合は、この値を小さくします (特に大きなバッファープールを持っている場合)。一般的な I/O チューニングのアドバイスについては、セクション8.5.7「InnoDB ディスク I/O の最適化」を参照してください。

  • innodb_max_dirty_pages_pct

    コマンド行形式 --innodb_max_dirty_pages_pct=#
    システム変数 名前 innodb_max_dirty_pages_pct
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 75
    最小値 0
    最大値 99

    InnoDB は、ダーティーページの割合がこの値を超えないように、バッファープールからデータをフラッシュしようと試みます。0 から 99 までの範囲内の整数を指定します。デフォルト値は 75 です。

    innodb_max_dirty_pages_pct 設定は、フラッシュアクティビティーのターゲットを確立します。フラッシュの頻度には影響を与えません。フラッシュの頻度の管理については、セクション14.13.1.2「InnoDB バッファープールのフラッシュの頻度の構成」を参照してください。

    この変数に関する追加情報については、セクション14.13.1.6「InnoDB バッファープールのフラッシュのチューニング」を参照してください。一般的な I/O チューニングのアドバイスについては、セクション8.5.7「InnoDB ディスク I/O の最適化」を参照してください。

  • innodb_max_dirty_pages_pct_lwm

    導入 5.6.6
    コマンド行形式 --innodb_max_dirty_pages_pct_lwm=#
    システム変数 名前 innodb_max_dirty_pages_pct_lwm
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 0
    最小値 0
    最大値 99

    ダーティーページの比率を制御するために事前フラッシュが有効になっている場合に、ダーティーページの割合を表す低位境界値です。デフォルトの 0 では、事前フラッシュの動作が完全に無効になります。この変数に関する追加情報については、セクション14.13.1.6「InnoDB バッファープールのフラッシュのチューニング」を参照してください。

  • innodb_max_purge_lag

    コマンド行形式 --innodb_max_purge_lag=#
    システム変数 名前 innodb_max_purge_lag
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 0
    最小値 0
    最大値 4294967295

    この変数は、パージ操作が遅れたときに、INSERTUPDATE、および DELETE 操作を遅延させる方法を制御します (セクション14.2.12「InnoDB マルチバージョン」を参照してください)。デフォルト値は 0 (遅延なし) です。

    InnoDB トランザクションシステムでは、UPDATE または DELETE 操作で削除のマークが付けられたインデックスレコードを含むトランザクションのリストが保持されます。purge_lag の値は、このリストの長さを表しています。purge_laginnodb_max_purge_lag を超えると、各 INSERTUPDATE、および DELETE 操作が遅延します。

    purge_lag が非常に大きくなるような極端な状況で、過剰な遅延を回避するには、innodb_max_purge_lag_delay 構成オプションを設定すれば、遅延の量に上限を設定できます。遅延は、パージバッチの開始時に計算されます。

    トランザクションが小規模 (100 バイト程度のサイズ) であり、許可されている未パージの InnoDB テーブル行が 100M バイトであると仮定すると、問題のあるワークロードに適した一般的な設定が 100 万になる可能性があります。

    遅延の値は、InnoDB Monitor 出力の TRANSACTIONS セクションに履歴リストの長さとして表示されます。たとえば、出力に次の行が含まれている場合は、遅延の値が 20 です。

    ------------
    TRANSACTIONS
    ------------
    Trx id counter 0 290328385
    Purge done for trx's n:o < 0 290315608 undo n:o < 0 17
    History list length 20
    

    一般的な I/O チューニングのアドバイスについては、セクション8.5.7「InnoDB ディスク I/O の最適化」を参照してください。

  • innodb_max_purge_lag_delay

    導入 5.6.5
    コマンド行形式 --innodb_max_purge_lag_delay=#
    システム変数 名前 innodb_max_purge_lag_delay
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 0
    最小値 0

    innodb_max_purge_lag 構成オプションで課された遅延の最大遅延をミリ秒単位で指定します。ゼロ以外の値は、innodb_max_purge_lag の値に基づいて、公式から計算された遅延期間への上限を表します。デフォルトのゼロは、遅延間隔に上限が課されていないことを意味します。

    一般的な I/O チューニングのアドバイスについては、セクション8.5.7「InnoDB ディスク I/O の最適化」を参照してください。

  • innodb_mirrored_log_groups

    効果はありません。この変数は MySQL 5.6.11 の時点で非推奨となり、将来の MySQL リリースで削除される予定です。

  • innodb_monitor_disable

    導入 5.6.2
    コマンド行形式 --innodb_monitor_disable=[counter|module|pattern|all]
    システム変数 名前 innodb_monitor_disable
    変数スコープ グローバル
    動的変数 はい
    許可されている値 文字列

    INFORMATION_SCHEMA.INNODB_METRICS テーブルで 1 つ以上のカウンタをオフにします。使用法については、セクション21.29.19「INFORMATION_SCHEMA INNODB_METRICS テーブル」を参照してください。

  • innodb_monitor_enable

    導入 5.6.2
    コマンド行形式 --innodb_monitor_enable=[counter|module|pattern|all]
    システム変数 名前 innodb_monitor_enable
    変数スコープ グローバル
    動的変数 はい
    許可されている値 文字列

    INFORMATION_SCHEMA.INNODB_METRICS テーブルで 1 つ以上のカウンタをオンにします。使用法については、セクション21.29.19「INFORMATION_SCHEMA INNODB_METRICS テーブル」を参照してください。

  • innodb_monitor_reset

    導入 5.6.2
    コマンド行形式 --innodb_monitor_reset=[counter|module|pattern|all]
    システム変数 名前 innodb_monitor_reset
    変数スコープ グローバル
    動的変数 はい
    許可されている値 文字列

    INFORMATION_SCHEMA.INNODB_METRICS テーブルで 1 つ以上のカウンタに対応するカウント値をゼロにリセットします。使用法については、セクション21.29.19「INFORMATION_SCHEMA INNODB_METRICS テーブル」を参照してください。

  • innodb_monitor_reset_all

    導入 5.6.2
    コマンド行形式 --innodb_monitor_reset_all=[counter|module|pattern|all]
    システム変数 名前 innodb_monitor_reset_all
    変数スコープ グローバル
    動的変数 はい
    許可されている値 文字列

    INFORMATION_SCHEMA.INNODB_METRICS テーブルで 1 つ以上のカウンタに対応するすべての値 (最小、最大など) をリセットします。使用法については、セクション21.29.19「INFORMATION_SCHEMA INNODB_METRICS テーブル」を参照してください。

  • innodb_old_blocks_pct

    コマンド行形式 --innodb_old_blocks_pct=#
    システム変数 名前 innodb_old_blocks_pct
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 37
    最小値 5
    最大値 95

    古いブロックサブリストで使用される InnoDBバッファープールの概算割合を指定します。値の範囲は 5 から 95 です。デフォルト値は 37 (つまり、プールの 3/8 ) です。多くの場合、innodb_old_blocks_time と組み合わせて使用されます。詳細は、セクション14.13.1.3「バッファープールをスキャンに耐えられるようにする」を参照してください。LRU アルゴリズムやエビクションポリシーなどのバッファープール管理については、セクション8.9.1「InnoDB バッファープール」を参照してください。

  • innodb_old_blocks_time

    コマンド行形式 --innodb_old_blocks_time=#
    システム変数 名前 innodb_old_blocks_time
    変数スコープ グローバル
    動的変数 はい
    許可されている値 (<= 5.6.5) 数値
    デフォルト 0
    最小値 0
    最大値 2**32-1
    許可されている値 (>= 5.6.6) 数値
    デフォルト 1000
    最小値 0
    最大値 2**32-1

    ゼロ以外の値にすると、バッファープールテーブルの完全スキャン時などの短期間でのみ参照されるデータでいっぱいになることから保護されます。この値を大きくすると、テーブルの完全スキャンがバッファープール内にキャッシュされたデータとやりとりすることからさらに保護されます。

    最初のアクセス後に、古いサブリストに挿入されるブロックが新しいサブリストに移動するまでに、そこに滞在する必要のある期間をミリ秒 (ms) 単位で指定します。値を 0 にすると、古いサブリストに挿入されたブロックは、挿入後にどのくらいの期間でアクセスが発生するのかには関係なく、最初のアクセスの直後に新しいサブリストに移動します。この値が 0 より大きい場合、ブロックは最初のアクセス後、少なくともそのミリ秒でアクセスが発生するまで、古いサブリストに残ります。たとえば、1000 の値では、ブロックは最初のアクセス後、それらが新しいサブリストに移動される資格を得るまで、1 秒間古いサブリストにとどまります。

    デフォルト値は、MySQL 5.6.6 の時点では 1000、それよりも前では 0 です。

    多くの場合、この変数は innodb_old_blocks_pct と組み合わせて使用されます。詳細は、セクション14.13.1.3「バッファープールをスキャンに耐えられるようにする」を参照してください。LRU アルゴリズムやエビクションポリシーなどのバッファープール管理については、セクション8.9.1「InnoDB バッファープール」を参照してください。

  • innodb_online_alter_log_max_size

    導入 5.6.6
    コマンド行形式 --innodb_online_alter_log_max_size=#
    システム変数 名前 innodb_online_alter_log_max_size
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 134217728
    最小値 65536
    最大値 2**64-1

    InnoDB テーブルに対するオンライン 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=#
    システム変数 名前 innodb_open_files
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 (<= 5.6.5) 数値
    デフォルト 300
    最小値 10
    最大値 4294967295
    許可されている値 (>= 5.6.6) 数値
    デフォルト -1 (autosized)
    最小値 10
    最大値 4294967295

    この変数は、複数の InnoDB テーブルスペースを使用する場合にのみ関連します。MySQL で一度に開いたままにできる .ibd ファイルの最大数が指定されます。最小値は 10 です。MySQL 5.6.6 の時点では、innodb_file_per_table が無効になっている場合のデフォルト値は 300 です。それ以外の場合は、300 よりも大きい値および table_open_cache です。5.6.6 よりも前のデフォルト値は 300 です。

    .ibd ファイルで使用されるファイルディスクリプタは、InnoDB テーブルでのみ使用されます。それらは、--open-files-limit サーバーオプションによって指定されたものからは独立していて、テーブルキャッシュの操作に影響を与えません。一般的な I/O チューニングのアドバイスについては、セクション8.5.7「InnoDB ディスク I/O の最適化」を参照してください。

  • innodb_optimize_fulltext_only

    導入 5.6.4
    コマンド行形式 --innodb_optimize_fulltext_only=#
    システム変数 名前 innodb_optimize_fulltext_only
    変数スコープ グローバル
    動的変数 はい
    許可されている値 ブール
    デフォルト OFF

    InnoDB テーブルでの OPTIMIZE TABLE ステートメントの動作方法を変更します。FULLTEXT インデックスを含む InnoDB テーブルのメンテナンス操作時に、一時的に有効にするために使用されます。

    デフォルトでは、OPTIMIZE TABLE はテーブルのクラスタ化されたインデックス内のデータを再構成します。このオプションを有効にすると、OPTIMIZE TABLE はこのようなテーブルデータの再構成をスキップし、その代わりに FULLTEXT インデックス用に新たに追加、削除、および更新されたトークンデータを処理します。InnoDB テーブルの FULLTEXT インデックスについての詳細は、セクション14.2.13.3「FULLTEXT インデックス」を参照してください。

  • innodb_page_size

    導入 5.6.4
    コマンド行形式 --innodb_page_size=#k
    システム変数 名前 innodb_page_size
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 (>= 5.6.4) 列挙
    デフォルト 16384
    有効な値 4k
    8k
    16k
    4096
    8192
    16384

    MySQL インスタンス内のすべての InnoDB テーブルスペースページサイズを指定します。この値は、インスタンスが作成されたあとに、定数が残っている場合に設定されます。ページサイズは、値 16k (デフォルト)、8k、または 4k を使用して指定できます。また、バイト単位 (4096、8192、16384) でページサイズを指定することもできます。

    最大のページサイズでは、デフォルトが広範囲のワークロード (特に、テーブルスキャンを伴うクエリーや一括更新を伴う DML 操作) に適しています。ページサイズが小さいほど、多くの小規模な書き込みを伴う OLTP ワークロードの効率性が高くなる可能性があります。その一方で、単一のページに数多くの行が含まれる場合は、競合の問題が発生する可能性もあります。ページを小さくすると、一般に小さなブロックサイズが使用される SSD ストレージデバイスの効率性が高くなる可能性もあります。InnoDB のページサイズをストレージデバイスのブロックサイズに近づけると、ディスクに再度書き込まれる未変更データの量が最小限になります。一般的な I/O チューニングのアドバイスについては、セクション8.5.7「InnoDB ディスク I/O の最適化」を参照してください。

  • innodb_print_all_deadlocks

    導入 5.6.2
    コマンド行形式 --innodb_print_all_deadlocks=#
    システム変数 名前 innodb_print_all_deadlocks
    変数スコープ グローバル
    動的変数 はい
    許可されている値 ブール
    デフォルト OFF

    このオプションを有効にすると、mysqld エラーログに、InnoDB のユーザートランザクション内のすべてのデッドロックに関する情報が記録されます。それ以外の場合は、SHOW ENGINE INNODB STATUS コマンドを使用すると、最後のデッドロックに関する情報のみが表示されます。不定期に発生する InnoDB のデッドロックは、InnoDB によってすぐに状況が検出され、自動的にトランザクションのいずれかがロールバックされるため、必ずしも問題になるとは限りません。アプリケーションにロールバックを検出し、その操作を再試行するための適切なエラー処理ロジックが存在しない場合は、デッドロックが発生する原因についてトラブルシューティングを行う際に、このオプションを使用するとよいでしょう。多数のデッドロックが発生する場合は、各トランザクションが同じ順序でテーブルにアクセスするように (これにより、デッドロックの状況が回避されます)、複数のテーブルに対して DML または SELECT ... FOR UPDATE ステートメントを発行するトランザクションを再構築する必要があることを示している可能性があります。

  • innodb_purge_batch_size

    コマンド行形式 --innodb_purge_batch_size=#
    システム変数 名前 innodb_purge_batch_size
    変数スコープ グローバル
    動的変数 はい
    許可されている値 (<= 5.6.2) 数値
    デフォルト 20
    最小値 1
    最大値 5000
    許可されている値 (>= 5.6.3) 数値
    デフォルト 300
    最小値 1
    最大値 5000

    Redo ログレコードの単位で表現される変更の粒度です。これにより、パージ操作がトリガーされ、変更されたバッファープールブロックがディスクにフラッシュされます。このオプションは、innodb_purge_threads=n 設定と組み合わせてパフォーマンスを調整するために使用されるため、一般的なユーザーは変更する必要がありません。

  • innodb_purge_threads

    コマンド行形式 --innodb_purge_threads=#
    システム変数 名前 innodb_purge_threads
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 (<= 5.6.1) 数値
    デフォルト 0
    最小値 0
    最大値 1
    許可されている値 (>= 5.6.2, <= 5.6.4) 数値
    デフォルト 0
    最小値 0
    最大値 32
    許可されている値 (>= 5.6.5) 数値
    デフォルト 1
    最小値 1
    最大値 32

    InnoDB のパージ操作専用のバックグラウンドスレッドの数です。MySQL 5.6.5 での新しいデフォルトの最小値である 1 は、パージ操作がマスタースレッドの一部としてではなく、常にバックグラウンドスレッドで実行されることを表します。ゼロ以外の値にすると、1 つ以上のバックグラウンドスレッドでパージ操作が実行されるため、InnoDB 内の内部競合を削減でき、拡張性が改善されます。この値を 1 よりも大きくすると、数多くの個別のパージスレッドが作成されるため、複数のテーブル上で DML 操作が実行されるシステムの効率性を改善できます。最大値は 32 です。

  • innodb_random_read_ahead

    導入 5.6.3
    コマンド行形式 --innodb_random_read_ahead=#
    システム変数 名前 innodb_random_read_ahead
    変数スコープ グローバル
    動的変数 はい
    許可されている値 ブール
    デフォルト OFF

    InnoDB の I/O を最適化するために、ランダムな先読み技術を有効にします。ランダム先読み機能は、InnoDB Plugin (バージョン 1.0.4) から削除されたため、InnoDB PluginInnoDB組み込みのバージョンになった時点では MySQL 5.5.0 に含まれていませんでした。ランダム先読みは、innodb_random_read_ahead 構成オプション (デフォルトでは無効になっています) とともに、MySQL 5.1.59 および 5.5.16 以降でふたたび導入されました。

    さまざまなタイプの先読みリクエストに関するパフォーマンスの考慮事項についての詳細は、セクション14.13.1.1「InnoDB バッファープールのプリフェッチ (先読み) の構成」を参照してください。一般的な I/O チューニングのアドバイスについては、セクション8.5.7「InnoDB ディスク I/O の最適化」を参照してください。

  • innodb_read_ahead_threshold

    コマンド行形式 --innodb_read_ahead_threshold=#
    システム変数 名前 innodb_read_ahead_threshold
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 56
    最小値 0
    最大値 64

    バッファープールにページをプリフェッチする際に InnoDB で使用される線形の先読みの感度を制御します。InnoDB が少なくとも innodb_read_ahead_threshold ページをエクステント (64 ページ) から連続して読み取る場合は、次のエクステント全体の非同期読み取りが開始されます。許可される値の範囲は 0 から 64 までです。MySQL 5.6.1 の時点では、値を 0 にすると先読みが無効になります。5.6.1 よりも前では、値を 0 にすると、64 ページのエクステントの境界ページを読み取るときに、先読みがトリガーされました。デフォルトの 56 では、InnoDB は次のエクステント全体の非同期読み取りを開始するために、少なくとも 56 ページをエクステントから連続して読み取る必要があります。

    この先読みメカニズムによって読み取られるページ数、およびその中でアクセスされずにバッファープールから削除される数を把握しておくと、innodb_read_ahead_threshold パラメータを微調整する際に役立ちます。MySQL 5.5 の時点では、SHOW ENGINE INNODB STATUS の出力に、Innodb_buffer_pool_read_ahead および Innodb_buffer_pool_read_ahead_evicted グローバルステータス変数からのカウンタ情報が表示されます。これらの変数は、先読みリクエストによってバッファープールに格納されるページの数、およびこのようなページの中で、個別にアクセスされずにバッファープールからエビクションされる数を示します。これらのカウンタには、最後にサーバーが再起動された以降のグローバルな値が表示されます。

    SHOW ENGINE INNODB STATUS には、先読みページが読み取られる比率、およびこのようなページがアクセスされずに削除される比率も表示されます。1 秒ごとの平均値は、最後に SHOW ENGINE INNODB STATUS が呼び出された以降に収集された統計に基づいて計算され、出力の BUFFER POOL AND MEMORY セクションに表示されます。

    詳細は、セクション14.13.1.1「InnoDB バッファープールのプリフェッチ (先読み) の構成」を参照してください。一般的な I/O チューニングのアドバイスについては、セクション8.5.7「InnoDB ディスク I/O の最適化」を参照してください。

  • innodb_read_io_threads

    コマンド行形式 --innodb_read_io_threads=#
    システム変数 名前 innodb_read_io_threads
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 数値
    デフォルト 4
    最小値 1
    最大値 64

    InnoDB での読み取り操作で使用される I/O スレッドの数です。デフォルト値は 4 です。書き込みスレッドで対応するものは、innodb_write_io_threads です。詳細は、セクション14.13.6「InnoDB バックグラウンド I/O スレッドの数の構成」を参照してください。一般的な I/O チューニングのアドバイスについては、セクション8.5.7「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

    導入 5.6.7
    コマンド行形式 --innodb_read_only=#
    システム変数 名前 innodb_read_only
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール
    デフォルト OFF

    サーバーを読み取り専用モードで起動します。読み取り専用メディア上のデータベースアプリケーションまたはデータセットを配布するために使用されます。複数のインスタンス間で同じデータディレクトリを共有する際に、データウェアハウスで使用することもできます。使用手順については、セクション14.3.1「読み取り専用操作用の InnoDB の構成」を参照してください。

  • innodb_replication_delay

    コマンド行形式 --innodb_replication_delay=#
    システム変数 名前 innodb_replication_delay
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 0
    最小値 0
    最大値 4294967295

    innodb_thread_concurrency に達した場合のスレーブサーバー上のレプリケーションスレッドの遅延 (ミリ秒単位) です。

  • innodb_rollback_on_timeout

    コマンド行形式 --innodb_rollback_on_timeout
    システム変数 名前 innodb_rollback_on_timeout
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール
    デフォルト OFF

    MySQL 5.6 では、InnoDB はデフォルトで、トランザクションタイムアウト時に最後のステートメントのみをロールバックします。--innodb_rollback_on_timeout を指定すると、トランザクションタイムアウトによって、InnoDB はトランザクション全体を中止してロールバックします (MySQL 4.1 と同じ動作です)。

  • innodb_rollback_segments

    導入 5.6.2
    コマンド行形式 --innodb_rollback_segments=#
    システム変数 名前 innodb_rollback_segments
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 128
    最小値 1
    最大値 128

    トランザクション内で InnoDB が使用するシステムテーブルスペースにあるロールバックセグメントの数を定義します。この設定は引き続き有効ですが、innodb_undo_logs で置き換えられます。

  • innodb_sort_buffer_size

    導入 5.6.4
    コマンド行形式 --innodb_sort_buffer_size=#
    システム変数 名前 innodb_sort_buffer_size
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 (5.6.4) 数値
    デフォルト 1048576
    最小値 524288
    最大値 67108864
    許可されている値 (>= 5.6.5) 数値
    デフォルト 1048576
    最小値 65536
    最大値 67108864

    InnoDB インデックスの作成時に、データを格納する際に使用されるソートバッファーのサイズを指定します。指定されたサイズでは、内部ソート用にメモリーに入力され、ディスクに書き込まれたデータの量が定義されます。これは、実行と呼ばれることもあります。マージフェーズ時に、指定されたサイズのバッファーのペアが読み取られ、マージされます。設定を大きくするほど、実行数およびマージ数が少なくなります。このことは、チューニングの観点から理解する際に重要です。

    このソート領域は、後続のインデックスのメンテナンス操作時ではなく、インデックスの作成時のマージソートでのみ使用されます。インデックスの作成が完了すると、バッファーの割り当てが解除されます。

    このオプションの値では、オンライン DDL の操作時に並列 DML を記録するために、一時ログファイルが拡張される量も制御されます。

    この設定が構成可能になる前は、サイズが 1048576 バイト (1M バイト) にハードコーディングされていました。その値は、現在もデフォルトのままです。

    インデックスを作成する ALTER TABLE または CREATE TABLE ステートメントの実行時に、それぞれが、このオプションで定義されたサイズを持つ 3 つのバッファーが割り当てられます。さらに、ポインタ上でソートを実行できるように、ソートバッファー内の行に補助ポインタが割り当てられます (これは、ソート操作時の行の移動とは異なります)。

    一般的なソート操作では、次のような公式を使用して、メモリーの消費を見積もることができます。

    (6 /*FTS_NUM_AUX_INDEX*/ *
    (3*@@global.innodb_sort_buffer_size) + 2 * (
    @@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=#
    システム変数 名前 innodb_spin_wait_delay
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 6
    最小値 0
    最大値 4294967295

    スピンロックでのポーリング間の最大遅延です。このメカニズムの低レベルの実装は、ハードウェアとオペレーティングシステムの組み合わせによって異なるため、遅延は一定の時間間隔に対応しません。デフォルト値は 6 です。詳細は、セクション14.13.10「スピンロックのポーリングの構成」を参照してください。

  • innodb_stats_auto_recalc

    導入 5.6.6
    コマンド行形式 --innodb_stats_auto_recalc=#
    システム変数 名前 innodb_stats_auto_recalc
    変数スコープ グローバル
    動的変数 はい
    許可されている値 ブール
    デフォルト ON

    テーブル内のデータが大幅に変更されたあとは、InnoDB によって自動的に永続的統計が再計算されます。現在のしきい値は、テーブル内の行の 10% です。この設定は、innodb_stats_persistent オプションが有効になっている場合や、CREATE TABLE または ALTER TABLE ステートメントで STATS_PERSISTENT=1 句が有効になっている場合に、作成されたテーブルに適用されます。統計を生成するためにサンプルとして取得されるデータの量は、innodb_stats_persistent_sample_pages 構成オプションで制御されます。

    innodb_stats_auto_recalc に関する追加情報については、セクション14.13.16.1「永続的オプティマイザ統計のパラメータの構成」を参照してください。

  • innodb_stats_method

    導入 5.6.2
    コマンド行形式 --innodb_stats_method=name
    システム変数 名前 innodb_stats_method
    変数スコープ グローバル
    動的変数 はい
    許可されている値 列挙
    デフォルト nulls_equal
    有効な値 nulls_equal
    nulls_unequal
    nulls_ignored

    InnoDB テーブルのインデックス値の分布に関する統計を収集するときに、サーバーが NULL 値を処理する方法です。この変数は、nulls_equalnulls_unequal、および nulls_ignored の 3 つの値を指定できます。nulls_equal の場合、すべての NULL インデックス値を同等として扱い、NULL 値の数とサイズが同等の単一値グループを生成します。nulls_unequal の場合、NULL 値同士を同等として扱わず、それぞれの NULL はサイズが 1 の別個のグループを生成します。nulls_ignored の場合、NULL 値は無視されます。

    テーブル統計を生成するために使用する方法は、セクション8.3.7「InnoDB および MyISAM インデックス統計コレクション」に記載されているように、オプティマイザがクエリー実行のためのインデックスを選択する方法に影響を与えます。

  • innodb_stats_on_metadata

    コマンド行形式 --innodb_stats_on_metadata
    システム変数 名前 innodb_stats_on_metadata
    変数スコープ グローバル
    動的変数 はい
    許可されている値 (<= 5.6.5) ブール
    デフォルト ON
    許可されている値 (>= 5.6.6) ブール
    デフォルト OFF

    この変数を有効にすると、SHOW TABLE STATUSSHOW INDEX などのメタデータステートメントが実行されるときや、INFORMATION_SCHEMA テーブル TABLES または STATISTICS にアクセスするときに、InnoDB によって統計が更新されます。(これらの更新は、ANALYZE TABLE で実行されるものに似ています。)無効にすると、これらの操作時に InnoDB によって統計が更新されません。この設定を無効のままにすると、多数のテーブルまたはインデックスを持つスキーマのアクセス速度を改善できます。InnoDB テーブルが関与するクエリーの実行計画の安定性も改善できます。

    設定を変更するには、SET GLOBAL innodb_stats_on_metadata=mode ステートメントを発行します。ここで、modeONOFF のいずれか (または 10 のいずれか) です。この設定を変更するには、SUPER 権限が必要です。変更すると、すべての接続の操作がすぐに影響を受けます。

    MySQL 5.6.6 の時点では、この変数はデフォルトで無効になっています。それよりも前では、有効になっています。

  • innodb_stats_persistent

    導入 5.6.6
    コマンド行形式 --innodb_stats_persistent=setting
    システム変数 名前 innodb_stats_persistent
    変数スコープ グローバル
    動的変数 はい
    許可されている値 ブール
    デフォルト ON
    有効な値 OFF
    ON
    0
    1

    InnoDB インデックスの統計がディスクに保持されるかどうかを指定します。それ以外の場合は、頻繁に統計が再計算される可能性があります。これにより、クエリーの実行計画が変化する可能性があります。テーブルが作成されると、この設定が各テーブルとともに格納されます。テーブルを作成する前にグローバルレベルで innodb_stats_persistent を設定することも、CREATE TABLE および ALTER TABLE ステートメントで STATS_PERSISTENT 句を使用して、システム全体の設定をオーバーライドし、個々のテーブルの永続的統計を構成することもできます。

    このオプションについての詳細は、セクション14.13.16.1「永続的オプティマイザ統計のパラメータの構成」を参照してください。

  • innodb_stats_persistent_sample_pages

    導入 5.6.2
    コマンド行形式 --innodb_stats_persistent_sample_pages=#
    システム変数 名前 innodb_stats_persistent_sample_pages
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 20

    インデックス付きカラムのカーディナリティーやその他の統計 (ANALYZE TABLE で計算された統計など) を見積もるときに、サンプルとして取得されるインデックスページの数です。値を大きくすると、クエリーの実行計画を改善するインデックス統計の精度が改善されますが、InnoDB テーブルに対する ANALYZE TABLE の実行時に I/O が増加することになります。追加情報については、セクション14.13.16.1「永続的オプティマイザ統計のパラメータの構成」を参照してください。

    注記

    innodb_stats_persistent_sample_pages に大きな値を設定すると、ANALYZE TABLE の実行時間が長くなる可能性があります。アクセスされるデータベースページの数を見積もる方法については、セクション14.13.17「InnoDB テーブルに対する ANALYZE TABLE の複雑さの推定」を参照してください。

    このオプションは、テーブルで innodb_stats_persistent 設定がオンになっている場合にのみ適用されます。このオプションがテーブルでオフになっている場合は、代わりに innodb_stats_transient_sample_pages 設定が適用されます。

  • innodb_stats_sample_pages

    非推奨 5.6.3
    コマンド行形式 --innodb_stats_sample_pages=#
    システム変数 名前 innodb_stats_sample_pages
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 8
    最小値 1
    最大値 2**64-1

    非推奨です。代わりに innodb_stats_transient_sample_pages を使用してください。

  • innodb_stats_transient_sample_pages

    導入 5.6.2
    コマンド行形式 --innodb_stats_transient_sample_pages=#
    システム変数 名前 innodb_stats_transient_sample_pages
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 8

    インデックス付きカラムのカーディナリティーやその他の統計 (ANALYZE TABLE で計算された統計など) を見積もるときに、サンプルとして取得されるインデックスページの数です。デフォルト値は 8 です。値を大きくすると、インデックス統計の精度が改善されます。これにより、クエリーの実行計画を改善できますが、InnoDB テーブルを開くときや統計を再計算するときに I/O が増加するという犠牲が伴います。追加情報については セクション14.13.16.2「非永続的オプティマイザ統計のパラメータの構成」を参照してください。

    注記

    innodb_stats_transient_sample_pages に大きな値を設定すると、ANALYZE TABLE の実行時間が長くなる可能性があります。アクセスされるデータベースページの数を見積もる方法については、セクション14.13.17「InnoDB テーブルに対する ANALYZE TABLE の複雑さの推定」を参照してください。

    このオプションは、テーブルで innodb_stats_persistent 設定がオフになっている場合にのみ適用されます。このオプションがテーブルでオンになっている場合は、代わりに innodb_stats_persistent_sample_pages 設定が適用されます。innodb_stats_sample_pages オプションの場所を取得します。

  • innodb_status_output

    導入 5.6.16
    コマンド行形式 --innodb_status_output
    システム変数 名前 innodb_status_output
    変数スコープ グローバル
    動的変数 はい
    許可されている値 ブール
    デフォルト OFF

    標準 InnoDB Monitor の定期的な出力を有効または無効にする際に使用されます。また、InnoDB Lock Monitor の定期的な出力を有効または無効にする際に、innodb_status_output_locks と組み合わせて使用されます。追加情報については、セクション14.15「InnoDB モニター」を参照してください。

  • innodb_status_output_locks

    導入 5.6.16
    コマンド行形式 --innodb_status_output_locks
    システム変数 名前 innodb_status_output_locks
    変数スコープ グローバル
    動的変数 はい
    許可されている値 ブール
    デフォルト OFF

    InnoDB Lock Monitor の定期的な出力を有効または無効にする際に使用されます。innodb_status_output と組み合わせて使用する必要があります。追加情報については、セクション14.15「InnoDB モニター」を参照してください。

  • innodb_strict_mode

    コマンド行形式 --innodb_strict_mode=#
    システム変数 名前 innodb_strict_mode
    変数スコープ グローバル、セッション
    動的変数 はい
    許可されている値 ブール
    デフォルト OFF

    innodb_strict_modeON にすると、InnoDB は特定の条件に対応した警告ではなく、エラーを返します。デフォルト値は OFF です。

    厳密モードは、SQL 内の無視できる誤字や構文エラー、または操作モードと SQL ステートメントのさまざまな組み合わせによる意図しないその他の結果から保護する際に役立ちます。innodb_strict_modeON にすると、InnoDB は警告を発行して、指定されたステートメントを処理する (意図しない動作が伴う可能性があります) のではなく、特定のケースでエラー状況が発生します。これは、MySQL で受け入れられる SQL 構文を制御し、警告なしでエラーを無視するのか、入力構文とデータ値を検証するのかを決定する MySQL の sql_mode と類似しています。

    innodb_strict_mode の設定によって、CREATE TABLEALTER TABLE、および CREATE INDEX ステートメントの構文エラー処理が影響を受けます。innodb_strict_mode では、選択したページサイズに対してレコードが大きくなりすぎることが原因で、INSERT または UPDATE が失敗しないように、レコードサイズのチェックも有効になります。

    オラクルでは、CREATE TABLEALTER TABLE、および CREATE INDEX ステートメントで ROW_FORMAT および KEY_BLOCK_SIZE 句を使用する際に、innodb_strict_mode を有効にすることが推奨されています。innodb_strict_modeOFF にすると、InnoDB は競合する句を無視し、テーブルまたはインデックスを作成し、メッセージログに警告のみが表示されます。結果として生成されるテーブルでは、圧縮されたテーブルを作成しようとしても圧縮されないなど、意図したものとは異なる動作が発生する可能性があります。innodb_strict_modeON にすると、このような問題が発生するとすぐにエラーが生成され、テーブルまたはインデックスは作成されないため、後続のトラブルシューティングセッションが回避されます。

    mysqld の起動時にコマンド行で、または my.cnf または my.ini 構成ファイルで、innodb_strict_modeONOFF を切り替えることができます。SET [GLOBAL|SESSION] innodb_strict_mode=mode ステートメントを使用すれば、実行時に innodb_strict_mode を有効または無効にすることもできます。ここで、modeONOFF のいずれかです。GLOBAL 値を変更するには、SUPER 権限が必要です。これを変更すると、それ以降に接続するすべてのクライアントの操作が影響を受けます。任意のクライアントが innodb_strict_modeSESSION 設定を変更でき、そのクライアントのみが設定の影響を受けます。

  • innodb_support_xa

    コマンド行形式 --innodb_support_xa
    システム変数 名前 innodb_support_xa
    変数スコープ グローバル、セッション
    動的変数 はい
    許可されている値 ブール
    デフォルト TRUE

    XA トランザクションの 2 相コミットで InnoDB のサポートを有効にします。これにより、トランザクションの準備時に追加のディスクフラッシュが発生します。この設定はデフォルトです。XA メカニズムは内部で使用されるため、バイナリログがオンになっていて、複数のスレッドからのデータの変更が許可されている任意のサーバーで重要となります。オフにすると、ライブデータベースがコミットするときとは異なる順序で、トランザクションがバイナリログに書き込まれる可能性があります。これにより、ディザスタリカバリ時やレプリケーションスレーブでバイナリログが再現されるときに、異なるデータが生成される可能性があります。1 つのスレッドしかデータを変更できない例外的な設定を使用している場合を除いて、レプリケーションマスターサーバーではオフにしないでください。

    1 つのスレッドからのデータ変更のみが許可されているサーバーでは、InnoDB テーブルのパフォーマンスを改善するために、このオプションをオフにすることが安全であり、推奨されています。たとえば、レプリケーション SQL スレッドのみがデータを変更するレプリケーションスレーブでは、オフにすることができます。

    また、安全なバイナリロギングまたはレプリケーションで必要でなく、外部の XA トランザクションマネージャーを使用しない場合でも、このオプションをオフにすることができます。

  • innodb_sync_array_size

    導入 5.6.3
    コマンド行形式 --innodb_sync_array_size=#
    システム変数 名前 innodb_sync_array_size
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 数値
    デフォルト 1
    最小値 1
    最大値 1024

    大量の待機中スレッドを含むワークロードの並列性を高くするために、スレッドの調整に使用される内部データ構造を分割します。この設定は MySQL インスタンスの起動時に構成する必要があり、あとで変更することはできません。大量の (一般に 768 を超える) 待機中スレッドが頻繁に生成されるワークロードでは、このオプション値を大きくすることをお勧めします。

  • innodb_sync_spin_loops

    コマンド行形式 --innodb_sync_spin_loops=#
    システム変数 名前 innodb_sync_spin_loops
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 30
    最小値 0
    最大値 4294967295

    スレッドが中断される前に、InnoDB 相互排他ロックが開放されるまでスレッドが待機する回数です。デフォルト値は 30 です。

  • innodb_table_locks

    コマンド行形式 --innodb_table_locks
    システム変数 名前 innodb_table_locks
    変数スコープ グローバル、セッション
    動的変数 はい
    許可されている値 ブール
    デフォルト TRUE

    autocommit = 0 の場合、InnoDBLOCK TABLES の要求を受け入れます。MySQL はすべてのスレッドがテーブルに対するすべてのロックを解放するまで、LOCK TABLES ... WRITE から戻りません。innodb_table_locks のデフォルト値は 1 です。これは、autocommit = 0. の場合、LOCK TABLES によって InnoDB がテーブルを内部的にロックすることを意味します。

    MySQL 5.6 では、LOCK TABLES ... WRITE を使用して明示的にロックされたテーブルには、innodb_table_locks = 0 が無効です。LOCK TABLES ... WRITE で暗黙的に (たとえば、トリガーを使用して)、または LOCK TABLES ... READ によって、読み取りまたは書き込み用にロックされたテーブルには有効です。

  • innodb_thread_concurrency

    コマンド行形式 --innodb_thread_concurrency=#
    システム変数 名前 innodb_thread_concurrency
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 0
    最小値 0
    最大値 1000

    InnoDB は、この変数で指定された制限以下の数のオペレーティングシステムスレッドを同時に InnoDB 内部に保持しようと試みます (InnoDB では、ユーザートランザクションを処理する際にオペレーティングシステムのスレッドが使用されます)。スレッド数がこの制限に達すると、それ以降のスレッドは実行されるまで、先入れ先出し (FIFO) キュー内で待機状態になります。ロックを待機しているスレッドは、並列実行中のスレッドの数にカウントされません。

    この変数の範囲は 0 から 1000 までです。値 0 (デフォルト) は、無制限の並列性 (並列性チェックなし) と解釈されます。スレッドの並列性チェックを無効にすると、InnoDB は必要な数だけのスレッドを作成できます。値を 0 にすると、InnoDB 内部のクエリーおよび SHOW ENGINE INNODB STATUS 出力の ROW OPERATIONS セクションにあるキューカウンタ内のクエリーも無効になります。

    MySQL インスタンスとその他のアプリケーションで CPU リソースを共有している場合や、ワークロードまたは並列ユーザー数が増加している場合は、この変数を設定することを検討してください。適切な設定は、ワークロード、コンピューティング環境、および実行中の MySQL のバージョンによって異なります。最適なパフォーマンスを実現する設定を決定するには、広範囲の値をテストする必要があります。innodb_thread_concurrency は動的な変数であるため、これを使用すれば、ライブテストシステムでさまざまな設定を試みることができます。特定の設定でパフォーマンスが低下した場合は、すぐに innodb_thread_concurrency を 0 に戻してください。

    次のガイドラインに従うと、適切な設定を見つけて保持する際に役立ちます。

    • ワークロードに対する並列ユーザースレッドの数が 64 よりも少ない場合は、innodb_thread_concurrency=0 を設定します。

    • ワークロードの負荷が常に高い場合や、ときどき急上昇する場合は、初めに innodb_thread_concurrency=128 を設定してから、最適なパフォーマンスが実現されるスレッド数が見つかるまで、値を 96、80、64 と小さくしてください。たとえば、システムに通常は 40 - 50 のユーザーが存在しますが、定期的にその数が 60、70、さらには 200 まで上昇すると仮定します。パフォーマンスは、並列ユーザーが 80 のときは安定していますが、この数を上回ると低下が見られ始めます。この場合、パフォーマンスへの影響を回避するには、innodb_thread_concurrency=80 を設定します。

    • InnoDB でユーザースレッド用に特定の数を上回る vCPU (たとえば、20 個の vCPU) が使用されないようにする場合は、innodb_thread_concurrency をその数 (またはパフォーマンスの結果によっては、さらに小さい数) に設定します。MySQL をその他のアプリケーションから分離することが目的である場合は、排他的に mysqld プロセスを vCPU にバインドすることを検討してみてください。ただし、mysqld プロセスの負荷が常に高いわけではない場合は、排他的なバインドによって最適なハードウェアの使用が実現されない可能性があります。この場合、mysqld プロセスを vCPU にバインドしても、その他のアプリケーションも vCPU の一部または全部を使用できます。

      注記

      オペレーティングシステムの観点から見ると、mysqld プロセスをバインドするよりも、リソース管理ソリューションを使用して (使用可能な場合)、アプリケーション間で CPU 時間を共有する方法を管理する方が適切な場合があります。たとえば、その他のクリティカルなプロセスが実行されていない場合は、vCPU 時間の 90% を特定のアプリケーションに割り当て、その他のクリティカルなプロセスが実行されている場合は、その値を 40% に戻します。

    • innodb_thread_concurrency の値が大きすぎると、システム内部およびリソース上の競合が増加するため、パフォーマンスが低下する可能性があります。

    • 場合によっては、最適な innodb_thread_concurrency が vCPU の数よりも小さくなる可能性もあります。

    • 定期的にシステムをモニターし、分析してください。ワークロード、ユーザー数、またはコンピューティング環境を変更するために、innodb_thread_concurrency 設定の調整が必要なことがあります。

    関連情報については、セクション14.13.5「InnoDB のスレッド並列性の構成」を参照してください。

  • innodb_thread_sleep_delay

    コマンド行形式 --innodb_thread_sleep_delay=#
    システム変数 名前 innodb_thread_sleep_delay
    変数スコープ グローバル
    動的変数 はい
    許可されている値 (>= 5.6.17) 数値
    デフォルト 10000
    最小値 0
    最大値 1000000
    許可されている値 (32 ビットプラットフォーム, <= 5.6.16) 数値
    デフォルト 10000
    最小値 0
    最大値 4294967295
    許可されている値 (64 ビットプラットフォーム, <= 5.6.16) 数値
    デフォルト 10000
    最小値 0
    最大値 18446744073709551615

    InnoDB キューに参加するまでに、InnoDB スレッドがスリープ状態になる期間 (マイクロ秒単位) です。デフォルト値は 10000 です。0 の値はスリープを無効にします。MySQL 5.6.3 以降では、構成オプション innodb_adaptive_max_sleep_delayinnodb_thread_sleep_delay で許可される最大の値に設定でき、InnoDB によって自動的に、現在のスレッドスケジューリングアクティビティーに応じて innodb_thread_sleep_delay が上下に調整されます。この動的な調整は、システムにかかる負荷が軽い期間や、システムがほぼ容量いっぱいで動作している期間に、スレッドスケジューリングメカニズムがスムーズに機能するのに役立ちます。

    詳細は、セクション14.13.5「InnoDB のスレッド並列性の構成」を参照してください。

  • innodb_undo_directory

    導入 5.6.3
    コマンド行形式 --innodb_undo_directory=dir_name
    システム変数 名前 innodb_undo_directory
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ディレクトリ名
    デフォルト .

    InnoDB が Undo ログ用に個別のテーブルスペースを作成するディレクトリの相対パスまたは絶対パスです。一般に、これらのログを別のストレージデバイス上に配置する際に使用されます。innodb_undo_logs および innodb_undo_tablespaces と組み合わせて使用すると、システムテーブルスペース外の Undo ログのディスクレイアウトが決定されます。デフォルト値の . は、InnoDB がデフォルトでその他のログファイルを作成するディレクトリと同じであることを表します。

  • innodb_undo_logs

    導入 5.6.3
    コマンド行形式 --innodb_undo_logs=#
    システム変数 名前 innodb_undo_logs
    変数スコープ グローバル
    動的変数 はい
    許可されている値 数値
    デフォルト 128
    最小値 0
    最大値 128

    トランザクション内で InnoDB が使用するシステムテーブルスペースにあるロールバックセグメントの数を定義します。この設定は、Undo ログに関連する相互排他競合が観察された場合のパフォーマンスのチューニングに適切です。innodb_rollback_segments 設定から置き換えられました。アクティブな Undo ログではなく、使用可能な Undo ログの合計数については、Innodb_available_undo_logs ステータス変数を参照してください。

    トランザクション内で使用されるロールバックセグメントの数は大きくしたり、小さくしたりできますが、システム内に物理的に存在するロールバックセグメントの数は減少しません。したがって、あとで必要でなくなるロールバックセグメントが割り当てられることを回避するために、このパラメータは小さい値から始めて徐々に大きくするとよいでしょう。innodb_undo_logs が設定されていない場合は、デフォルトの最大値が 128 になります。ロールバックセグメントの管理については、セクション14.2.12「InnoDB マルチバージョン」を参照してください。

  • innodb_undo_tablespaces

    導入 5.6.3
    コマンド行形式 --innodb_undo_tablespaces=#
    システム変数 名前 innodb_undo_tablespaces
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 数値
    デフォルト 0
    最小値 0
    最大値 126

    ゼロ以外の innodb_undo_logs 設定を使用する場合に、Undo ログが分割されるテーブルスペースファイルの数です。デフォルトでは、すべての Undo ログはシステムテーブルスペースの一部であり、システムテーブルスペースには、innodb_undo_tablespaces で構成されたものに加えて、常に 1 つの Undo テーブルスペースが含まれています。長時間実行されるトランザクション中に Undo ログが大きくなる可能性があるため、Undo ログを複数のテーブルスペースに分割すると、任意の 1 つのテーブルスペースの最大サイズが削減されます。テーブルスペースファイルは、innodb_undo_directory で定義された場所に、undoN 形式の名前で作成されます。ここで N は、先頭のゼロを含む一連の連続する整数です。Undo テーブルスペースファイルのデフォルトサイズは 10M です。はじめて InnoDB を初期化するときは、innodb_undo_tablespaces の数を設定する必要があります。最初にデータベースを作成したときに指定したときよりも多くの数の Undo テーブルスペースを持つ InnoDB を再起動しようとすると、起動に失敗し、InnoDB で予期された数の Undo テーブルスペースが見つからなかったことを示すエラーが表示されます。

  • innodb_use_native_aio

    コマンド行形式 --innodb_use_native_aio=#
    システム変数 名前 innodb_use_native_aio
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール
    デフォルト ON

    Linux の非同期 I/O サブシステムを使用するかどうかを指定します。この変数は Linux システムにのみ適用され、サーバーの実行中は変更できません。このオプションはデフォルトで有効になっているため、通常は触れる必要がありません。

    MySQL 5.5 の時点では、Windows システム上の InnoDB に備わっている非同期 I/O 機能が Linux システムでも使用できます。(その他の Unix に似たシステムでは、引き続き同期 I/O 呼び出しが使用されます。)この機能によって、I/O 負荷の高いシステムの拡張性が改善されます。一般に、SHOW ENGINE INNODB STATUS\G コマンドの出力に数多くの中断された読み取り/書き込みが表示されます。

    大量の 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 を無効にして (オプションファイルで innodb_use_native_aio=0 を使用します)、サーバーを起動してください。また、InnoDBtmpdir の場所、tmpfs ファイルシステム、および tmpfs 上で AIO がサポートされていない Linux カーネルなどを組み合わせた潜在的な問題が検出された場合に、このオプションが起動中に自動的にオフになる可能性もあります。

  • innodb_use_sys_malloc

    非推奨 5.6.3
    コマンド行形式 --innodb_use_sys_malloc=#
    システム変数 名前 innodb_use_sys_malloc
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ブール
    デフォルト ON

    InnoDB がオペレーティングシステムのメモリーアロケータを使用するのか (ON)、独自のものを使用するのか (OFF) を指定します。デフォルト値は ON です。詳細は、セクション14.13.3「InnoDB のためのメモリーアロケータの構成」を参照してください。

    MySQL 5.6.3 の時点では、innodb_use_sys_malloc は非推奨となり、今後の MySQL リリースで削除される予定です。

  • innodb_version

    InnoDB のバージョン番号です。5.6.11 以降では、InnoDB ごとに個別の番号付与が廃止され、この値は version 変数の番号と同じです。

  • innodb_write_io_threads

    コマンド行形式 --innodb_write_io_threads=#
    システム変数 名前 innodb_write_io_threads
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 数値
    デフォルト 4
    最小値 1
    最大値 64

    InnoDB の書き込み操作で使用される I/O スレッドの数です。デフォルト値は 4 です。読み取りスレッドで対応するものは、innodb_read_io_threads です。詳細は、セクション14.13.6「InnoDB バックグラウンド I/O スレッドの数の構成」を参照してください。一般的な I/O チューニングのアドバイスについては、セクション8.5.7「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.7「InnoDB ディスク I/O の最適化」を参照してください。


User Comments
  Posted by Morgan Tocker on December 28, 2006
Be careful when being too aggressive with settings like innodb_buffer_pool_size. Although your system might have a lot of RAM installed, a 32-bit Linux operating can't allocate more than 2.2-2.7G* per process.

* This limit varies in different kernels.
  Posted by Brian Aker on August 16, 2007
Commentary on Innodb parameters for an 8way machine:
http://krow.livejournal.com/542306.html
  Posted by Willem de Groot on September 20, 2007
Changing innodb_log_file_size can yield strange errors, such as: Incorrect information in file: './db010840/notifications.frm'

This is particularly of importance when performing a file based sync to setup replication. If you have a different (or no) innodb_log_file_size setting at the slave, you will be puzzled for hours (I was).

  Posted by Simon Mudd on October 13, 2009
NOTE: The time to Initialise the innodb buffer pool is roughly proportional to the size of the pool created. On large installations[*] this initialisation time may be significant.

[*] 2009/10 Initialising a 10 GB buffer pool takes 6 seconds, larger configurations may take proportionally longer.

  Posted by K Thomas Kuruvilla on July 16, 2012
It would have been better if the parameters given in here were with concrete examples. I hope it would be done in the future releases.
  Posted by Morgan Tocker on November 15, 2013
I wrote a guide for what to tune in MySQL 5.6 after installation here:
http://www.tocker.ca/2013/09/17/what-to-tune-in-mysql-56-after-installation.html
Sign Up Login You must be logged in to post a comment.