PreparedStatement.execute()を使ったクエリ送信のまとめ
Client-SideのPreparedStatementを実行する際,C/Jでは以下のような順に内部処理を行っていきます.
- 解析済みSQL文および設定済みパラメータ値を用いてBufferオブジェクトを作成.
- Connection.getMutex()によりSynchronizedを実行.
- タイムアウト処理を行う設定にしている場合には,タイムアウト監視スレッドを起動.この監視スレッドは一定時間内にクエリが完了しなければ"KILL QUERY id"を実行するものです.
- フェイルオーバ処理.設定が有効となっていて、必要な場合、スレーブへ新規接続など.新規接続した場合にはこの後のタイミングでSynchronized.
- Bufferに書かれたBody部分の長さ(クエリ本文+1byte)が16MB未満であるかチェック.
- 16MB未満である場合には,BufferにPacket Headerを追加してOutputStreamにwrite/flush.
- 16MB以上である場合にはBufferを複数回に分けて送る処理.write/flushは必要な回数行われる.
詳しくはこちら
http://ikda.net/fswiki/wiki.cgi?page=Connector%2FJ+5%2E0#p8