OpenXでのMySQLチューニングの話
OpenXの場合、impressionをinsertでMySQLに記録するため
物理データファイルのサイズを小さく保つことが大事になります。
特に、インプレッションを記録する
ox_data_raw_ad_impression
テーブルのサイズが重要です。
実数はI/O性能によるので参考にしかなりませんが、
経験的にはデータファイルが800MBを超えたあたりから
急に性能が落ちてきます。
メンテナンススクリプトがテーブルをロックするので、
メンテナンススクリプトの処理時間が長いと
配信が遅延する原因になります。。。
また、データファイルが大きいと
配信自体(ox_data_raw_ad_impressionテーブルへのinsert)自体の
性能も低下する感じです。
と、いうわけで、
- 生データ保持期間を短くする
- (小さくできれば)データファイルを小さくする
生データ保持期間を短くする
OpenXの管理画面で設定します。ログイン ⇒ Administrator account ⇒ マイアカウント ⇒ 全般設定 ⇒ メンテナンス設定
集計後、統計情報の元データを削除しますか にチェック
統計情報を削除するまでの猶予期間(秒) を設定
実際にデータが削除されるのは集計後、統計情報の元データを削除しますか にチェック
統計情報を削除するまでの猶予期間(秒) を設定
メンテナンススクリプト(定期メンテナンス or 自動メンテナンス)が
実行されるタイミングです。
データファイルを小さくできるか調べる
show table statusで調査できます。Data_freeが大きい場合、小さくする余地ありです。
mysql> show table status where name like 'ox_data_raw_ad_impression' \G;
データファイルを小さくする
データファイルが大きくなりすぎた場合、PostgreSQLならVACUUMコマンドで対応しますが
MySQLの場合はOPTIMIZE TABLE句で対応します。
mysql> OPTIMIZE NO_WRITE_TO_BINLOG TABLE ox_data_raw_ad_impression;
分速80MBくらいのスローペースで、テーブルにロックがかかるので、頻繁に実施するか/まとめて実施するかは
システムの特性にあわせて選択するのがよいと思います。