« 若い子たちのFacebook | トップページ | やっぱりRubyやらなくっちゃ »

2014.09.26

同じ走査実行計画なのに実行速度が異なる

パフォーマンスチューニングをしているときに、遅いクエリーを再実行するとずいぶんと速くなっていて戸惑う、というケースはけっこうあるんじゃないだろうか?

1.まず遅いと言われているクエリーを選ぶ。
2.Explainしてみる。→Cost見積もりが出る
3.Explain Analyzeしてみる。→遅い
4.またExplainしてみる。→同じCost見積もりが出る
5.実行してみる。→速い(;゚Д゚) 混乱する

こんな感じである。
結論としては、これはキャッシュのせいだと考えられる。
最近のDBMSは賢くって、検索結果や実行計画などをキャッシュしておいて、データ変動がない場合はキャッシュから結果をひっぱってきたりする。
Explainで出しているのは統計上の論理値なので、キャッシュが使われるかどうか、使われたらどんだけ速いか、は加味しないのである。

このためチューニング時の注意事項として、一度遅いクエリを実行してしまった後では、なんらかの改善作業の結果速くなったのか、単にキャッシュが効いていただけなのかを見極める必要があるのである。
キャッシュはもちろん重要な機能なのだが、チューニング作業で悩んでるときにはお悩みの種を増やしてしまうこともあるかも、というボヤキでした。

|

« 若い子たちのFacebook | トップページ | やっぱりRubyやらなくっちゃ »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/2022/60378242

この記事へのトラックバック一覧です: 同じ走査実行計画なのに実行速度が異なる:

« 若い子たちのFacebook | トップページ | やっぱりRubyやらなくっちゃ »