I will develop a trimmed down test suite and post the source code here later
this evening or tomorrow. I use Netbeans, I hope that's OK!

Do I simply attach it as a .zip file to my email?

-----Original Message-----
From: Kai Grabfelder [mailto:nos...@kaigrabfelder.de] 
Sent: Tuesday, February 03, 2009 10:12 AM
To: user-java@ibatis.apache.org
Subject: Re: Performance & SQL Formatting Issue

could you attach a stripped down maven/ant/eclipse whatever project with
your testcase against an in memory
db? Or can you only reproduce the issue with a "real" db?

Regards

Kai

--- Original Nachricht ---
Absender: M Goodell
Datum: 03.02.2009 17:32
> I swapped out jar files: ibatis-2.3.4.726 for ibatis-2.3.4.731 and ran the
> same test suite.  Again, this was inserting 10,222 records into a table.
> (See other post for details on the application)
> 
> The results are as follows:
> 
> Formatted SQL Un-Formatted SQL
> --------------------------------------------
> 3 mins 20 sec         42 secs
> 
> Again, I am more than willing to provide logs, application code whatever
to
> assist in a resolution. 
> 
> Regards,
> 
> M. Goodell
> 
> -----Original Message-----
> From: Clinton Begin [mailto:clinton.be...@gmail.com] 
> Sent: Monday, February 02, 2009 12:42 PM
> To: user-java@ibatis.apache.org; li...@pdc4u.com
> Subject: Re: Performance & SQL Formatting Issue
> 
> This is a good summary.  I've been watching the other thread.
> 
> I think I might have found a possible candidate:
> 
> public class SqlText implements SqlChild {
>   //...
>   public void setText(String text) {
>     this.text = text.replace('\r', ' ').replace('\n', ' ').replace('\t', '
> ');
>     this.isWhiteSpace = text.trim().length() == 0;
>   }
>   //...
> }
> 
> I'll have to wait to get home to check to see if this is called on
> each execution, instead of just once at SQL mapper build time.
> 
> Cheers,
> Clinton
> 
> 
> On Mon, Feb 2, 2009 at 11:47 AM, M Goodell <li...@pdc4u.com> wrote:
>> 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