The statement cache operates only within a session/transaction scope,
not between threads or users.  So it would entirely depend on the
overall approach.

Clinton

On Mon, Feb 2, 2009 at 1:06 PM, Chema <demablo...@gmail.com> wrote:
> Then, does this mean that prepared statement cache isn't working right ?
>
> I don't know how cache works but I understand that every non-dynamic
> statement is build as a prepared statement and cached.
> So, XML file shouldn't be parsed if a same statement id is called
> several times. By this reason, it doesn't have any sense to invoke a
> method  for formatting text when statement cache is used.
>
>
> 2009/2/2 Clinton Begin <clinton.be...@gmail.com>:
>> 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("insertGatewayMerchantChangedItemUnFormattedSQL",
>>> gatewayMerchantChangedItem);
>>>
>>> B.)
>>> getSqlMapClientTemplate().insert("insertGatewayMerchantChangedItemFormattedSQL",
>>> 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