MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  専用 MySQL Server の自動構成の有効化

15.8.12 専用 MySQL Server の自動構成の有効化

innodb_dedicated_server が有効な場合、InnoDB は次の変数を自動的に構成します:

  • innodb_buffer_pool_size

  • innodb_log_file_size

  • innodb_log_files_in_group (MySQL 8.0.14 の時点)

  • innodb_flush_method

MySQL インスタンスが、使用可能なすべてのシステムリソースを使用できる専用サーバーに存在する場合にのみ、innodb_dedicated_server を有効にすることを検討してください。 たとえば、MySQL のみを実行する Docker コンテナまたは専用 VM で MySQL Server を実行する場合は、有効化を検討してください。 MySQL インスタンスが他のアプリケーションとシステムリソースを共有している場合、innodb_dedicated_server を有効にすることはお薦めしません。

次の情報では、各変数が自動的に構成される方法について説明します。

  • innodb_buffer_pool_size

    バッファプールサイズは、サーバーで検出されたメモリー量に従って構成されます。

    表 15.8 自動的に構成されるバッファプールサイズ

    検出されたサーバーメモリー バッファプールサイズ
    1GB 未満 128MiB (デフォルト値)
    1GB から 4GB detected server memory * 0.5
    4GB を超える detected server memory * 0.75

  • innodb_log_file_size

    MySQL 8.0.14 では、ログファイルサイズは自動的に構成されたバッファプールサイズに従って構成されます。

    表 15.9 自動的に構成されるログファイルサイズ

    バッファプールサイズ ログファイルのサイズ
    8GB 未満 512MiB
    8GB から 128GB 1024MiB
    128GB を超える 2048MiB

    注記

    MySQL 8.0.14 より前は、次に示すように、innodb_log_file_size 変数はサーバーで検出されたメモリー量に従って自動的に構成されていました:

    表 15.10 自動的に構成されるログファイルサイズ (MySQL 8.0.13 以前)

    検出されたサーバーメモリー ログファイルのサイズ
    < 1GB 48MiB (デフォルト値)
    <= 4GB 128MiB
    <= 8GB 512MiB
    <= 16GB 1024MiB
    > 16GB 2048MiB

  • innodb_log_files_in_group

    ログファイルの数は、自動的に構成されたバッファプールサイズ (GB) に従って構成されます。 innodb_log_files_in_group 変数の自動構成が MySQL 8.0.14 に追加されました。

    表 15.11 自動的に構成されるログファイルの数

    バッファプールサイズ ログファイル数
    8GB 未満 ROUND(buffer pool size)
    8GB から 128GB ROUND(buffer pool size * 0.75)
    128GB を超える 64

    注記

    丸められたバッファープールサイズの値が 2G バイト未満の場合、innodb_log_files_in_group の最小値 2 が適用されます。

  • innodb_flush_method

    innodb_dedicated_server が有効になっている場合、flush メソッドは O_DIRECT_NO_FSYNC に設定されます。 O_DIRECT_NO_FSYNC 設定を使用できない場合は、デフォルトの innodb_flush_method 設定が使用されます。

    InnoDB は、I/O,のフラッシュ中に O_DIRECT を使用しますが、書込み操作のたびに fsync() システムコールをスキップします。

    警告

    MySQL 8.0.14 より前では、この設定は XFS や EXT4 などのファイルシステムには適していません。これらのファイルシステムでは、fsync() システムコールを使用してファイルシステムメタデータの変更を同期する必要があります。

    MySQL 8.0.14 の時点では、fsync() は、新しいファイルの作成後、ファイルサイズの増加後およびファイルのクローズ後にコールされ、ファイルシステムメタデータの変更が確実に同期されます。 各書込み操作の後も、fsync() システムコールはスキップされます。

    redo ログファイルとデータファイルが異なるストレージデバイスに存在し、データファイルの書込みがバッテリバックされていないデバイスキャッシュからフラッシュされる前に予期しない終了が発生した場合、データが失われる可能性があります。 redo ログファイルおよびデータファイルに別の記憶域デバイスを使用する場合、およびデータファイルがバッテリバックアップされていないキャッシュを持つデバイスに存在する場合は、かわりに O_DIRECT を使用します。

自動的に構成されたオプションがオプションファイルまたは他の場所で明示的に構成されている場合は、明示的に指定された設定が使用され、次のような起動警告が stderr に出力されます:

[警告] [000000] InnoDB: innodb_buffer_pool_size=134217728 が明示的に指定されているため、innodb_buffer_pool_size ではオプション innodb_dedicated_server は無視されます。

あるオプションを明示的に構成しても、他のオプションの自動構成は妨げられません。

innodb_dedicated_server が有効で、innodb_buffer_pool_size がオプションファイルで明示的に構成されている場合でも、innodb_log_file_size および innodb_log_files_in_group は、バッファプールのサイズの構成に使用されていなくても、サーバーで検出されたメモリー量に基づいて計算されたバッファプールサイズ値に基づいて自動的に構成されます。

自動的に構成された設定は、MySQL サーバーが起動されるたびに必要に応じて評価および再構成されます。


関連キーワード:  InnoDB, 構成, テーブル, 圧縮, スペース, ロック, size, インデックス, INFORMATION, SCHEMA