私はこの問題を抱えています:JavaアプリケーションからSQLパフォーマンスを向上させる方法
私はJavaで開発された古いアプリケーション(Springフレームワーク)を持っています。問題はSQLのクエリです.Sql Developerからの処理とは異なり、Javaアプリケーションから実行すると時間がかかります。 Javaから約7分かかります。 SQL Developerからは30秒かかります。どちらの場合もクエリは同じです。
アプリケーションの設定は次のとおりです。
- JDK 1.6
- OJDBC 6
- Springフレームワーク3.6
- Oracleの11グラムのEnterprise Editionリリース11.2.0.3.0
データソースの設定:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driverClassName}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="initialPoolSize" value="${jdbc.initialPoolSize}"/>
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"/>
<property name="minPoolSize" value="${jdbc.minPoolSize}"/>
</bean>
最後に、私はIBATIS 2.3をSQLマッピングに使用しています。
私はテストデバッグを行い、DAOクラスがIbatisマップ(クエリ)を呼び出すと、パフォーマンスが遅くなることがあります。
いくつかお手伝いしますか?
私の英語のために残念です。
よろしく
アップデート1:
クエリ:
SELECT PAG.ID_PAG AS ID_PAG, CAD.CAD_NOMBRE AS CAD_NOMBRE, LOC.LOC_NOMBRE AS LOC_NOMBRE, EMI.EMI_CODIGO AS EMI_CODIGO, EMI.EMI_NOMBRE AS EMI_NOMBRE, TO_CHAR(PAG.PAG_FECHA, 'DD/MM/YYYY') AS TRX_FECHA, PAG.PAG_POS AS TRX_POS, RTRIM(PAG.PAG_COMPROBANTE) AS TRX_COMPROBANTE, 1 AS CANTIDAD, PAG.PAG_MONTO AS TRX_MONTO, PAG.PAG_COMISION_TOTAL AS MONTO_COMISION, PAG.PAG_NETO_TOTAL AS MONTO_NETO FROM PW_PAGO PAG, PW_LOCAL LOC, PW_EMISOR EMI, PW_CADENA CAD, PW_TIPOTRX_EMI TTE WHERE CAD.ID_CADENA = PAG.ID_CADENA AND EMI.ID_EMISOR = PAG.ID_EMISOR AND LOC.ID_LOCAL = PAG.ID_LOCAL AND PAG.ID_TIPOTRX_EMI = TTE.ID_TIPOTRX_EMI AND PAG.PAG_FLAG_COMISION = 'S' AND PAG.PAG_FECHA >= TO_DATE('20160501','YYYYMMDD') AND PAG.PAG_FECHA <= TO_DATE('20160503','YYYYMMDD') ORDER BY CAD.CAD_NOMBRE, LOC.LOC_NOMBRE, EMI.EMI_NOMBRE, TO_CHAR(PAG.PAG_FECHA, 'DD/MM/YYYY'), PAG.PAG_POS, PAG.PAG_COMPROBANTE, PAG.PAG_MONTO
アップデート2:ここでのiBATISの設定です:
<?xml version="1.0" encoding="UTF-8"?>
<resultMap id="getPagosComisionesSinGrupoDetalle"
class="cl.bbr.portalweb.dto.InformePagosComisionesSinGrupoDetalleDTO" >
<result column="ID_PAG" property="id_pag" jdbcType="INTEGER" />
<result column="CAD_NOMBRE" property="cad_nombre" jdbcType="VARCHAR" />
<result column="LOC_NOMBRE" property="loc_nombre" jdbcType="VARCHAR" />
<result column="EMI_CODIGO" property="emi_codigo" jdbcType="VARCHAR" />
<result column="EMI_NOMBRE" property="emi_nombre" jdbcType="VARCHAR" />
<result column="TRX_FECHA" property="trx_fecha" jdbcType="DATE" />
<result column="TRX_POS" property="trx_pos" jdbcType="VARCHAR" />
<result column="TRX_COMPROBANTE" property="trx_comprobante" jdbcType="VARCHAR" />
<result column="CANTIDAD" property="cantidad" jdbcType="INTEGER" />
<result column="TRX_MONTO" property="trx_monto" jdbcType="DECIMAL" />
<result column="MONTO_COMISION" property="monto_comision" jdbcType="DECIMAL" />
<result column="MONTO_NETO" property="monto_neto" jdbcType="DECIMAL" />
</resultMap>
<!-- Obtiene datos comisiones sin grupo y con detalle-->
<select id="getPagosComisionesSinGrupoDetalle"
resultMap="getPagosComisionesSinGrupoDetalle"
parameterClass="cl.bbr.portalweb.dto.InformePagosComisionesSearchCriteria">
SELECT PAG.ID_PAG AS ID_PAG, CAD.CAD_NOMBRE AS CAD_NOMBRE, LOC.LOC_NOMBRE AS LOC_NOMBRE, EMI.EMI_CODIGO AS EMI_CODIGO,EMI.EMI_NOMBRE AS EMI_NOMBRE, TO_CHAR(PAG.PAG_FECHA, 'DD/MM/YYYY') AS TRX_FECHA, PAG.PAG_POS AS TRX_POS, RTRIM(PAG.PAG_COMPROBANTE) AS TRX_COMPROBANTE, 1 AS CANTIDAD,PAG.PAG_MONTO AS TRX_MONTO, PAG.PAG_COMISION_TOTAL AS MONTO_COMISION,PAG.PAG_NETO_TOTAL AS MONTO_NETO FROM PW_PAGO PAG, PW_LOCAL LOC,PW_EMISOR EMI, PW_CADENA CAD, PW_TIPOTRX_EMI TTE WHERE CAD.ID_CADENA =PAG.ID_CADENA AND EMI.ID_EMISOR = PAG.ID_EMISOR AND LOC.ID_LOCAL = PAG.ID_LOCAL AND PAG.ID_TIPOTRX_EMI = TTE.ID_TIPOTRX_EMI AND PAG.PAG_FLAG_COMISION = 'S' AND <![CDATA[PAG.PAG_FECHA >= #f_ini#]]> AND <![CDATA[PAG.PAG_FECHA <= #f_fin#]]> ORDER BY CAD.CAD_NOMBRE, LOC.LOC_NOMBRE, EMI.EMI_NOMBRE, TO_CHAR(PAG.PAG_FECHA, 'DD/MM/YYYY'), PAG.PAG_POS, PAG.PAG_COMPROBANTE, PAG.PAG_MONTO
</select>
iBatisのマップの設定:
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig>
<settings useStatementNamespaces="true"/>
<sqlMap resource="cl/bbr/portalweb/dao/ibatis/maps/oracle/FINDER_INFORME_PAGOS_COMISIONES_SqlMap.xml"/> </sqlMapConfig>
質問は非常に一般的であり、少なくともいくつかの詳細を提供する必要があります。任意の形式でキャッシュを使用していますか?あなたはDBインデックスを作成しようとしましたか? – Christian
クエリはどこですか? –
問題のあるクエリを調整する場合は、質問に追加してください。 – krokodilko