AWS RDSのMySQLではクエリキャッシュがデフォルトでオフになっています。
当初はてっきりオンなのかと思っていましたがオフのようです。
しばらく前からクエリキャッシュ自体をやめたほうが良いのではという記事を見かけていましたが、RDSでは実際にオフになっているようです。
ただ経験上、一般公開されているWebサーバであればクエリキャッシュはかなり効果的だと思っています。
特にselectの比率が高い場合(90%以上)には有用かと思います。
まずクエリキャッシュの状況確認のため、各種パラメタの調整にも有用なのでphpMyAdminで接続して確認しておきます。
上記記事を参考にphpMyAdminに接続し、「状態>アドバイザ」を進みます。
クエリキャッシュがオフであることが確認できました。
キャッシュの設定
RDSの場合には設定を「パラメタグループ」という項目で設定します。
RDSのコンソールよりパラメタグループを開き新規作成します。
作成されたらパラメータとRDSインスタンスを関連付けします。
インスタンスの「編集」を開きパラメタグループの指定部分を変更します。
保存します。
「パラメータ」の「変更」を選択します。
query_cache_type
を1に設定します。1
パラメタグループのタイプの適用には「Dynamic」と「Static」があります。2
種別 | 説明 |
---|---|
Static (静的) | 再起動するまで反映されない。 |
Dynamic (動的) | 再起動なしで反映される。ただし多少のタイムラグがある。 |
今回は Static
ですので設定後にRDSを再起動します。
その他、キャッシュ用に確保されるメモリの容量と、キャッシュされる最大値の設定もしておきます。
設定名 | 値 |
---|---|
query_cache_type | 1 |
query_cache_size | 104857600 (100MB) |
query_cache_limit | 104857600 (100MB) |
設定が終わったらRDSを再起動してしばらく待ちます。
再起動が終わったらphpMyAdminから確認します。
キャッシュのヒット率が少ない問問題が表示されていますが、これでキャッシュ自体は有効化されていることが確認されました。
再起動直後のためサーバの起動時間が少なく、ヒット率も低くなってしまいます。しばらく起動を続けてヒット率が上がることを確認します。
またいくつかクエリを投げて結果が早いことを確認しておくと良いでしょう。