mymemcheckによるmy.cnfの妥当性チェック

概要

KLab株式会社さんの自家製ツールであるmymemcheckを使うと、my.cnf(もしくはSHOW VARIABLESの結果)をもとに、

  • 最低限必要な物理メモリの大きさ
  • IA-32Linuxでのヒープサイズの制限
  • innodb_log_file_sizeの最大サイズ

をチェックすることができます。
mymemcheckはDSAS開発者の部屋:5分でできる、MySQLのメモリ関係のチューニング!からダウンロードできます。



構成

CentOS 5.6 (Final)
MySQL Ver 14.14 Distrib 5.5.15, for Linux (x86_64) using readline 5.1



インストール

CPANから必要なモジュールをインストールします。

# cpan install Readonly
# cpan install UNIVERSAL::require

モジュールが不足していると、実行時に次のようなエラーメッセージが出力されます。

$ bin/mymemcheck /etc/my.cnf
Can't locate Readonly.pm in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at bin/mymemcheck line 7.
BEGIN failed--compilation aborted at bin/mymemcheck line 7.

mymemcheck自体はPerlスクリプトです。適当なディレクトリに置いて実行します。

$ cd ~/bin
$ wget http://log.blog.klab.org/support/20061226/mymemcheck.gz
$ gunzip mymemcheck.gz



実行

引数にmy.cnfへのパスを渡します。

$ mymemcheck /etc/my.cnf

my.cnfの設定項目が不足していると、次のようなエラーメッセージが出力されます。

$ mymemcheck /etc/my.cnf
[ABORT] missing variables:
  sort_buffer_size
  net_buffer_length
  key_buffer_size
  innodb_additional_mem_pool_size
  innodb_log_files_in_group

my.cnfに問題がなければ、実行結果は3つのチェック内容に分かれて表示されます。それぞれがタイトルシステム変数と式結果から成ります。


最低限必要な物理メモリの大きさ
[ minimal memory ]
...
min_memory_needed = global_buffers + (thread_buffers * max_connections)
                  = 12968804352 + 5505024 * 2000
                  = 23978852352 (22.332 [G])


IA-32Linuxでのヒープサイズの制限
[ 32bit Linux x86 limitation ]
...
          2G > 20.309 [G] ... LIMIT OVER!!


innodb_log_file_sizeの最大サイズ
[ maximum size of innodb_log_file_size ]
...
    innodb_log_file_size < MAX_innodb_log_file_size
               134217728 < 6442450944
             128.000 [M] < 6.000 [G] ... safe