performance issue after upgrade to oracle 11.2.0.1 linux 32 bit.

From: lsllcm <lsllcm_at_gmail.com>
Date: Tue, 3 Nov 2009 07:29:46 -0800 (PST)
Message-ID: <1343a45b-d0ee-4fc2-b96e-c6902cbe1100_at_q40g2000prh.googlegroups.com>



Hi All,

I have one performance issue after upgrade to oracle 11.2.0.1 linux 32 bit.

The optimizer always choose index of "order by column", not use index of "where clause columns". Any comments are appreciated.

Below are three test cases:

Case 1: TEST on 11.2.0.1 DBs with ORDER BY ORDER BY gf_fee_apply_date Result: Choose incorrect execution plan.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> set autotrace trace
SQL> set timing on
SQL>
SQL> variable spc varchar2(15);
SQL> variable bfd varchar2(40);
SQL> variable efd varchar2(40);
SQL> variable p1 varchar2(60);
SQL> exec :spc:='SACRAMENTO';

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.00
SQL> exec :bfd:='2005-12-05';

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.01
SQL> exec :efd:='2008-12-04 23:59:59';

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.00
SQL> exec :p1:='SET07%'

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.00
SQL>

SQL> SELECT xfi.serv_prov_code,
  2         xfi.b1_per_id1,
  3         xfi.b1_per_id2,
  4         xfi.b1_per_id3,
  5         xfi.feeitem_seq_nbr,
  6         xfi.invoice_nbr,
  7         xfi.gf_fee_period,
  8         xfi.gf_fee,
  9         xfi.gf_des,
 10         xfi.gf_unit,
 11         xfi.gf_udes,
 12         finv.invoice_date AS gf_fee_apply_date,
 13         xfi.feeitem_invoice_status,
 14         xfi.gf_l1,
 15         xfi.gf_l2,
 16         xfi.gf_l3,
 17         xfi.x4feeitem_invoice_udf1,
 18         xfi.x4feeitem_invoice_udf2,
 19         xfi.x4feeitem_invoice_udf3,
 20         xfi.x4feeitem_invoice_udf4,
 21         xfi.gf_fee_schedule,
 22         xfi.fee_schedule_version,
 23         xfi.rec_date,
 24         xfi.rec_ful_nam,
 25         xfi.rec_status,
 26         f4.GF_COD,
 27         f4.GF_PRIORITY

 28 FROM x4feeitem_invoice xfi, setdetails sd, f4invoice finv, F4FEEITEM f4
 29   WHERE sd.serv_prov_code = xfi.serv_prov_code
 30     AND sd.b1_per_id1 = xfi.b1_per_id1
 31     AND sd.b1_per_id2 = xfi.b1_per_id2
 32     AND sd.b1_per_id3 = xfi.b1_per_id3
 33     AND xfi.serv_prov_code = f4.serv_prov_code
 34     AND xfi.b1_per_id1 = f4.b1_per_id1
 35     AND xfi.b1_per_id2 = f4.b1_per_id2
 36     AND xfi.b1_per_id3 = f4.b1_per_id3
 37     And xfi.feeitem_seq_nbr = f4.feeitem_seq_nbr
 38     AND finv.serv_prov_code = xfi.serv_prov_code
 39     AND finv.invoice_nbr = xfi.invoice_nbr
 40     AND sd.serv_prov_code = :spc
 41     AND upper(sd.set_id) = :p1
 42     AND xfi.rec_status = 'A'
 43     AND xfi.feeitem_invoice_status = 'INVOICED'
 44 ORDER BY gf_fee_apply_date
 45 /

no rows selected

Elapsed: 00:02:15.28

Execution Plan



Plan hash value: 3748720781

| Id | Operation | Name |
Rows | Byt
es | Cost (%CPU)| Time |



| 0 | SELECT STATEMENT | |
103 | 242
05 | 9 (0)| 00:00:01 |

| 1 | NESTED LOOPS |
| |

   | | |

| 2 | NESTED LOOPS | |
103 | 242
05 | 9 (0)| 00:00:01 |

| 3 | NESTED LOOPS |
| 3 | 5

79 | 8 (0)| 00:00:01 |

| 4 | NESTED LOOPS |
| 39 | 60

45 | 4 (0)| 00:00:01 |

| 5 | TABLE ACCESS BY INDEX ROWID| F4INVOICE |
60771 | 14
24K| 1 (0)| 00:00:01 |

|* 6 | INDEX RANGE SCAN | F4INVOICE_DATE_IX
| 27 |

   | 1 (0)| 00:00:01 |

|*  7 |      TABLE ACCESS BY INDEX ROWID| X4FEEITEM_INVOICE

| 1 | 1
31 | 1 (0)| 00:00:01 | |* 8 | INDEX RANGE SCAN | X4FEEITEM_INVOICE_NBR_IX
| 1 |
| 1 (0)| 00:00:01 | |* 9 | TABLE ACCESS BY INDEX ROWID | SETDETAILS
| 1 |
38 | 1 (0)| 00:00:01 | |* 10 | INDEX RANGE SCAN | SETDETAILS_PID_IX
| 1 |
| 1 (0)| 00:00:01 | |* 11 | INDEX UNIQUE SCAN | F4FEEITEM_PK
| 1 |
| 1 (0)| 00:00:01 |

| 12 | TABLE ACCESS BY INDEX ROWID | F4FEEITEM
| 34 | 14

28 | 1 (0)| 00:00:01 |



Predicate Information (identified by operation id):


   6 - access("FINV"."SERV_PROV_CODE"=:SPC)    7 - filter("XFI"."FEEITEM_INVOICE_STATUS"='INVOICED' AND "XFI"."REC_STATUS"='
A')

   8 - access("XFI"."SERV_PROV_CODE"=:SPC AND "FINV"."INVOICE_NBR"="XFI"."INVOIC
E_NBR")    9 - filter(UPPER("SET_ID")=:P1)
  10 - access("SD"."SERV_PROV_CODE"=:SPC AND "SD"."B1_PER_ID1"="XFI"."B1_PER_ID1
" AND               "SD"."B1_PER_ID2"="XFI"."B1_PER_ID2" AND "SD"."B1_PER_ID3"="XFI"."
B1_PER_ID3")   11 - access("F4"."SERV_PROV_CODE"=:SPC AND "XFI"."B1_PER_ID1"="F4"."B1_PER_ID1
" AND               "XFI"."B1_PER_ID2"="F4"."B1_PER_ID2" AND "XFI"."B1_PER_ID3"="F4"."
B1_PER_ID3" AND               "XFI"."FEEITEM_SEQ_NBR"="F4"."FEEITEM_SEQ_NBR") Statistics


          0  recursive calls
          0  db block gets
    2891740  consistent gets
      25708  physical reads
          0  redo size
       1763  bytes sent via SQL*Net to client
        380  bytes received via SQL*Net from client
          1  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
0	rows processed

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

2. Case 2: test on 11.2.0.1 without ORDER BY ORDER BY gf_fee_apply_date
Result: Choose correct execution plan.

C:\>sqlplus accela/dbs_at_dbs26 @e:\tools\sql\test.sql

SQL*Plus: Release 10.2.0.4.0 - Production on Sat Oct 31 13:40:08 2009

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> set autotrace trace
SQL> set timing on
SQL>
SQL> variable spc varchar2(15);
SQL> variable bfd varchar2(40);
SQL> variable efd varchar2(40);
SQL> variable p1 varchar2(60);
SQL> exec :spc:='SACRAMENTO';

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.00
SQL> exec :bfd:='2005-12-05';

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.00
SQL> exec :efd:='2008-12-04 23:59:59';

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.00
SQL> exec :p1:='SET07%'

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.00
SQL>

SQL> SELECT xfi.serv_prov_code,
  2         xfi.b1_per_id1,
  3         xfi.b1_per_id2,
  4         xfi.b1_per_id3,
  5         xfi.feeitem_seq_nbr,
  6         xfi.invoice_nbr,
  7         xfi.gf_fee_period,
  8         xfi.gf_fee,
  9         xfi.gf_des,
 10         xfi.gf_unit,
 11         xfi.gf_udes,
 12         finv.invoice_date AS gf_fee_apply_date,
 13         xfi.feeitem_invoice_status,
 14         xfi.gf_l1,
 15         xfi.gf_l2,
 16         xfi.gf_l3,
 17         xfi.x4feeitem_invoice_udf1,
 18         xfi.x4feeitem_invoice_udf2,
 19         xfi.x4feeitem_invoice_udf3,
 20         xfi.x4feeitem_invoice_udf4,
 21         xfi.gf_fee_schedule,
 22         xfi.fee_schedule_version,
 23         xfi.rec_date,
 24         xfi.rec_ful_nam,
 25         xfi.rec_status,
 26         f4.GF_COD,
 27         f4.GF_PRIORITY

 28 FROM x4feeitem_invoice xfi, setdetails sd, f4invoice finv, F4FEEITEM f4
 29   WHERE sd.serv_prov_code = xfi.serv_prov_code
 30     AND sd.b1_per_id1 = xfi.b1_per_id1
 31     AND sd.b1_per_id2 = xfi.b1_per_id2
 32     AND sd.b1_per_id3 = xfi.b1_per_id3
 33     AND xfi.serv_prov_code = f4.serv_prov_code
 34     AND xfi.b1_per_id1 = f4.b1_per_id1
 35     AND xfi.b1_per_id2 = f4.b1_per_id2
 36     AND xfi.b1_per_id3 = f4.b1_per_id3
 37     And xfi.feeitem_seq_nbr = f4.feeitem_seq_nbr
 38     AND finv.serv_prov_code = xfi.serv_prov_code
 39     AND finv.invoice_nbr = xfi.invoice_nbr
 40     AND sd.serv_prov_code = :spc
 41     AND upper(sd.set_id) = :p1
 42     AND xfi.rec_status = 'A'
 43     AND xfi.feeitem_invoice_status = 'INVOICED'
 44 -- ORDER BY gf_fee_apply_date
 45 /

no rows selected

Elapsed: 00:00:00.06

Execution Plan



Plan hash value: 1421766072

| Id | Operation | Name |
Rows | Byt
es | Cost (%CPU)| Time |



| 0 | SELECT STATEMENT | |
101 | 369
66 | 5 (20)| 00:00:01 |

| 1 | NESTED LOOPS |
| |

   | | |

| 2 | NESTED LOOPS | |
101 | 369
66 | 5 (20)| 00:00:01 |

| 3 | NESTED LOOPS |
| 3 | 9

72 | 4 (25)| 00:00:01 |

|*  4 |     HASH JOIN                   |

| 3 | 9
00 | 3 (34)| 00:00:01 |
| 5 | TABLE ACCESS BY INDEX ROWID| SETDETAILS |
107 | 40 66 | 1 (0)| 00:00:01 | |* 6 | INDEX RANGE SCAN | SETDETAILS_SETID_IX | 107 | | 1 (0)| 00:00:01 | |* 7 | TABLE ACCESS BY INDEX ROWID| X4FEEITEM_INVOICE | 2680 | 3 42K| 1 (0)| 00:00:01 | |* 8 | INDEX RANGE SCAN | X4FEEITEM_INVOICE_NBR_IX | 255K| | 1 (0)| 00:00:01 |
| 9 | TABLE ACCESS BY INDEX ROWID | F4INVOICE
| 1 |
24 | 1 (0)| 00:00:01 | |* 10 | INDEX UNIQUE SCAN | F4INVOICE_PK
| 1 |
| 1 (0)| 00:00:01 | |* 11 | INDEX UNIQUE SCAN | F4FEEITEM_PK
| 1 |
| 1 (0)| 00:00:01 |

| 12 | TABLE ACCESS BY INDEX ROWID | F4FEEITEM
| 34 | 14

28 | 1 (0)| 00:00:01 |



Predicate Information (identified by operation id):


   4 - access("SD"."SERV_PROV_CODE"="XFI"."SERV_PROV_CODE" AND "SD"."B1_PER_ID1"
="XFI"."B1_PER_ID1"               AND "SD"."B1_PER_ID2"="XFI"."B1_PER_ID2" AND "SD"."B1_PER_ID3"="XF
I"."B1_PER_ID3")    6 - access("SD"."SERV_PROV_CODE"=:SPC AND UPPER("SET_ID")=:P1)    7 - filter("XFI"."FEEITEM_INVOICE_STATUS"='INVOICED' AND "XFI"."REC_STATUS"='
A')

   8 - access("XFI"."SERV_PROV_CODE"=:SPC)   10 - access("FINV"."SERV_PROV_CODE"=:SPC AND "FINV"."INVOICE_NBR"="XFI"."INVOI
CE_NBR")   11 - access("F4"."SERV_PROV_CODE"=:SPC AND "XFI"."B1_PER_ID1"="F4"."B1_PER_ID1
" AND               "XFI"."B1_PER_ID2"="F4"."B1_PER_ID2" AND "XFI"."B1_PER_ID3"="F4"."
B1_PER_ID3" AND               "XFI"."FEEITEM_SEQ_NBR"="F4"."FEEITEM_SEQ_NBR") Statistics


          0  recursive calls
          0  db block gets
          3  consistent gets
          3  physical reads
          0  redo size
       1763  bytes sent via SQL*Net to client
        380  bytes received via SQL*Net from client
          1  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          0  rows processed

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

C:\>

3. Case 3: TEST on 11.1.0.6/10.2.0.4 DBs Result: Choose correct execution plan.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> set autotrace trace
SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report

SQL> set timing on
SQL>
SQL> variable spc varchar2(15);
SQL> variable bfd varchar2(40);
SQL> variable efd varchar2(40);
SQL> variable p1 varchar2(60);
SQL> exec :spc:='SACRAMENTO';

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.01
SQL> exec :bfd:='2005-12-05';

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.00
SQL> exec :efd:='2008-12-04 23:59:59';

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.01
SQL> exec :p1:='SET07%'

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.00
SQL>

SQL> SELECT xfi.serv_prov_code,
  2         xfi.b1_per_id1,
  3         xfi.b1_per_id2,
  4         xfi.b1_per_id3,
  5         xfi.feeitem_seq_nbr,
  6         xfi.invoice_nbr,
  7         xfi.gf_fee_period,
  8         xfi.gf_fee,
  9         xfi.gf_des,
 10         xfi.gf_unit,
 11         xfi.gf_udes,
 12         finv.invoice_date AS gf_fee_apply_date,
 13         xfi.feeitem_invoice_status,
 14         xfi.gf_l1,
 15         xfi.gf_l2,
 16         xfi.gf_l3,
 17         xfi.x4feeitem_invoice_udf1,
 18         xfi.x4feeitem_invoice_udf2,
 19         xfi.x4feeitem_invoice_udf3,
 20         xfi.x4feeitem_invoice_udf4,
 21         xfi.gf_fee_schedule,
 22         xfi.fee_schedule_version,
 23         xfi.rec_date,
 24         xfi.rec_ful_nam,
 25         xfi.rec_status,
 26         f4.GF_COD,
 27         f4.GF_PRIORITY

 28 FROM x4feeitem_invoice xfi, setdetails sd, f4invoice finv, F4FEEITEM f4
 29   WHERE sd.serv_prov_code = xfi.serv_prov_code
 30     AND sd.b1_per_id1 = xfi.b1_per_id1
 31     AND sd.b1_per_id2 = xfi.b1_per_id2
 32     AND sd.b1_per_id3 = xfi.b1_per_id3
 33     AND xfi.serv_prov_code = f4.serv_prov_code
 34     AND xfi.b1_per_id1 = f4.b1_per_id1
 35     AND xfi.b1_per_id2 = f4.b1_per_id2
 36     AND xfi.b1_per_id3 = f4.b1_per_id3
 37     And xfi.feeitem_seq_nbr = f4.feeitem_seq_nbr
 38     AND finv.serv_prov_code = xfi.serv_prov_code
 39     AND finv.invoice_nbr = xfi.invoice_nbr
 40     AND sd.serv_prov_code = :spc
 41     AND upper(sd.set_id) = :p1
 42     AND xfi.rec_status = 'A'
 43     AND xfi.feeitem_invoice_status = 'INVOICED'
 44 ORDER BY gf_fee_apply_date
 45 /
Elapsed: 00:00:00.51

Execution Plan



Plan hash value: 2996231674

| Id | Operation | Name |
Rows | Bytes
| Cost (%CPU)| Time |



| 0 | SELECT STATEMENT | |
417 | 90072
| 16 (13)| 00:00:01 |

| 1 | SORT ORDER BY | |
417 | 90072
| 16 (13)| 00:00:01 |

|*  2 |   HASH JOIN                      |                      |
417 | 90072
| 15 (7)| 00:00:01 |

| 3 | NESTED LOOPS |
| |
| | |

| 4 | NESTED LOOPS | |
29 | 5626
| 11 (0)| 00:00:01 |

| 5 | NESTED LOOPS | |
3 | 441
| 8 (0)| 00:00:01 |

| 6 | TABLE ACCESS BY INDEX ROWID| SETDETAILS |
3 | 105
| 2 (0)| 00:00:01 |

|* 7 | INDEX RANGE SCAN | SETDETAILS_SETID_IX | 3 |
| 1 (0)| 00:00:01 |

|* 8 | TABLE ACCESS BY INDEX ROWID| X4FEEITEM_INVOICE | 1 | 112
| 2 (0)| 00:00:01 |

|* 9 | INDEX RANGE SCAN | X4FEEITEM_INVOICE_PK | 1 |
| 1 (0)| 00:00:01 |

|* 10 | INDEX UNIQUE SCAN | F4FEEITEM_PK | 1 |
| 0 (0)| 00:00:01 |

| 11 | TABLE ACCESS BY INDEX ROWID | F4FEEITEM |
10 | 470
| 1 (0)| 00:00:01 |

| 12 | TABLE ACCESS BY INDEX ROWID | F4INVOICE |
9453 | 203K
| 3 (0)| 00:00:01 |

|* 13 | INDEX RANGE SCAN | F4INVOICE_DATE_IX | 9453 |
| 2 (0)| 00:00:01 |



Predicate Information (identified by operation id):


   2 - access("FINV"."SERV_PROV_CODE"="XFI"."SERV_PROV_CODE" AND
              "FINV"."INVOICE_NBR"="XFI"."INVOICE_NBR")
   7 - access("SD"."SERV_PROV_CODE"=:SPC AND UPPER("SET_ID")=:P1)
   8 - filter("XFI"."FEEITEM_INVOICE_STATUS"='INVOICED' AND
"XFI"."REC_STATUS"='
A')

   9 - access("XFI"."SERV_PROV_CODE"=:SPC AND "SD"."B1_PER_ID1"="XFI"."B1_PER_ID
1" AND               "SD"."B1_PER_ID2"="XFI"."B1_PER_ID2" AND "SD"."B1_PER_ID3"="XFI"."
B1_PER_ID3")   10 - access("F4"."SERV_PROV_CODE"=:SPC AND "XFI"."B1_PER_ID1"="F4"."B1_PER_ID1
" AND               "XFI"."B1_PER_ID2"="F4"."B1_PER_ID2" AND "XFI"."B1_PER_ID3"="F4"."
B1_PER_ID3" AND               "XFI"."FEEITEM_SEQ_NBR"="F4"."FEEITEM_SEQ_NBR")   13 - access("FINV"."SERV_PROV_CODE"=:SPC)

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options Received on Tue Nov 03 2009 - 09:29:46 CST

Original text of this message