Hatena::ブログ(Diary)

kazuhoのメモ置き場

2008-12-24

MySQL+Javaサーバサイドプリペアードステートメントを使うべきで「ない」理由

useServerPrepStmtsのここの説明ではデフォルトがtrueになっているが、これは上述の通り嘘である。 (中略) そしてなぜfalseにされたかということの背景を察すると、trueにすることの弊害もありそうで、手放しでこれをtrueにすることを勧めることが少しはばかられる。

404 Not Found

自分は Java 使ってないですが、MySQL中の人が使うなって言ってます *1。その理由はメモリリークのような症状が出る可能性があるから

So why are prepared statements a problem?

Because users do not clean up/close unused prepared statements. Multiply the number of prepared statements times the number of open connections and you begin to see the problem.

What do you do about this?

Turn them off. The Java driver and a few other drivers turn them off automatically.

Prepared Statements, Musings - Brian "Krow" Aker's Idle Thoughts

おそらく、クライアント側の PreparedStatement オブジェクトを明示的に解放しないコードを書いている場合に、GC がそのオブジェクトを回収するまで、対応する mysqld 内のメモリが解放されない、ってのが問題なのかな。

パフォーマンスの観点から言っても MySQLサーバーサイドプリペアードステートメントは実行プランのキャッシュがなかったりと、採るべき理由が少ないので、使うべき積極的な理由はないと思う *2

*1:Drizzle ではサーバサイドプリペアードは廃止

*2バインディング文字コードSQL パーサの文字コードを揃えるのは当然として

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証