Have you got an index on the ID column?, it doesn't appear to be using an index. Usually you would have ID as the primary key which would create an index...

On 29/10/2013 3:17 PM, TrendTimer.com wrote:
Explain Analyze update tre_combinedtestday set compoundpercent=-13.373487168551002, totalpercent=-5.466540999057416, dollaramount=0.9453345900094259 where id=230827

returns this:

UPDATE PUBLIC.TRE_COMBINEDTESTDAY
    /* PUBLIC.TRE_COMBINEDTESTDAY.tableScan */
    /* scanCount: 74005 */
SET
    COMPOUNDPERCENT = -13.373487168551002,
    TOTALPERCENT = -5.466540999057416,
    DOLLARAMOUNT = 0.9453345900094259
WHERE ID = 230827
/*
total: 5087
TRE_COMBINEDTESTDAY.TRE_COMBINEDTESTDAY_DATA read: 5087 (100%)
*/






I switched to jdbc to test this:

PreparedStatement prep = con.prepareStatement("update tre_combinedtestday set compoundpercent=?, totalpercent=?, dollaramount=? where id=?");
//insert 10 row data
long startTime=System.currentTimeMillis();
for (int i = 0; i<saveObjects.size(); i++){
System.out.println("ii="+i);
CombinedTestDay saveObject=saveObjects.get(i);
prep.setDouble(1, saveObject.getCompoundpercent());
prep.setDouble(2, saveObject.getTotalpercent());
prep.setDouble(3, saveObject.getTotalpercent());
prep.setInt(4, saveObject.getId());
//batch insert
//prep.addBatch();
prep.executeUpdate();
}
long endTime=System.currentTimeMillis();
long totalTime=endTime-startTime;
System.out.println("totalTime="+totalTime);


The above performed around 5000 updates. I wasn't able to capture the totalTime because the console buffer wasn't large enough, but I was able to count along while this line incremented:

System.out.println("ii="+i);

At the rate I was observing, i estimate it took around 4-5 minutes for these update to complete










On Monday, October 28, 2013 11:34:57 PM UTC-7, Kartweel wrote:

    No Worries :). If you run Explain Analyze update
    tre_combinedtestday set compoundpercent=-13.373487168551002,
    totalpercent=-5.466540999057416, dollaramount=0.9453345900094259
    where id=230827 what do you get?



    On 29/10/2013 2:12 PM, TrendTimer.com wrote:
    Kartweel, I forgot to say "thanks" for your reply.  Ormlite has
    an option to perform rawQueries. So I changed it to use this.
    Here's the query and the execution time:


    query=update tre_combinedtestday set
    compoundpercent=-13.373487168551002,
    totalpercent=-5.466540999057416, dollaramount=0.9453345900094259
    where id=230827
    updateTime2=86



    On Monday, October 28, 2013 10:50:56 PM UTC-7, TrendTimer.com wrote:


        Oh right, I forgot to mention that I was using Ormlite for
        the updates.  Maybe Ormlite is at fault?  I'm pretty certain
        it's just doing an "update xxx set a=1, b=2 where id=12345"
        kind of update.


        On Monday, October 28, 2013 10:20:47 PM UTC-7, Kartweel wrote:

            Is that hibernate? I haven't used it for so long I forget
            the method names... You probably need to run it through a
            profiler (
            http://h2database.com/html/performance.html#built_in_profiler
            <http://h2database.com/html/performance.html#built_in_profiler>
            ) and see what it is doing. It could be doing optimistic
            locking checks or multiple queries or anything. At the
            minimum you need to find out what SQL it is executing so
            you can run explain on it (
            http://h2database.com/html/grammar.html#explain
            <http://h2database.com/html/grammar.html#explain> ) to
            see if it is using the index or doing a table scan or
            anything.

            Hope that helps a little bit :)

            Ryan

            On 29/10/2013 1:00 PM, TrendTimer.com wrote:
            adding CACHE_SIZE=32768 to the jdbc url helped speed up
            the updates to 6 ms.  So this is better, but still a lot
            slower that the inserts.  I'm timing the inserts like this:


            long startTime=System.currentTimeMillis();
            try {
            getDao().createOrUpdate(combinedTestDay);
            } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            }
            long endTime=System.currentTimeMillis();
            long totalTime=endTime-startTime;
            System.out.println("createOrUpdateTime="+totalTime);


            and the output is always:

            createOrUpdateTime=0


            On Monday, October 28, 2013 9:32:23 PM UTC-7,
            TrendTimer.com wrote:

                When I use "createOfUpdate", I can insert 10000 rows
                in the table almost immediately.

                getDao().createOrUpdate(combinedTestDay);


                but then when I try to update these same items, it's
                taking around 70 ms each:

                getDao().update(saveObject);

                So for 10,000 updates  that's 70,000ms or around 70
                seconds.

                Can someone explain what might be happening?  Does
                anyone know how to work around this issue?  I'd
                appreciate your help! thanks,

                Stephen Gower




-- You received this message because you are subscribed to
            the Google Groups "H2 Database" group.
            To unsubscribe from this group and stop receiving emails
            from it, send an email to h2-database...@googlegroups.com.
            To post to this group, send email to
            h2-da...@googlegroups.com.
            Visit this group at
            http://groups.google.com/group/h2-database
            <http://groups.google.com/group/h2-database>.
            For more options, visit
            https://groups.google.com/groups/opt_out
            <https://groups.google.com/groups/opt_out>.

-- You received this message because you are subscribed to the
    Google Groups "H2 Database" group.
    To unsubscribe from this group and stop receiving emails from it,
    send an email to h2-database...@googlegroups.com <javascript:>.
    To post to this group, send email to h2-da...@googlegroups.com
    <javascript:>.
    Visit this group at http://groups.google.com/group/h2-database
    <http://groups.google.com/group/h2-database>.
    For more options, visit https://groups.google.com/groups/opt_out
    <https://groups.google.com/groups/opt_out>.

--
You received this message because you are subscribed to the Google Groups "H2 Database" group. To unsubscribe from this group and stop receiving emails from it, send an email to h2-database+unsubscr...@googlegroups.com.
To post to this group, send email to h2-database@googlegroups.com.
Visit this group at http://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/groups/opt_out.

--
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to h2-database+unsubscr...@googlegroups.com.
To post to this group, send email to h2-database@googlegroups.com.
Visit this group at http://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to