ホスティングサービスにおけるDB(データベース)メンテナンスに関する集中連載の第3回として、MySQLへのアクセスを高速化するmemcachedの基本を解説します。また、併せてMySQLに関するTipsをいくつか紹介します。
MySQLを高速化するmemcached
DB(データベース)の巨大化に伴い、レスポンスの向上が課題となっています。その解決策の1つとして脚光を浴びているのが、分散型メモリキャッシュサーバであるmemcachedです。memcachedはDBへのアクセスをキャッシュしてアクセス回数を減少させることで、アクセスの高速化とDBの負荷軽減を実現します。また分散システムに対応し、スケーラビリティの向上にも貢献します。
当初はLiveJournalという、英語圏で主に用いられるCMS(コンテンツ・マネジメント・システム)向けに開発されたmemcachedですが、現在ではLiveJournalのほか、WikipediaやYouTube、mixiなどの大規模サイトでも利用されています。
memcachedの特長
では、memcachedの主な特長を簡単に紹介しましょう。
- クロスプラットフォーム
- memcachedはLinux/FreeBSD/Solaris/MacOS XなどのUNIX系OSのほか、Windowsでも動作します。選択可能なプラットフォームの幅が広く、導入の障壁は低いといえます。
- プロトコルのシンプルさ
- memcachedのプロトコルは行単位のシンプルなものであり、クエリーからの操作の他、シェルからの操作も可能です。当然、PHPやPerl、Ruby、C/C++、C#などの言語からも接続できます。
- オンメモリでの処理
- キャッシュデータは、memcached内蔵のオンメモリストレージに格納します。このため高速に処理可能な半面、memcachedやOSを再起動すると、キャッシュデータが保持されないという難点もあります。
- 分散処理はクライアントで実現
- 分散型キャッシュサーバであるmemcachedですが、実はmemcached同士の通信機能は持たず、自身には分散機能を備えていません。分散処理はmemcachedの機能を利用しつつ、クライアント側で実現します。
- libeventの利用
- memcachedはlibeventという外部ライブラリを使用します。このため、memcachedを利用するにはlibeventもインストールする必要があります。
実際の利用
memcachedのインストールに先立って、前述の外部ライブラリlibeventを忘れずにインストールしましょう。インストールを終えたら、一般的なサーバプログラムと同様にシェルから起動します。デーモンとしての起動も、もちろん可能です。
memcachedをインストールしたからといっても、そのままでは高速化されません。クライアントプログラムやスクリプトをmemcachedを利用するように変更する必要があります。プログラムなどは自力で書き換えても構いませんが、言語別のモジュールが公開されているので、それを利用するのが早道です。
MySQLのTips
集中連載の最後として、MySQLを利用する上で知っていると便利な小技をいくつか紹介します。
データのバックアップ
MySQLデータのバックアップ/リストアで最も単純な方法は、データファイルのコピーです。ストレージエンジンの種類により方法が少し異なり、一般的なInnoDBではデータディレクトリ以下をそのままコピー/展開すれば事足ります。InnoDBでの手順は、少し複雑になります。
この他、mysqldumpやInnoDB Hot Backupなどのツールを使う方法もあります。
クエリや接続を記録する
すべての接続情報を記録するには、シェルでmysql --logと指定します。
これにより、いつ誰がどのホストから接続し、どのようなクエリを実行したかを記録できます。
- 参考文献
- gihyo.jp 特集「memcachedを知り尽くす」
- 日本MySQLユーザ会