人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLのInnoDBのキャッシュについて、
質問させてください。

まずInnoDBでは、
クエリキャッシュは働くのでしょうか。

http://dev.mysql.com/doc/refman/5.1/ja/storage-engine-choosing.html

上記によると使えるようなのですが、
InnoDBはバッファプールがあり、
クエリキャッシュ用に確保している領域とは、
別であると認識しています。

とすると、
InnoDBにてクエリを発行した際の処理順序は、

1.クエリキャッシュ内にあればそこからデータを返却
2.バッファプール内に対象レコードの情報があれば底からデータを返却
3.上記いずれにもない場合はディクス領域のテーブルデータから返却

間違っている部分などありましたら指摘いただきたいです。

よろしくお願いします。

●質問者: the_yakisoba
●カテゴリ:コンピュータ インターネット
✍キーワード:innodb MySQL キャッシュ クエリ データ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● b-wind
●35ポイント

おおよそ合ってるんじゃないですか?

MySQL :: MySQL 5.1 リファレンスマニュアル :: 4.13.1 クエリ キャッシュの動作

クエリキャッシュはその名のとおり、クエリ自体をキャッシュします。

ただし、クエリ自体が一字一句同じ事が前提なので、簡易的なキャッシュと見るほうが正しいでしょう。


対してバッファプールはデータやインデックスの内容自体に対するキャッシュです。

別々のクエリでも同じデータやインデックスにアクセスすることが多ければ有効に使われます。


用途自体が異なるためどちらが良いともいえませんが、適用順序自体は質問文のとおりかと。

◎質問者からの返答

ご回答ありがとうございます。

さらに、

バッファプールに関してですが、

更新の際は変更が加わったレコードのデータが、

参照の際は参照したレコードのデータが、

それぞれバッファプールに追加されるという認識でよいのでしょうか。


2 ● b-wind
●35ポイント

更新の際は変更が加わったレコードのデータが、

参照の際は参照したレコードのデータが、

それぞれバッファプールに追加されるという認識でよいのでしょうか。

うーん、間違ってはいないけどそう言い切ってしまうと語弊があるような。


一般にRDBMSのバッファの管理はそれだけで本一冊かけるぐらい複雑だからねぇ。

MySQL :: MySQL 5.1 リファレンスマニュアル :: 13.5.4 InnoDB 起動オプションとシステム変数

少なくとも、InnoDB だけでも、

- innodb_buffer_pool_size

- innodb_max_dirty_pages_pct

の値は影響するし。


間違ってはいないけどそう単純でもない、と言っておこう。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ