コアファイルには、実行中のプロセスのステータスとメモリーイメージが記録されます。 バッファープールはメインメモリー内に存在し、実行中のプロセスのメモリーイメージがコアファイルにダンプされるため、mysqld プロセスが終了すると、バッファープールが大きいシステムで大きなコアファイルが生成される可能性があります。
大規模なコアファイルは、書込みにかかる時間、それらが消費するディスク領域の量、大規模なファイルの転送に関連する課題など、様々な理由で問題になる可能性があります。
コアファイルサイズを減らすには、innodb_buffer_pool_in_core_file
変数を無効にして、コアダンプからバッファプールページを省略します。 innodb_buffer_pool_in_core_file
変数は MySQL 8.0.14 で導入され、デフォルトで有効になっています。
デバッグ目的で組織内外で共有される可能性のあるコアファイルにデータベースページをダンプすることに懸念がある場合は、セキュリティの観点からバッファプールページを除外することも望ましい場合があります。
一部のデバッグシナリオでは、mysqld プロセスの停止時にバッファプールページに存在するデータへのアクセスが有益な場合があります。 バッファープールページを含めるか除外するかが疑わしい場合は、MySQL サポートに問い合わせてください。
innodb_buffer_pool_in_core_file
の無効化は、core_file
変数が有効で、オペレーティングシステムが madvise() システムコールに対する MADV_DONTDUMP
の POSIX 以外の拡張機能をサポートしている場合にのみ有効になります。これは Linux 3.4 以降でサポートされています。 MADV_DONTDUMP
拡張機能を使用すると、指定した範囲のページがコアダンプから除外されます。
オペレーティングシステムで MADV_DONTDUMP
拡張機能がサポートされている場合は、--core-file
および --innodb-buffer-pool-in-core-file=OFF
オプションを使用してサーバーを起動し、バッファプールページなしでコアファイルを生成します。
shell> mysqld --core-file --innodb-buffer-pool-in-core-file=OFF
core_file
変数は読取り専用で、デフォルトで無効になっています。 これを有効にするには、起動時に --core-file
オプションを指定します。 innodb_buffer_pool_in_core_file
変数は動的です。 起動時に指定するか、SET
ステートメントを使用して実行時に構成できます。
mysql> SET GLOBAL innodb_buffer_pool_in_core_file=OFF;
innodb_buffer_pool_in_core_file
変数が無効になっているが、MADV_DONTDUMP
がオペレーティングシステムでサポートされていない場合、または madvise()
障害が発生した場合は、MySQL サーバーのエラーログに警告が書き込まれ、core_file
変数は、意図せずバッファープールページを含むコアファイルが書き込まれないように無効になります。 読取り専用 core_file
変数が無効になった場合は、サーバーを再起動して再度有効にする必要があります。
次のテーブルに、コアファイルが生成されるかどうか、およびコアファイルにバッファープールページが含まれるかどうかを決定する構成シナリオと MADV_DONTDUMP
サポートシナリオを示します。
表 15.4 コアファイルの構成シナリオ
core_file 変数 |
innodb_buffer_pool_in_core_file 変数 |
madvise() MADV_DONTDUMP のサポート | 結果 |
---|---|---|---|
OFF (デフォルト) | 結果に関連しない | 結果に関連しない | コアファイルは生成されません |
ON | ON (デフォルト) | 結果に関連しない | コアファイルはバッファプールページで生成されます |
ON | OFF | はい | コアファイルはバッファプールページなしで生成されます |
ON | OFF | いいえ | コアファイルが生成されず、core_file が無効になり、サーバーエラーログに警告が書き込まれます |
innodb_buffer_pool_in_core_file
変数を無効にして達成されるコアファイルサイズの縮小は、バッファプールのサイズによって異なりますが、InnoDB
ページサイズの影響も受けます。 ページサイズが小さいほど、同じ量のデータに必要なページが増え、ページが多いほどページメタデータが増えます。 次のテーブルに、ページサイズが異なる 1GB バッファプールで表示されるサイズ削減の例を示します。
表 15.5 バッファープールページが含まれ、除外されているコアファイルのサイズ
innodb_page_size 設定 |
含まれるバッファプールページ (innodb_buffer_pool_in_core_file=ON ) |
除外されたバッファープールページ (innodb_buffer_pool_in_core_file=OFF ) |
---|---|---|
4KB | 2.1GB | 0.9GB |
64KB | 1.7GB | 0.7GB |