ここから本文です

キャッシュもバッファもなにも使ってない状態のクエリの実行速度を知りたい。

bim********さん

2010/7/2619:14:21

キャッシュもバッファもなにも使ってない状態のクエリの実行速度を知りたい。

速度的にちょっと問題がでてきて、MySQLのクエリをチューニングしたいのですが、キャッシュやバッファを利用しない、純粋な(?)クエリの実行速度を知りたいのですが、どうすればいいのでしょうか?
いろいろ調べるとSQL_NO_CACHEを使えと書いてあるので、SELECT SQL_NO_CACHE ~と打ってやってみているのですが、やっぱり一回目だけ飛びぬけて遅く、全く同じクエリを打っても2回目からはとても速くなってしまいます。
FLUSH TABLE hogeもやってみましたが、変わらずです。
どうしたら、キャッシュやバッファなどに関係のない速度を知ることができますか?
mysqldをrestartしなきゃだめ、、、なんてことはないですよね。

補足ちなみにshow profile all したら sending data の Page_faults_minor が 109→0 、Context_voluntary が 9476→0 になっていました。よくわかりません、、、、

この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。

閲覧数:
5,711
回答数:
1
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

mzg********さん

2010/7/2700:33:26

MySQLに限らず、プログラム実行時間を考えると
1.そこそこ大きいファイルを作業対象にすると、ハードディスクからの読みとりにも一定時間が掛かり、最近の大容量ハードディスクには、読みとりキャッシュが付いている。
つまり、読みとりキャッシュ内に残ってる限りは2回目以降の読みとり時間は早くなる。
別のアプリで同じディスク内の別の巨大ファイルを読み込んだりすると、読みとりキャッシュ内容が書き変わるので、またファイルアクセスに時間が取られてしまうかもしれません。
→マニュアル 「ディスク関連の問題」を参照してみてください
http://dev.mysql.com/doc/refman/5.1/ja/disk-issues.html
データ更新が頻繁だと、一つのファイルがハードディスク内で分散していることがあり、ファイルアクセスに時間が掛かる要因となります。デフラグもやっておきましょう。

2.大きなデータをメモリー上に展開するためには、buffer確保という作業が必要で、
MySQLが使える上限設定用の変数もあるが、その上限まで最初から確保するわけではなく、実行時確保みたいです。
→ MySQLマニュアル引用
「接続バッファと結果バッファ(ともにnet_buffer_lengthで与えられるサイズで始まる)は必要に応じて max_allowed_packet まで動的に拡張される」
http://dev.mysql.com/doc/refman/5.1/ja/memory-use.html
また、実メモリが不充分で、仮想メモリ(ハードディスク)への読み書きが頻発してるようだと、毎回実行時間が掛かることになりますが。これは、同時に稼働している別のアプリがどれくらいメモリ消費してるかでも変わります。

3.クエリーキャッシュ:tableデータ自体に変更が無く、sql文も同じ時(大文字小文字、多バイト文字コードも含めて同じ時)に、再計算せずにキャッシュからデータを読み出す。
いろいろ制約があるので、結局 SQL_CACHE を付けていても、クエリキャッシュはしてないかもしれない。
→マニュアル 参照
http://dev.mysql.com/doc/refman/5.1/ja/query-cache-how.html
SQL_CACHE を付けて同じselect文を2回以上発行して Qcache_hits が増えれば、キャッシュ読み出ししていることが解ります。
そうでない場合は、クエリーキャッシュは関係ないと言うことになるでしょう。
というわけで、「そもそもクエリーキャッシュをしているのか」から調査した方が良さそうです。
調査用sql文例
SHOW VARIABLES LIKE 'query%';
→ query_cache_size が0だと、そもそもキャッシュ動作オフということになります。
0でないならば、
SHOW STATUS LIKE 'Qcache%';
→ Qcache_hits が増えるかをクエリ毎に複数回発行して調査。

4.クエリ解析、実行時間
クエリの最適化 にて、初期実行時間短縮

こんなところかな?律速段階は、どのへんかな?分離して時間測定はちょっと出来そうも無いです。SQL_NO_CACHE の影響はどっちかというと少ないくらい??
いろいろ対策を講じて初回実行時間を減らすことになるかと。

質問した人からのコメント

2010/8/2 17:49:28

詳しくありがとうございます。めっちゃためになりました。HDD自体のバッファもあるのですね。なるほど。難しい。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる