アメブロを支えるMySQL:サイバーエージェントのMySQLチューニング術
アメーバブログ(アメブロ)はサイバーエージェントが運営する無料のブログサービスである。同社のデータベースチームは急激に増加し続けるアクセスに対応し、パフォーマンスを維持するために、データベースの改善を続けてきたという。その経緯と現状が、MySQL ユーザコンファレンス 2008の場で紹介された。
アメブロにおけるデータベース改善の歴史
サービスを開始した2006年9月時点では、Active-Standby構成のOracle 10g 2台のみで、MySQLは使用していなかった。これで4億PV(ページビュー)を支えていたという。
その後、アクセスの増加に伴ってハードウェアを拡充し、現在はOracle 10g RAC 4台(Active3台-Standby1台)構成になり、MySQLはマスターに1台、スレイブに41台を導入しているとのこと。
このシステムは2006年10月からMySQLを導入し、記事、コメント、トラックバックの参照画面を順次、MySQLに移行していった。データの移行に際しては、当初は移行用バッチサーバによる移行を計画したが、時間がかかりすぎるためうまくいかなかったという。
そこでOracleのUTL_FILEコマンドでデータを出力し、それをMySQLのLOAD DATA INFILEでインポートした。この方法でレコード数約2億400万件を約4時間程度で移行できたとのことだ。
同時に発行するSQLの改善も行った。これはデータとアクセス数の増加に対して、サーバ増設だけではスケールアウトできなくなったからである。特にrange検索の負荷が大きかったため、ここを中心にSQL改善を行っている。
基本的な方針はINDEXを見直してexplainの結果が「Using index」になるようにし、I/Oの負荷を軽減させること。そのほか、検索結果や検索範囲の制限も行っている。このSQL改修によってSlow Queryは0になり、Disk I/Oも大幅に減少したが、一方でSQLの発行回数はおよそ2倍に増加し、MyISAMキーバッファミス率も0.09%から0.39%まで増大してしまったという。
しかし、肝心のLoad Averageは大幅に減少しており、Disk I/O減少の影響が全体のパフォーマンス改善に大きく寄与したことが確認できたとのことだ。
同社では上記以外にも、実際のデータベース負荷を利用したGNU/LinuxとOpenSolaris、Ext3やXFS、ZFSでのパフォーマンス比較などを行い、今後の改善の方向性を模索しているという。また、将来予定している自作サーバ全面導入に向け、SSDや安価なRAIDカードでのMySQL導入テストも実施しており、セッションおよび同社ブースにおいてその結果がレポートされた。
- ホワイトペーパー







