ibdata1肥大化解消

学認連携Moodleのibdata1は11GBになっている。よく言われることだが、InnoDBはOSがどのていどのファイルを扱えるか認識できない。肥大化が困るのは、ファイルシステムを食い潰すことであり、最適化したとしても縮小することはない。一度ダンプからリストアするしかない。また、ファイルごとに.idbを作成する「innodb_file_per_table」が効果があるとされており、my.cnfに

innodb_data_file_path = ibdata1:1G
innodb_file_per_table

を記述するという2009年の記事が見られるが、MySQLマニュアルを見ると、MySQL 5.6からこれがデフォルトになるそうだ。つまり、自動的にテーブルごとの.ibdを作成してくれるということである。先日のシステムメンテナンスで学認連携MoodleはMySQL 5.7にバージョンアップした。学認連携Moodleのデータディレクトリを見てみると、

-rw-r----- 1 mysql mysql      8720  3月  8 04:19 mdl_workshop_aggregations.frm
-rw-r----- 1 mysql mysql    147456  3月  8 04:20 mdl_workshop_aggregations.ibd
-rw-r----- 1 mysql mysql      9260  3月  8 04:19 mdl_workshop_assessments.frm
-rw-r----- 1 mysql mysql    147456  3月  8 04:20 mdl_workshop_assessments.ibd
-rw-r----- 1 mysql mysql      9222  3月  8 04:19 mdl_workshop_assessments_old.frm
-rw-r----- 1 mysql mysql    163840  3月  8 04:20 mdl_workshop_assessments_old.ibd

のように、ダンプをリストアする作業を行っていないのもかかわらず、夜中のmysqlcheck時に自動的にこのようになっているようだ。つまりmy.cnfは一切変更する必要はない。

「innodb_data_file_path = ibdata1:1G」について、このサイズを越えたらどうなるのか見当がつかないので、明示的な固定サイズは止めることにした。しかしながら今のままの肥大を続けるのは良くないので、データベースのダンプをリストアする作業は必要である。この結果、ibdata1は11Gから79Mとなり、消費メモリが劇的に減少した。

security-learning のメモリ使用状況。メンテナンス後は空きメモリが劇的に増加している。
security-learning のメモリ使用状況。メンテナンス後は空きメモリが劇的に増加している。

作業手順は次の通り。この記事の流れが非常に参考になった。
“ibdata1肥大化解消” の続きを読む

 

RHEL Server 5.9 で PHP 5.4.11 & MySQL 5.5.29 (remi リポジトリ) を使う

必要があり研究室のWebサーバのPHPとMySQLを更新することに。
基本は remi リポジトリを一時的に有効にして yum –enablerepo=remi,epel –disableexclude=php install php* mysql* で良いはずだがここと同じエラーでハマった。i386 のパッケージを削除して解決。

ところが、このWebが表示されないという問題が発生した。試しに、コマンドでパースできるか試すとエラー。該当のプラグインを削除して解決した。

[uep@hosts02b uep]$ php index.php
PHP Fatal error:  Call-time pass-by-reference has been removed in /var/www/uep/wp-content/plugins/photo-dropper/application/core/Utility.php on line 69