DB、クラウド-実例から学ぶmixiアプリ運用ノウハウ

データベースの見直し前回までの対策でリクエスト数は激減、なんとかルーターが処理しきれるようになりました。次はデータベーススキーマとクエリーの見直しです。WebサービスのボトルネックとなりやすいのがDBサーバーなど、ディスクアクセスが発生するサーバーです。ネギ振りカウンタではMySQLを使用しているの

井上 恭輔

2010年10月20日 20:00

データベースの見直し

前回までの対策でリクエスト数は激減、なんとかルーターが処理しきれるようになりました。次はデータベーススキーマとクエリーの見直しです。WebサービスのボトルネックとなりやすいのがDBサーバーなど、ディスクアクセスが発生するサーバーです。ネギ振りカウンタではMySQLを使用しているのですが、急ごしらえで機能拡張を繰り返していったため、恥ずかしいことにインデックスがうまく効いていないクエリーが含まれていることがわかっていました。

前回でも触れましたが、一見自明な問題に見えても思い込みで対策すると何時まで経っても一番のボトルネックにたどりつかず、対策しても対策しても遅いままという状態になってしまいます。そこで、MySQLにはスロークエリーログという遅いクエリーだけを抽出してくれる機能があるのでそれをみてみました。
→「スロー クエリ ログ(MySQL 5.1 リファレンスマニュアル)」

スロークエリーにはそのクエリーが遅いという情報が載っているだけで、その原因までは記載されていません。原因を特定するには、クエリーに対してEXPLAIN文を発行します。
→「EXPLAIN を使用して、クエリーを最適化する(MySQL 5.1 リファレンスマニュアル)」

さっそくネギ振りのスロークエリーをEXPLAIN文で確認してみたところ、やはりindexの張り忘れが多い状態でしたので、必要なカラムにindexを張りまくりました。

memcached , TT(TokyoTyrant)の活用

MySQL をはじめとしたRDBMSは機能が複雑なだけあって重いです。そこで、更新頻度の低いデータや、読み出しだけのデータに関しては、キャッシュを積極的に活用することでデータベースへの問い合わせを減らすような構成がよく取られます。そして、Webサービスで用いられる分散キャッシュシステムの代表格といえばmemcachedです。memcachedはシンプルでかつサーバーを追加するだけで性能が向上するよう設計されており、現在ではmixiを含む多くの商用Webサービスで利用されているオープンソースソフトウェアです。

memcached はインストールもとても簡単で、PHPやRuby、Perlなどで用意されているクライアントライブラリから簡単に利用できます。注意点としてmemcachedはデータをオンメモリに格納する機能のみを有したシステムなので、サーバーを再起動するなどした場合に蓄えられているデータが揮発してしまう(すべて消去される)ことが挙げられます。

memcachedはデータベースに問い合わせた結果などをメモリ上に保持しておくのによく使われます。キャッシュからデータが取得できなかった場合はデータベースに取りに行くように設計するのがいいでしょう。

アクセスが集中するデータでも消えては困るデータであれば、memcachedではなくデータを永続化できるTokyoTyrantなどのKVS(Key-Value-Store)システムを活用するといいでしょう。

TokyoTyrant はmemcachedと違いデータをファイルに保存するためデータが揮発しない上に、memcachedとほぼ同等のREAD性能を持っています。memcachedとの互換プロトコルがあるため、memcachedとの違いを意識することなく利用できると思います。

TokyoTyrantはレプリケーションはできるのですが、分散する機能をもっていないため、大量のデータを保存できません。そのため、あらかじめデータ量が決まっているコンテンツの保存に向いています。mixiではログイン時刻の記録に使用しています。

ネギ振りカウンタは総ネギ振り回数のカウント用採番システムにTokyoTyrantを使用することで、負荷を低減させています。
→「Tokyo Tyrantによる耐高負荷DBの構築(mixi Engineers’ Blog)」

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30