6

spring 3.0 SimpleJdbcTemplate を使用しようとしましたが、1500 レコードを挿入するのに 5 分かかりましたが、数秒かかりました。ストレート JDBC を使用して挿入します。私が間違っているのかわかりません。

4

3 に答える 3

6

バッチを構築している場合は、Spring バッチの使用を検討しJdbcBatchItemWriterてください。適切なチャンク サイズを設定すると、これらの 1500 レコードが 1 秒未満でロードされます。

于 2010-08-13T11:59:28.043 に答える
1

チェックする価値のあるいくつかのこと:

  • オーバーヘッドは、アプリケーション レベルで Spring によって管理されるトランザクションにある可能性があります。使用しているトランザクション マネージャーの種類を調べます ( name の Bean を探しますtransactionManager)。JTA を使用している場合、おそらくそこに問題があります。JDBCで高速なのでdbがボトルネックではないようです。
  • アプリがそのトランザクションをどのように使用しているかによっては、1500 件すべての要求とコミットを完了する前に、すべてをメモリに保持している可能性があります。メモリ使用量に大きな違いがありますか (Spring の方がはるかに高いはずです)。
  • どちらの場合も、どの種類の DB 接続プールを使用していますか?

アプリをプロファイリングする簡単な方法:

を入手pid - "jps -l"

メモリ: jmap -histo PID(何らかの形式のメモリ リークがあるかどうかを確認します)

内部で何が起こっているかを確認してください: jstack PID(低速または再帰的なメソッド呼び出しを探します)

于 2010-08-15T07:45:12.783 に答える
-2

使ってみてはどうですか

jdbcTemplate.batchUpdate(new String[]{sql}); 
于 2015-03-31T23:20:02.573 に答える