10bet网址
MySQL 5.6リファレンスマニュアル
下载本手册
PDF(美国高级主任)- 26.8 mb
PDF (A4)- 26.8 mb


8.9.3 MySQLクエリ,キャッシュ

クエリ,キャッシュには,クラ,选择ステ,トメントのテキストが格納されます。あとで同じステートメントを受け取った場合,サーバーはそのステートメントを再度解析して実行する代わりに,クエリーキャッシュから結果を取得します。クエリーキャッシュはセッション間で共有されるため,1つのクライアントで生成された結果セットを,別のクライアントによって発行された同じクエリーへの応答で送信できます。

クエリーキャッシュは,あまり頻繁に変更されないテーブルがあり,それに対してサーバーが多くの同一のクエリーを受け取る環境で役立つことがあります。これは,データベースの内容に基づいて,多くの動的ページを生成する多くのWebサーバーに一般的な状況です。

クエリ,キャッシュは古くなったデ,タを返しません。テ,ブルが変更されると,クエリ,キャッシュ内の関連エントリがフラッシュされます。

注記

同じMyISAMテ,ブルを更新する複数のmysqldサ,バ,がある環境では,クエリ,キャッシュは機能しません。

クエリ,キャッシュは,セクション8.9.3.1“クエリキャッシュの動作”に説明された条件の下で,準備されたステ,トメントに使用されます。

注記

MySQL 5.6.5現在,クエリーキャッシュは,パーティション化されたテーブルに対してはサポートされておらず,パーティション化されたテーブルを含むクエリーには自動的に無効にされます。そのようなクエリ,に対しては,クエリ,キャッシュを有効にできません。(错误# 53775)

クエリ,キャッシュの一部のパフォ,マンスデ,タを次に示します。これらの結果は,2 gバイトのRAMと64バイトのクエリーキャッシュを搭載するLinuxα2×500 mhzシステムで,MySQLベンチマークスイートを実行して生成されました。

  • 実行しているすべてのクエリーは単純です(1行のテーブルから行を選択するなど)が,それでも異なっているため,クエリーをキャッシュできない場合,クエリーキャッシュをアクティブにしておくためのオーバーヘッドは13%です。これは最悪のケ,スのシナリオとみなすことができます。実際には,クエリ,ははるかに複雑になる傾向があるため,オ,バ,ヘッドは通常かなり低くなります。

  • 単一行テーブル内の単一行の検索は,クエリーキャッシュがあると,それがない場合より,238%高速化します。これは,キャッシュされているクエリ,に予想される最小の高速化に近いとみなすことができます。

サ,バ,の起動時にクエリ,キャッシュを無効にするには,query_cache_sizeシステム変数を0に設定します。クエリ,キャッシュコ,ドを無効にすることによって,目立ったオ,バ,ヘッドはなくなります。

クエリーキャッシュは,かなりのパフォーマンスの改善の可能性を提供しますが,すべての環境でそうなるものと想定しないでください。クエリーキャッシュの構成やサーバーのワークロードによっては,実際にパフォーマンスの低下が見られることもあります。

  • クエリーキャッシュのサイズを過度に大きくすると,キャッシュの保守に必要なオーバーヘッドが増え,それを有効にすることのメリットに勝る可能性があります。数十メガバ▪▪トのサ▪▪ズが通常は有益です。数百メガバ▪▪トのサ▪▪ズはそうでない可能性があります。

  • サ,バ,のワ,クロ,ドは,クエリ,キャッシュの効率にかなりの影響を与えます。ほぼ全体が固定の选择ステ,トメントのセットで構成される複合クエリ,では,頻繁な插入ステートメントによってキャッシュ内の結果が絶えず無効にされるような複合クエリーよりも,キャッシュを有効にすることでメリットが得られる可能性がはるかに高くなります。場合によっては,回避方法として,SQL_NO_CACHEオプションを使用して,頻繁に変更されるテ,ブルを使用する选择ステ,トメントに対して,結果をキャッシュに入れないようにします。(セクション8.9.3.2 "クエリ,キャッシュselectオプション"を参照してください。)

クエリーキャッシュを使用することでメリットがあるかどうかを確認するには,キャッシュを有効および無効にしてMySQLサーバーの動作をテストします。サーバーのワークロードが変わるとクエリーキャッシュの効率も変わることがあるため,その後,定期的に再テストします。