Go to the FreeLists Home Page Home Signup Help Login
 



[oracle-l] || [Date Prev] [06-2007 Date Index] [Date Next] || [Thread Prev] [06-2007 Thread Index] [Thread Next]

Re: Taking a while to generate a query plan?

  • From: "Don Seiler" <don@xxxxxxxxx>
  • To: oracle_l <oracle-l@xxxxxxxxxxxxx>
  • Date: Fri, 1 Jun 2007 15:50:44 -0500
OK I've run 10053 level 1 and 10046 level 12 traces just to be
prudent.  Pasted below.

The query has an OR, and each field in the OR has a global nonunique
index on it.  The query is crafted so as to span two of the monthly
partitions.  The table is partitioned on disposal_time.  disposal_time
is also the second field in a two-field global primary key.

I'm curious as to the query plan, where in each of those OR field
indexes brings back 40K-50K rows, which are then pared down to the end
total of 184.  If I am indeed envisioning that correctly, that would
explain the high fetch count.

I'm wondering what the impact of global vs local is in this case.
Would a compound index on (src_addr, disposal_time) behave better?

********************************************************************************

SELECT   event_id, record_type, src_addr, dest_addr, src_route, dest_route,
        submit_time, disposal_time, disposal_type, REFERENCE, msg_length,
        priority, request_def, product_id, receipt_req, description, ROWID
   FROM foo
  WHERE (src_addr = '7155555555' OR dest_addr = '7155555555')
    AND product_id LIKE '00000200000'
    AND record_type LIKE '%'
    AND disposal_time >= to_date('03/07/2007', 'MM/DD/YYYY')
    AND disposal_time <= to_date('04/06/2007', 'MM/DD/YYYY')
ORDER BY disposal_time DESC

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch       14      4.38       4.38      33190      34397          0         184
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total       16      4.38       4.39      33190      34397          0         184

Misses in library cache during parse: 0
Optimizer mode: ALL_ROWS
Parsing user id: 826

Rows     Row Source Operation
-------  ---------------------------------------------------
   184  SORT ORDER BY (cr=34397 pr=33190 pw=0 time=4388878 us)
   184   CONCATENATION  (cr=34397 pr=33190 pw=0 time=935633 us)
    53    TABLE ACCESS BY GLOBAL INDEX ROWID foo PARTITION: ROW
LOCATION ROW LOCATION (cr=15275 pr=15192 pw=0 time=118868 us)
 39299     INDEX RANGE SCAN foo_DEST_ADDR (cr=258 pr=258 pw=0
time=518081 us)(object id 174704)
   131    TABLE ACCESS BY GLOBAL INDEX ROWID foo PARTITION: ROW
LOCATION ROW LOCATION (cr=19122 pr=17998 pw=0 time=366133 us)
 49395     INDEX RANGE SCAN foo_SRC_ADDR (cr=343 pr=343 pw=0
time=649649 us)(object id 174703)


Elapsed times include waiting on following events:
 Event waited on                             Times   Max. Wait  Total Waited
 ----------------------------------------   Waited  ----------  ------------
 SQL*Net message to client                      14        0.00          0.00
 db file sequential read                     33190        0.00          1.67
 SQL*Net message from client                    14        0.02          0.06
********************************************************************************



On 6/1/07, Don Seiler <don@xxxxxxxxx> wrote:
Interesting situation.  Running 10.2.0.2 EE.  This situation can be
duplicated on our production and 3 development instances.

We have a table with monthly partitions.  I'm told that "all of a
sudden (today)" new queries are taking their time running against
their table.  Once they are run the first time, successive attempts
are fine.  When I say "new queries" I mean basically the same query
with a literal value changed in the predicate (yes I've discussed bind
vars already).

We were able to duplicate this by flushing the shared pool, and not
flushing the buffer cache.  Based on this, I'm inclined to believe
that data/index I/O was not a major factor in the time spent waiting.
The query plan itself looked great, low cardinality and cost, using
the desired indexes properly.

We wait sometimes as long as 30 seconds before the query comes back.

Where might one look to investigate what is happening during this time?

--
Don Seiler
oracle blog: http://ora.seiler.us
ultimate: http://www.mufc.us



--
Don Seiler
oracle blog: http://ora.seiler.us
ultimate: http://www.mufc.us
--
http://www.freelists.org/webpage/oracle-l






[ Home | Signup | Help | Login | Archives | Lists ]

All trademarks and copyrights within the FreeLists archives are owned by their respective owners.
Everything else ©2007 Avenir Technologies, LLC.