moodleのmemcached設定

前にWindows IIS+PHP環境でのmemcachedモジュール組み込みを書きましたが、今度はmoodleでの設定編です。
確認はWindows Server 2008R2 + IIS7.5 + mySQLの環境内にローカルでmemcachedを立ち上げるもっとも単純な構成です。
他の環境でもこのあたりは同じはずです。

Moodle側の設定

サイト管理-サーバ - パフォーマンス で設定します。

  • キャッシュタイプ:memchached
  • レコードキャッシュ:Yes
  • memcachedホスト:IPアドレスを指定。今回はローカルなので172.0.0.1を指定します。
  • memcachedが持続的接続を使用する:Yes

動作確認

memcachedに限らずキャッシュの仕組みはそれが無くとも動くようになっている事が多いので、設定をしてもちゃんと動作していないケースがあります。
今回の場合はmemcachedの状態を確認するのが一番です。

動作に使うアプリ

telnetmemcachedのポート(11211)に接続して利用します。
Windows Server 2008の初期状態ではインストールされていないので、「機能の追加」でMS提供のtelnetをインストールしておきます。「Telnet クライアント」だけインストールします。
コマンド プロンプトで以下のコマンドでmemcachedに接続できます。

telnet localhost 11211

特にメッセージやプロンプトは出ません。

memcachedの動作確認

ここで状態を見るにはstatsコマンドを使います。

stats
STAT pid 1376
STAT uptime 3054789333
STAT time 35116133
STAT version 1.4.4-14-g9c660c
STAT pointer_size 64
STAT curr_connections 10
STAT total_connections 13
STAT connection_structures 12
STAT cmd_get 369
STAT cmd_set 64
STAT cmd_flush 1
STAT get_hits 150
STAT get_misses 219
STAT delete_misses 51
STAT delete_hits 28
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 34391
STAT bytes_written 87341
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 7369
STAT curr_items 15
STAT total_items 64
STAT evictions 0
END
キャッシュの中身を確認

実際にmoodleのキャッシュがされるか確認するには少しmoodleを動作させてから行います。
まずstats slabsコマンドを実行します。

stats slabs
STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
STAT 1:total_pages 1
STAT 1:total_chunks 10922
STAT 1:used_chunks 1
STAT 1:free_chunks 1
STAT 1:free_chunks_end 10920
STAT 1:mem_requested 87
STAT 1:get_hits 0
STAT 1:cmd_set 18
STAT 1:delete_hits 0
STAT 1:incr_hits 0
STAT 1:decr_hits 0
STAT 1:cas_hits 0
STAT 1:cas_badval 0
STAT 2:chunk_size 120
STAT 2:chunks_per_page 8738
STAT 2:total_pages 1
STAT 2:total_chunks 8738
STAT 2:used_chunks 0
STAT 2:free_chunks 1
STAT 2:free_chunks_end 8737
STAT 2:mem_requested 0
STAT 2:get_hits 0
STAT 2:cmd_set 23
STAT 2:delete_hits 23
STAT 2:incr_hits 0
STAT 2:decr_hits 0
STAT 2:cas_hits 0
STAT 2:cas_badval 0
・
略
・
STAT 14:chunk_size 1856
STAT 14:chunks_per_page 564
STAT 14:total_pages 1
STAT 14:total_chunks 564
STAT 14:used_chunks 2
STAT 14:free_chunks 0
STAT 14:free_chunks_end 562
STAT 14:mem_requested 3250
STAT 14:get_hits 19
STAT 14:cmd_set 4
STAT 14:delete_hits 0
STAT 14:incr_hits 0
STAT 14:decr_hits 0
STAT 14:cas_hits 0
STAT 14:cas_badval 0
STAT active_slabs 8
STAT total_malloced 8385360
END

次にスラブの番号を指定してキャッシュの中身を確認します。ここでは14を指定しています。
stats cachedump 14 100

stats cachedump 14 100
ITEM moodleorg|mdl_|course|2 [1555 b; 1275294096 s]
ITEM moodleorg|mdl_|course|1 [1513 b; 1275294096 s]
END

他のシステムでmemcachedを使っている場合は当然他のシステムのキャッシュである可能性も高いのでいくつかスラブの番号を変えてみるか、一覧を表示するスクリプトを利用するなどしてみてください。
キーとして「moodleorg|mdl_|course|2」とあるのでmoodleのデータがキャッシュされているのが分かります。moodle DB名およびテーブルのサフィックスがキーに含まれているので、複数のmoodleを1つのサーバに建てた時にmemcachedを1つだけにしてもキャッシュの混線は起きないようです。
もし一つも上記の様なデータがない場合はうまく動作していないので設定を再度チェックしてみてください。