0

Spring2.5.xからSpring3.xにアップグレードしたJavaWebアプリケーションがあります。

データベースの負荷が増加し、クエリに時間がかかることを除いて、アップグレード後はすべて機能します。スタックはHibernate3.6.10、Postgres 9.1、およびSpring 2.5.4/3.0です。アップグレード前とアップグレード後の違いは、スプリングジャーとデップだけです。

古い(速い)Spring 2セットアップで生成されたクエリはカーソルを使用して結果を返しますが、新しい(遅い)Spring3セットアップでは生成されないクエリを生成することがわかりました。

例えば:

速い

LOG:  statement: DECLARE JDBC_CURS_660 CURSOR FOR select distinct virtualfle0_.VIRTUAL_FLEET_ID as VIRTUAL1_58_, virtualfle0_.CSO_ID as CSO2_58_, virtualfle0_.VIRTUAL_FLEET_NAME as VIRTUAL3_58_, virtualfle0_.SCHEDULE_ID as SCHEDULE4_58_ from EG_VIRTUAL_FLEET virtualfle0_ where (virtualfle0_.CSO_ID=2 ) limit 40; FETCH FORWARD 100 FROM JDBC_CURS_660

遅い

LOG:  execute S_158/C_159: select distinct virtualfle0_.VIRTUAL_FLEET_ID as VIRTUAL1_58_, virtualfle0_.CSO_ID as CSO2_58_, virtualfle0_.VIRTUAL_FLEET_NAME as VIRTUAL3_58_, virtualfle0_.SCHEDULE_ID as SCHEDULE4_58_ from EG_VIRTUAL_FLEET virtualfle0_ where (virtualfle0_.CSO_ID=$1 ) limit $2
DETAIL:  parameters: $1 = '2', $2 = '40'

これらのクエリを生成するコードは休止状態の基準に基づいており、そのコードはSpringアップグレードの一部として変更されていません。

私の休止状態の設定には、次のものがあります。

<property name="hibernate.jdbc.fetch_size">100</property>
<property name="hibernate.jdbc.batch_size">100</property>

だから私の質問は、カーソルを使用する正しいSQLを生成するためにSpring 3をどのように取得するのですか?

4

1 に答える 1

1

うーん、わかりました。アップグレードの一環として削除した jar があり、そこには postgres ドライバーが含まれていたことがわかりました (他のプロジェクト固有のジャンクの中でも)。

これらの各選択をカーソルでラップするための標準ドライバーへのカスタム拡張がおそらく含まれていますが、ソースがないと言うのは難しいです:(いずれにせよ、そのjarをクラスパスに戻すと、必要な動作に戻ります.

于 2013-01-15T23:43:06.747 に答える