MySQLのInnoDBのキャッシュについて、

質問させてください。

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

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

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

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

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

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

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2008/12/08 23:08:42
  • 終了:2008/12/15 23:10:02

回答(2件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402008/12/08 23:33:37

ポイント35pt

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

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

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

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


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

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


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

id:the_yakisoba

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

さらに、

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

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

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

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

2008/12/09 15:50:19
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402008/12/09 21:16:33

ポイント35pt

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

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

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

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


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

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

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

- innodb_buffer_pool_size

- innodb_max_dirty_pages_pct

の値は影響するし。


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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません