Sorry for the re-post of this topic. I am using the work account for this
mailing list.

 

Anyway, I believe I have discovered a performance issue either with iBATIS
itself or something internal to it. After a lot of testing I have narrowed
it down to how the SQL is formatted. The current application I have is
inserting 10,222 records into a table from a parsed CSV file. I am using
Spring and the method is wrapped in a transaction with:

 

  @Transactional

    void persistGatewayMerchantChangedFile(File file) throws ParseException,
IOException;

 

This method is simple. It reads a line of the CSV file, parses it, populates
an object, inserts the data into the table.

 

What I have found is this: 

 

1.)  If formatted SQL is used (See:
insertGatewayMerchantChangedItemFormattedSQL below) the performance is
awful. (Roughly 3 minutes)

2.)  If non-formatted SQL is used (See:
insertGatewayMerchantChangedItemUnFormattedSQL below) the performance is
great! (Roughly 33 seconds)

 

The *only* change made to obtain these results is swapping items A & B
within the code. 

 

A.)
getSqlMapClientTemplate().insert("insertGatewayMerchantChangedItemUnFormatte
dSQL", gatewayMerchantChangedItem);

B.)
getSqlMapClientTemplate().insert("insertGatewayMerchantChangedItemFormattedS
QL", gatewayMerchantChangedItem);

 

I would be very interested if anyone else is seeing this or would be willing
to test what I have shown here and see if there is in fact a performance hit
with formatted SQL statements opposed to non-formatted statements.

 

I will gladly supply and required information i.e. log files, code etc to
help out and see what the issue is.

 

Thank you in advance!

 

M. Goodell

 

<?xml version="1.0" encoding="UTF-8"?>

 

<!DOCTYPE sqlMap

    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"

    "http://ibatis.apache.org/dtd/sql-map-2.dtd";>

 

<sqlMap>

 

    <resultMap id="gatewayMerchantChangedItemResultMap"
class="com.pdc4u.GatewayMerchantChangedItem">

        <result property="receivedDate" column="received_date"/>

        <result property="transactionDate" column="transaction_date"/>

        <result property="batchDate" column="batch_date"/>

        <result property="location" column="location"/>

        <result property="terminal" column="terminal"/>

        <result property="currentCheckStatus"
column="current_check_status"/>

        <result property="currentFundingStatus"
column="current_funding_status"/>

        <result property="authorizationNumber"
column="authorization_number"/>

        <result property="routingNumber" column="routing_number"/>

        <result property="accountNumber" column="account_number"/>

        <result property="checkNumber" column="check_number"/>

        <result property="checkAmount" column="check_amount"/>

        <result property="depositDate" column="deposit_date"/>

        <result property="transactionID" column="transaction_id"/>

        <result property="checkWriter" column="check_writer"/>

        <result property="driversLicenseNumber"
column="drivers_license_number"/>

        <result property="driversLicenseState"
column="driver_license_state"/>

        <result property="merchant" column="merchant"/>

        <result property="customInfoOne" column="custom_info_one"/>

        <result property="customInfoTwo" column="custom_info_two"/>

        <result property="customInfoThree" column="custom_info_three"/>

        <result property="customInfoFour" column="custom_info_four"/>

        <result property="customInfoFive" column="custom_info_five"/>

        <result property="crossReferenceID" column="cross_reference_id"/>

    </resultMap>

 

    <insert id="insertGatewayMerchantChangedItemUnFormattedSQL"
parameterClass="com.pdc4u.GatewayMerchantChangedItem">

        INSERT INTO global_e_gmcr (received_date, transaction_date,
batch_date, location, terminal, current_check_status,
current_funding_status, authorization_number, routing_number,
account_number, check_number, check_amount, deposit_date, transaction_id,
check_writer, drivers_license_number, driver_license_state, merchant,
custom_info_one, custom_info_two, custom_info_three, custom_info_four,
custom_info_five, cross_reference_id) VALUES (#receivedDate#,
#transactionDate#, #batchDate#, #location#, #terminal#,
#currentCheckStatus#, #currentFundingStatus#, #authorizationNumber#,
#routingNumber#, #accountNumber#, #checkNumber#, #checkAmount#,
#depositDate#, #transactionID#, #checkWriter#, #driversLicenseNumber#,
#driversLicenseState#, #merchant#, #customInfoOne#, #customInfoTwo#,
#customInfoThree#, #customInfoFour#, #customInfoFive#, #crossReferenceID#);

    </insert>

 

    <insert id="insertGatewayMerchantChangedItemFormattedSQL"
parameterClass="com.pdc4u.GatewayMerchantChangedItem">

        INSERT INTO global_e_gmcr (

            received_date,

            transaction_date,

            batch_date,

            location,

            terminal,

            current_check_status,

            current_funding_status,

            authorization_number,

            routing_number,

            account_number,

            check_number,

            check_amount,

            deposit_date,

            transaction_id,

            check_writer,

            drivers_license_number,

            driver_license_state,

            merchant,

            custom_info_one,

            custom_info_two,

            custom_info_three,

            custom_info_four,

            custom_info_five,

            cross_reference_id

        ) VALUES (

            #receivedDate#,

            #transactionDate#,

            #batchDate#,

            #location#,

            #terminal#,

            #currentCheckStatus#,

            #currentFundingStatus#,

            #authorizationNumber#,

            #routingNumber#,

            #accountNumber#,

            #checkNumber#,

            #checkAmount#,

            #depositDate#,

            #transactionID#,

            #checkWriter#,

            #driversLicenseNumber#,

            #driversLicenseState#,

            #merchant#,

            #customInfoOne#,

            #customInfoTwo#,

            #customInfoThree#,

            #customInfoFour#,

            #customInfoFive#,

            #crossReferenceID#);

    </insert>

 

</sqlMap>

Reply via email to