[Seasar-user:22053] Re: S2JDBCのバッチ処理に関して

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2015年 4月 15日 (水) 04:07:08 JST


小林 (koichik) です。

バッチ更新のJDBC APIは、addBatch()とexecuteBatch()の
二つで成り立っています。
S2JDBCのbatchSize()は、addBatch()を何回呼び出す毎に
executeBatch()を実行するかを指定します。
すなわち、

DataSource.getConnection();
PreparedStatement.addBatch(); // 1
PreparedStatement.addBatch(); // 2
PreparedStatement.addBatch(); // 3
...
PreparedStatement.addBatch(); // 1000 (batchSize()で指定した数)
PreparedStatement.executeBatch();
PreparedStatement.addBatch(); // 1
PreparedStatement.addBatch(); // 2
PreparedStatement.addBatch(); // 3
...
PreparedStatement.addBatch(); // 1000 (batchSize()で指定した数)
PreparedStatement.executeBatch();
...
Connection.close()

となります。
batchSize()ごとにコネクションを取得するわけではありません。


On Tue, 14 Apr 2015 17:32:41 +0900, あきやまじろう <mayama0130 @ gmail.com> wrote:

> お世話になっております。あきやまと申します。
> 
> S2JDBCのバッチ処理に関して教えてください。
> 
> [動作環境]
> ・S2Container 2.4.45
> 
> S2Jdbcのバッチ挿入(下記コード)を利用して、10000件のリストを1000件づつ登録しようとしています。
> 
> jdbcManager.insertBatch(insertList).batchSize(1000).execute();
> 
> 実行後、s2.logを確認した所、以下の内容が出力され、1000件ずつ処理される事を期待していたのですが、
> 
> > トランザクションを開始しました。
> > 論理的なコネクションを取得しました。
> > Insert文が1000行
> > 論理的なコネクションを閉じました。
> > 論理的なコネクションを取得しました。
> > Insert文が1000行
> > 論理的なコネクションを閉じました。
> > ・・・
> > 論理的なコネクションを取得しました。
> > Insert文が1000行
> > 論理的なコネクションを閉じました。
> > トランザクションをコミットしました。
> 
> 実際には、以下の内容で出力され、10000件のバッチ処理になっているように見えます。
> 
> > トランザクションを開始しました。
> > 論理的なコネクションを取得しました。
> > Insert文が10000行
> > 論理的なコネクションを閉じました。
> > トランザクションをコミットしました。
> 
> バッチ処理を基本的に理解してないだけなのかもしれませんが、
> 解決方法をご教授頂けますでしょうか。


-- 
{
  name: "Koichi Kobayashi",
  mail: "koichik @ improvement.jp",
  blog: "http://d.hatena.ne.jp/koichik/",
  twitter: "@koichik"
}



Seasar-user メーリングリストの案内