Re: index with very high LIO

From: Jonathan Lewis <jonathan_at_jlcomp.demon.co.uk>
Date: Fri, 18 Nov 2011 23:32:14 -0000
Message-ID: <A81A335E96EB4C5EBDB41D083F7D8133_at_Primary>


The most dramatic feature is the 7.9M transaction tables undo records applied to get 160 transaction table searches read-consistent. Assume a transaction updated one of your target objects some time close to the start of your query and issued a commit after the block had been flushed from memory so that the block was not subject to commit cleanout. Assume your query reaches the updated block a few hours later - when a lot of other activity has been going on.

Your query can see that the block changed at some time in the past, but has to check the undo segment header transaction table slot to see whether it committed before or after the query started. Since many transactions have committed since that moment the transaction table slot will have been overwritten many times and previous versions of the slot recorded in the undo segment. This means the session has to walk through a chain of undo blocks to take the transaction table back in time.

According to these figures, you have done this 160 times in the 30 minutes, and had to read 7.9 M undo blocks (a lot of history) while doing so. (It's quite possible that a lot of those reads were physical reads of the undo segment, of course). This is probably a large component of your overhead - but the figures for this 30 minutes don't seem to be representative of the figures for the whole query.

You have another 7M examinations to account for - but only 168,000 undo records applied for read consistency; this suggests that most of the 7M are from the unique access to the table, which (assuming 4 buffer gets per row) would be about 1.75M of the 8.7M rows accessed. It would be good to check the figures across the whole interval (Anything that looks like "%consistent%" as well as the stuff you've got so far, and "table fetch by rowid".

Regards

Jonathan Lewis
http://jonathanlewis.wordpress.com

  • Original Message ----- From: "Jeremy Schneider" <jeremy.schneider_at_ardentperf.com> To: <oracle-l_at_freelists.org> Sent: Friday, November 18, 2011 5:51 PM Subject: Re: index with very high LIO
TOTAL      PER-SECOND  STATISTIC
   148,983      82.61  CR blocks created
15,406,266   8,542.71  consistent gets - examination
   168,222      93.28  data  blocks consistent reads - undo records applied
    21,173      11.74  db block gets
       160       0.09  transaction tables consistent read rollbacks
 7,929,413 4,396.82 transaction tables consistent reads - undo records applied
 1,379,540 764.95 undo change vector size

I'm not an expert on this... does this say that, per second:
- the query is only actually processing 11 data blocks

  • it's applying 8.5 thousand undo records to get them
  • this requires 9.7 thousand actual block accesses

What other stats would be interesting? Am I reading these statistics correctly? Any further observations that can be made?

--
http://www.freelists.org/webpage/oracle-l
Received on Fri Nov 18 2011 - 17:32:14 CST

Original text of this message