前回の記事「WordPressのリビジョンを削除する。」でMySQLのテーブルからリビジョンのレコードを削除しました。頻繁にMySQLでテーブルのデータを削除しているので、最適化を実施してみます。データベースではデータ登録の際、未使用領域から使用していくためデータサイズが大きくなっていきます。データを削除してもまとまった「空き」がなければ未使用領域が使用されます。最適化を行うことで空き領域をまとめ、そこにデータが書き込まれるようになるためディスク領域の有効活用ができるようになります。また、データの断片化が解消されるためパフォーマンスも良くなります。
[広告]
前回と同様、最適化を行ったMySQLのバージョンは、5.7.23 です。
■OPTIMIZE TABLE テーブル名
最適化を行うMySQLの命令文は「OPTIMIZE TABLE テーブル名」です。WordPressの記事が書かれているテーブルは「wp_posts」テーブルであるため、このテーブルを最適化してみることにします。
mysql> OPTIMIZE TABLE wp_posts;
以下が実行結果です。
問題なく最適化できると思っていたのですが、どうやらこの結果ではダメっぽい。そもそも、statusが「Operation failed」となっているし。「Invalid default value for 'post_date'」というのが原因らしいけれど、さっぱり見当がつきません。
※'post_date'というのは、wp_postsテーブルが持つカラムの一つだけれど、それ以上のことは不明。。
しばらくわからなかったけれども、ある時以下の情報を見つけました。
MySQL 5.6.6 以降でのデフォルトのSQL モードは NO_ENGINE_SUBSTITUTION で、MySQL 5.6.5 以前では、これは空白です (モードの設定なし)。
で、以下をやってみた。
mysql> SET sql_mode = '';
その後、再度、OPTIMIZE TABLE を実行。
「Invalid default value for 'post_date'」が消え、statusが「OK」になりました!
これでテーブルの最適化ができたようです。