Re: performance issue after upgrade to oracle 11.2.0.1 linux 32 bit.
From: lsllcm <lsllcm_at_gmail.com>
Date: Sun, 8 Nov 2009 08:15:57 -0800 (PST)
Message-ID: <eada64ab-56d7-4472-85fe-60de18ec2f2e_at_z3g2000prd.googlegroups.com>
On Nov 8, 9:36 pm, Charles Hooper <hooperc2..._at_yahoo.com> wrote:
> On Nov 7, 9:13 am, lsllcm <lsl..._at_gmail.com> wrote:
>
> > Thanks Charles and Randolf for your comments:
>
> Thanks for running all of the test cases. Many of the plans produced
> are identical, but none show the same plan as you posted for 11.1.0.6
> and 11.2.0.1.
>
> > Below are test cases and results.
>
> > ------------------------case
> > 1------------------------------------------------
> > 1. Use hint /*+ index(SD SETDETAILS_SETID_IX) */
>
> > Result: the result is same as no index hint
>
> It appears that the optimizer was originally using the
> SETDETAILS_PID_IX index based on your first post in this thread, so it
> does appear that the index hint did actually change the plan when
> using your original OPTIMIZER_MODE, OPTIMIZER_INDEX_COST_ADJ and
> OPTIMIZER_INDEX_CACHING parameter settings.
>
> (snip)
>
> > SQL> exec :efd:='2008-12-04 23:59:59';
> > PL/SQL procedure successfully completed.
> > Elapsed: 00:00:00.37
>
> > SQL> rem exec :p1:='254413'
> > SQL> exec :p1:='SET07'
> > PL/SQL procedure successfully completed.
> > Elapsed: 00:00:00.03
>
> > SQL> exec :p2:='Contractor'
> > PL/SQL procedure successfully completed.
> > Elapsed: 00:00:00.18
>
> It seems a little odd that some of these commands to set bind variable
> values requires 370ms - about 1/2 as long as it takes to actually
> execute the SQL statement with OPTIMIZER_MODE set to ALL_ROWS. I am
> not sure if there is significance to this observation, or not.
>
> (snip)
>
>
>
>
>
> > 6------------------------------------------------
> > 6. If query is expected to retrieve 100,000 rows, but the application
> > front-end will ONLY read just the first 100 rows and then throw away
> > the rest of the query results without bother fetching the remaining
> > rows.
> > [lsllcm] There are many queries like the case in our environment. So
> > we use FIRST_ROWS_100. I will test different queries in both
> > FIRST_ROWS_100 and ALL_ROWS in 10g db and see difference.
>
> > ------------------------item
> > 7------------------------------------------------
> > Is it a special case that no rows are returned due to some of the
> > bind
> > values used? How many rows does this kind of statement return
> > typically?
>
> > [lsllcm] The data in table SETDETAILS is skew, most of them have less
> > than 100 rows returned
> > based on SETDETAILS_SETID_IX. 10 of them have from 10,000 - 40,000
> > rows returned.
>
> Skewed data and bind variables may lead to problems with the re-use of
> plans, especially if histograms are present. Oracle 11.2.0.1 (with
> OPTIMIZER_MODE = ALL_ROWS) might be trying to build a "safer" plan
> which will work reasonably well for 10 or 40,000 rows, while 11.1.0.6
> and 10.2.0.4 appear to be relying on a short-circuit in the plan which
> required only 3 logical IOs. Any idea how the plan produced on the
> older releases of Oracle might have handled the situations where the
> plan returned 40,000 rows? In other words, while the one case you
> have identified with returning 0 rows executes quickly, the case where
> 40,000 rows are returned might execute much slower than the 11.2.0.1
> execution.
>
> > I use below command to gather statistics.
>
> > exec dbms_stats.gather_schema_stats
> > ('TEST',estimate_percent=>100,cascade=> TRUE);
>
> OK, the above collects table and index statistics, but I am not sure
> if that will collect the statistics on the hidden columns (Randolf or
> Jonathan should be able to answer this question).
>
> > Below are histogram of SYS_NC00017$
>
> What is the purpose of this index? This is the same index that I
> mentioned previously that showed a strange IO cost in the 10053 trace
> file:
> cost_io
> 179769313486231570814527423731704356798070567525844996598917476803157260780
> 028538760589558632766878171540458953514382464234321326889464182768467546703
> 537516986049910576551282076245490090389328944075868508455133942304583236903
> 222948165808559332123348274797826204144723168738177180919299881250404026184
> 124858368.00
>
>
>
> > ------------------------item
> > 8------------------------------------------------
> > [lsllcm] The reason to set "_optimizer_cost_based_transformation is to
> > check if
> > the issue is related to the setting. Now I have set it back to
> > default.
>
> OK, so you temporarily set _optimizer_cost_based_transformation to
> false to check for changes in performance, and have returned the
> parameter to its original value. I might be remembering incorrectly,
> but I believe that there was a bug in 10.2.0.4, and the work-around
> for the bug required this hidden parameter to be set to false. That
> might explain why you saw that parameter set to false in 10.2.0.4.
>
> > ------------------------item
> > 9------------------------------------------------
> > 9. You might try collecting system statistics during a busy time
> > period.
> > To collect the system statistics with a 60 minute monitoring period,
> > enter the following in SQL*Plus (the SQL*Plus command prompt will
> > return immediately):
> > EXEC DBMS_STATS.GATHER_SYSTEM_STATS('interval',interval=>60)
>
> > [lsllcm] I did not gather system statistics, and I check again
> > scheduled job, no job
> > gather system staitstics.
>
> There is no automated job for *system* (CPU) statistics gathering -
> the DBA must tell Oracle when to collect the statistics using
> DBMS_STATS.GATHER_SYSTEM_STATS.
> From:http://download.oracle.com/docs/cd/E11882_01/server.112/e10821/stats....
> "System statistics describe the system's hardware characteristics,
> such as I/O and CPU performance and utilization, to the query
> optimizer. When choosing an execution plan, the optimizer estimates
> the I/O and CPU resources required for each query. System statistics
> enable the query optimizer to more accurately estimate I/O and CPU
> costs, enabling the query optimizer to choose a better execution
> plan."
>
> Jonathan has also written several articles on the topic, here are a
> couple of those articles:http://jonathanlewis.wordpress.com/2007/04/30/system-statistics/http://jonathanlewis.wordpress.com/2007/05/20/system-stats-strategy/http://jonathanlewis.wordpress.com/2007/10/17/system-statistics-3/
>
> > 10------------------------------------------------
> > 10. As you suggested, I change the optimizer setting into default as
> > combination ALL_ROWS + OICA (100) + OIC (0) in test environment. The
> > result is
> > system looks like to become stable. Even if the query does not choose
> > best
> > execution plan, it chooses not worst execution plan. Like the test
> > case above,
> > it has 3 consistent reads in 10g db (it should be best execution
> > plan). In 11g
> > (ALL_ROWS), it has 3656 consistent reads (it is not best, but it is
> > not worst
> > too). In 11g (FIRST_ROWS_100), it has 2891740 consistent gets(like
> > worst one).
>
> It is good that you found a suitable plan, which might be suitable if
> 0 rows, 10 rows, or 40,000 rows are returned.
>
> Charles Hooper
> IT Manager/Oracle DBA
> K&M Machine-Fabricating, Inc.- Hide quoted text -
>
> - Show quoted text -
WHERE ROWNUM < 101
Date: Sun, 8 Nov 2009 08:15:57 -0800 (PST)
Message-ID: <eada64ab-56d7-4472-85fe-60de18ec2f2e_at_z3g2000prd.googlegroups.com>
On Nov 8, 9:36 pm, Charles Hooper <hooperc2..._at_yahoo.com> wrote:
> On Nov 7, 9:13 am, lsllcm <lsl..._at_gmail.com> wrote:
>
> > Thanks Charles and Randolf for your comments:
>
> Thanks for running all of the test cases. Many of the plans produced
> are identical, but none show the same plan as you posted for 11.1.0.6
> and 11.2.0.1.
>
> > Below are test cases and results.
>
> > ------------------------case
> > 1------------------------------------------------
> > 1. Use hint /*+ index(SD SETDETAILS_SETID_IX) */
>
> > Result: the result is same as no index hint
>
> It appears that the optimizer was originally using the
> SETDETAILS_PID_IX index based on your first post in this thread, so it
> does appear that the index hint did actually change the plan when
> using your original OPTIMIZER_MODE, OPTIMIZER_INDEX_COST_ADJ and
> OPTIMIZER_INDEX_CACHING parameter settings.
>
> (snip)
>
> > SQL> exec :efd:='2008-12-04 23:59:59';
> > PL/SQL procedure successfully completed.
> > Elapsed: 00:00:00.37
>
> > SQL> rem exec :p1:='254413'
> > SQL> exec :p1:='SET07'
> > PL/SQL procedure successfully completed.
> > Elapsed: 00:00:00.03
>
> > SQL> exec :p2:='Contractor'
> > PL/SQL procedure successfully completed.
> > Elapsed: 00:00:00.18
>
> It seems a little odd that some of these commands to set bind variable
> values requires 370ms - about 1/2 as long as it takes to actually
> execute the SQL statement with OPTIMIZER_MODE set to ALL_ROWS. I am
> not sure if there is significance to this observation, or not.
>
> (snip)
>
>
>
>
>
> > 6------------------------------------------------
> > 6. If query is expected to retrieve 100,000 rows, but the application
> > front-end will ONLY read just the first 100 rows and then throw away
> > the rest of the query results without bother fetching the remaining
> > rows.
> > [lsllcm] There are many queries like the case in our environment. So
> > we use FIRST_ROWS_100. I will test different queries in both
> > FIRST_ROWS_100 and ALL_ROWS in 10g db and see difference.
>
> > ------------------------item
> > 7------------------------------------------------
> > Is it a special case that no rows are returned due to some of the
> > bind
> > values used? How many rows does this kind of statement return
> > typically?
>
> > [lsllcm] The data in table SETDETAILS is skew, most of them have less
> > than 100 rows returned
> > based on SETDETAILS_SETID_IX. 10 of them have from 10,000 - 40,000
> > rows returned.
>
> Skewed data and bind variables may lead to problems with the re-use of
> plans, especially if histograms are present. Oracle 11.2.0.1 (with
> OPTIMIZER_MODE = ALL_ROWS) might be trying to build a "safer" plan
> which will work reasonably well for 10 or 40,000 rows, while 11.1.0.6
> and 10.2.0.4 appear to be relying on a short-circuit in the plan which
> required only 3 logical IOs. Any idea how the plan produced on the
> older releases of Oracle might have handled the situations where the
> plan returned 40,000 rows? In other words, while the one case you
> have identified with returning 0 rows executes quickly, the case where
> 40,000 rows are returned might execute much slower than the 11.2.0.1
> execution.
>
> > I use below command to gather statistics.
>
> > exec dbms_stats.gather_schema_stats
> > ('TEST',estimate_percent=>100,cascade=> TRUE);
>
> OK, the above collects table and index statistics, but I am not sure
> if that will collect the statistics on the hidden columns (Randolf or
> Jonathan should be able to answer this question).
>
> > Below are histogram of SYS_NC00017$
>
> What is the purpose of this index? This is the same index that I
> mentioned previously that showed a strange IO cost in the 10053 trace
> file:
> cost_io
> 179769313486231570814527423731704356798070567525844996598917476803157260780
> 028538760589558632766878171540458953514382464234321326889464182768467546703
> 537516986049910576551282076245490090389328944075868508455133942304583236903
> 222948165808559332123348274797826204144723168738177180919299881250404026184
> 124858368.00
>
>
>
> > ------------------------item
> > 8------------------------------------------------
> > [lsllcm] The reason to set "_optimizer_cost_based_transformation is to
> > check if
> > the issue is related to the setting. Now I have set it back to
> > default.
>
> OK, so you temporarily set _optimizer_cost_based_transformation to
> false to check for changes in performance, and have returned the
> parameter to its original value. I might be remembering incorrectly,
> but I believe that there was a bug in 10.2.0.4, and the work-around
> for the bug required this hidden parameter to be set to false. That
> might explain why you saw that parameter set to false in 10.2.0.4.
>
> > ------------------------item
> > 9------------------------------------------------
> > 9. You might try collecting system statistics during a busy time
> > period.
> > To collect the system statistics with a 60 minute monitoring period,
> > enter the following in SQL*Plus (the SQL*Plus command prompt will
> > return immediately):
> > EXEC DBMS_STATS.GATHER_SYSTEM_STATS('interval',interval=>60)
>
> > [lsllcm] I did not gather system statistics, and I check again
> > scheduled job, no job
> > gather system staitstics.
>
> There is no automated job for *system* (CPU) statistics gathering -
> the DBA must tell Oracle when to collect the statistics using
> DBMS_STATS.GATHER_SYSTEM_STATS.
> From:http://download.oracle.com/docs/cd/E11882_01/server.112/e10821/stats....
> "System statistics describe the system's hardware characteristics,
> such as I/O and CPU performance and utilization, to the query
> optimizer. When choosing an execution plan, the optimizer estimates
> the I/O and CPU resources required for each query. System statistics
> enable the query optimizer to more accurately estimate I/O and CPU
> costs, enabling the query optimizer to choose a better execution
> plan."
>
> Jonathan has also written several articles on the topic, here are a
> couple of those articles:http://jonathanlewis.wordpress.com/2007/04/30/system-statistics/http://jonathanlewis.wordpress.com/2007/05/20/system-stats-strategy/http://jonathanlewis.wordpress.com/2007/10/17/system-statistics-3/
>
> > 10------------------------------------------------
> > 10. As you suggested, I change the optimizer setting into default as
> > combination ALL_ROWS + OICA (100) + OIC (0) in test environment. The
> > result is
> > system looks like to become stable. Even if the query does not choose
> > best
> > execution plan, it chooses not worst execution plan. Like the test
> > case above,
> > it has 3 consistent reads in 10g db (it should be best execution
> > plan). In 11g
> > (ALL_ROWS), it has 3656 consistent reads (it is not best, but it is
> > not worst
> > too). In 11g (FIRST_ROWS_100), it has 2891740 consistent gets(like
> > worst one).
>
> It is good that you found a suitable plan, which might be suitable if
> 0 rows, 10 rows, or 40,000 rows are returned.
>
> Charles Hooper
> IT Manager/Oracle DBA
> K&M Machine-Fabricating, Inc.- Hide quoted text -
>
> - Show quoted text -
Thanks Charles and Randolf, I learned a lot about optimizer from this thread.
------------------------case 1------------------------------------------------1. Use hint /*+ index(SD SETDETAILS_SETID_IX) */
Result: yes, the execution plan is different and use different index. I did not check it carefully.
------------------------item 2------------------------------------------------Below are histogram of SYS_NC00017$
Yes, SYS_NC00017$ is function index column UPPER("SD"."SET_ID") in
index SETDETAILS_SET_IX
It showed a strange IO cost in the 10053 trace file:
cost_io
179769313486231570814527423731704356798070567525844996598917476803157260780-- 028538760589558632766878171540458953514382464234321326889464182768467546703-- 537516986049910576551282076245490090389328944075868508455133942304583236903-- 222948165808559332123348274797826204144723168738177180919299881250404026184--124858368.00
------------------------item 3------------------------------------------------Below sql still runs slow regardless optimzer mode is FIRST_ROWS_100 and ALL_ROWS
SELECT *
FROM (SELECT A.SERV_PROV_CODE AS SERV_PROV_CODE,
A.B1_PER_ID1 AS B1_PER_ID1,
A.B1_PER_ID2 AS B1_PER_ID2,
A.B1_PER_ID3 AS B1_PER_ID3,
A.B1_PER_GROUP,
A.B1_PER_TYPE,
A.B1_PER_SUB_TYPE,
A.B1_PER_CATEGORY,
A.B1_SPECIAL_TEXT,
A.B1_CREATED_BY_ACA,
A.R3_STD_TIME_CLASS_CODE,
A.B1_STANDARD_TIME,
A.B1_EVENT_CODE,
A.B1_REF_ID,
A.B1_APPL_STATUS,
A.REC_FUL_NAM,
A.REC_STATUS,
A.PROJECT_NBR,
A.B1_ALT_ID,
A.B1_TRACKING_NBR,
A.B1_APPL_STATUS_DATE,
A.B1_REF_ID1,
A.B1_REF_ID2,
A.B1_REF_ID3,
A.B1_Q_UD1,
A.B1_Q_UD2,
A.B1_Q_UD3,
A.B1_Q_UD4,
A.APP_STATUS_GROUP_CODE,
A.B1_MODULE_NAME,
A.B1_FILE_DD,
A.REC_DATE,
A.B1_REPORTED_DATE,
A.B1_APPL_CLASS,
A.B1_APP_TYPE_ALIAS,
A.B1_CREATED_BY,
A.B1_INITIATED_BY_PRODUCT,
B.APP_STATUS,
B.APP_STATUS_DATE,
B.DISPOSITION,
B.DISPOSITION_DATE,
B.TOTAL_FEE,
B.TOTAL_PAY,
B.PERCENT_COMPLETE,
B.BALANCE,
B.BALANCE_DATE,
B.HOUSE_COUNT,
B.BUILDING_COUNT,
B.PUBLIC_OWNED,
B.CONST_TYPE_CODE,
B.ACTION,
B.GA_AGENCY_CODE,
B.GA_BUREAU_CODE,
B.GA_DIVISION_CODE,
B.GA_OFFICE_CODE,
B.GA_SECTION_CODE,
B.GA_GROUP_CODE,
B.GA_FNAME,
B.GA_MNAME,
B.GA_LNAME,
B.B1_APPL_SUB_STATUS,
B.B1_SHORT_NOTES,
B.B1_CLOSED_DATE,
B.B1_CLOSEDBY,
B.B1_REPORTED_CHANNEL,
B.B1_ASGN_DEPT,
B.B1_ASGN_STAFF,
B.B1_PRIORITY,
B.B1_SEVERITY,
B.B1_ASGN_DATE,
B.TOTAL_JOB_COST,
B.B1_CLOSED_DEPT,
B.B1_COMPLETE_BY,
B.B1_COMPLETE_DEPT,
B.B1_COMPLETE_DATE,
B.B1_SCHEDULED_DATE,
B.B1_CREATOR_DEPT,
B.PM_SCHEDULE_SEQ,
B.B1_EST_PROD_UNITS,
B.B1_ACTUAL_PROD_UNITS,
B.B1_EST_COST_PER_UNIT,
B.B1_COST_PER_UNIT,
B.B1_EST_JOB_COST,
B.B1_PROD_UNIT_TYPE,
B.B1_CREATED_BY AS B1CREATEDBY,
B.B1_TRACK_START_DATE,
B.B1_ESTIMATED_DUE_DATE,
B.B1_IN_POSSESSION_TIME,
B.C6_ANONYMOUS_FLAG,
B.C6_REFERENCE_TYPE,
B.C6_APPEARANCE_DAYOFWEEK,
B.C6_APPEARANCE_DD,
B.C6_BOOKING_FLAG,
B.C6_DFNDT_SIGNATURE_FLAG,
B.C6_ENFORCE_OFFICER_ID,
B.C6_ENFORCE_OFFICER_NAME,
B.C6_INFRACTION_FLAG,
B.C6_INSPECTOR_ID,
B.C6_MISDEMEANOR_FLAG,
B.C6_OFFN_WITNESSED_FLAG,
B.C6_INSPECTOR_NAME,
B.C6_ENFORCE_DEPT,
B.C6_INSPECTOR_DEPT,
B.APP_STATUS_REASON,
B.FIRST_ISSUED_DATE,
B.UNDISTRIBUTED_JOB_COST,
B.B1_VAL_MULTIPLIER,
B.B1_VAL_EXTRA_AMT,
G.EXPIRATION_CODE,
G.EXPIRATION_STATUS,
G.EXPIRATION_DATE,
G.EXPIRATION_INTERVAL,
G.EXPIRATION_INTERVAL_UNITS,
G.GRACE_PERIOD_INTERVAL,
G.GRACE_PERIOD_INTERVAL_UNITS,
G.PENALTY_INTERVAL,
G.PENALTY_INTERVAL_UNITS,
G.NUM_PENALTY_PERIODS,
G.PENALTY_PERIOD,
G.RENEWAL_FEE_FUNCTION,
G.RENEWAL_FEE_CODE,
G.PENALTY_FEE_FUNCTION,
G.PENALTY_FEE_CODE,
G.PAY_PERIOD_GROUP,
G.UDF1,
G.UDF2,
G.UDF3,
G.UDF4,
C.B1_WORK_DESC
FROM B1PERMIT A
LEFT OUTER JOIN BPERMIT_DETAIL B ON A.SERV_PROV_CODE =
B.SERV_PROV_CODE
AND A.B1_PER_ID1 =
B.B1_PER_ID1
AND A.B1_PER_ID2 =
B.B1_PER_ID2
AND A.B1_PER_ID3 =
B.B1_PER_ID3
LEFT OUTER JOIN BWORKDES C ON A.SERV_PROV_CODE =
C.SERV_PROV_CODE
AND A.B1_PER_ID1 = C.B1_PER_ID1
AND A.B1_PER_ID2 = C.B1_PER_ID2
AND A.B1_PER_ID3 = C.B1_PER_ID3
LEFT OUTER JOIN B1_EXPIRATION G ON A.SERV_PROV_CODE =
G.SERV_PROV_CODE
AND A.B1_PER_ID1 =
G.B1_PER_ID1
AND A.B1_PER_ID2 =
G.B1_PER_ID2
AND A.B1_PER_ID3 =
G.B1_PER_ID3,
B3CONTRA L
WHERE A.REC_STATUS = 'A'
AND A.B1_PER_ID3 NOT LIKE '#%'
AND (A.B1_APPL_CLASS = 'COMPLETE' OR A.B1_APPL_CLASS IS
NULL)
AND A.SERV_PROV_CODE = L.SERV_PROV_CODE
AND A.B1_PER_ID1 = L.B1_PER_ID1
AND A.B1_PER_ID2 = L.B1_PER_ID2
AND A.B1_PER_ID3 = L.B1_PER_ID3
AND A.SERV_PROV_CODE = :spc
AND L.B1_LICENSE_NBR = :p1
AND L.B1_LICENSE_TYPE = :p2
ORDER BY A.B1_FILE_DD DESC)
WHERE ROWNUM < 101
- in 10g and 11.1.0.6 db
The plan as below:
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1 | 4157 | 6 (17)| 00:00:01 | |* 1 | COUNT STOPKEY | | | | | | | 2 | VIEW | | 1 | 4157 | 6 (17)| 00:00:01 | |* 3 | SORT ORDER BY STOPKEY | | 1 | 616 | 6 (17)| 00:00:01 | | 4 | NESTED LOOPS OUTER | | 1 | 616 | 5 (0)| 00:00:01 | | 5 | NESTED LOOPS OUTER | | 1 | 447 | 3 (0)| 00:00:01 | | 6 | NESTED LOOPS OUTER | | 1 | 319 | 2 (0)| 00:00:01 | | 7 | NESTED LOOPS | | 1 | 235 | 1 (0)| 00:00:01 | |* 8 | TABLE ACCESS BY INDEX ROWID| B3CONTRA | 1 | 48 | 0 (0)| 00:00:01 | |* 9 | INDEX RANGE SCAN | B3CONTRA_BUS_NAM2_IX | 1 | | 0 (0)| 00:00:01 | |* 10 | TABLE ACCESS BY INDEX ROWID| B1PERMIT | 1 | 187 | 1 (0)| 00:00:01 | |* 11 | INDEX UNIQUE SCAN | B1PERMIT_PK | 1 | | 0 (0)| 00:00:01 | | 12 | TABLE ACCESS BY INDEX ROWID | BWORKDES | 4 | 336 | 1 (0)| 00:00:01 | |* 13 | INDEX UNIQUE SCAN | BWORKDES_PK | 1 | | 0 (0)| 00:00:01 | | 14 | TABLE ACCESS BY INDEX ROWID | BPERMIT_DETAIL | 1 | 128 | 1 (0)| 00:00:01 | |* 15 | INDEX UNIQUE SCAN | BPERMIT_DETAIL_PK | 1 | | 0 (0)| 00:00:01 | | 16 | TABLE ACCESS BY INDEX ROWID | B1_EXPIRATION | 2 | 338 | 2 (0)| 00:00:01 | |* 17 | INDEX RANGE SCAN | B1_EXPIRATION_PK | 1 | | 1 (0)| 00:00:01 |
- in 11.2.0.1 db
The plan as below:
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 75 | 304K| 246 (1)| 00:00:03 | |* 1 | COUNT STOPKEY | | | | | | | 2 | VIEW | | 75 | 304K| 246 (1)| 00:00:03 | |* 3 | SORT ORDER BY STOPKEY | | 75 | 44025 | 246 (1)| 00:00:03 | | 4 | NESTED LOOPS OUTER | | 75 | 44025 | 245 (0)| 00:00:03 | |* 5 | HASH JOIN RIGHT OUTER | | 75 | 32175 | 96 (2)| 00:00:02 | |* 6 | TABLE ACCESS FULL | B1_EXPIRATION | 52 | 7592 | 3 (0)| 00:00:01 | | 7 | NESTED LOOPS OUTER | | 75 | 21225 | 92 (0)| 00:00:02 | | 8 | NESTED LOOPS | | 75 | 15300 | 6 (0)| 00:00:01 | |* 9 | TABLE ACCESS BY INDEX ROWID| B3CONTRA | 1 | 48 | 4 (0)| 00:00:01 | |* 10 | INDEX RANGE SCAN | B3CONTRA_LIC_NBR1_IX | 2 | | 3 (0)| 00:00:01 | |* 11 | TABLE ACCESS BY INDEX ROWID| B1PERMIT | 1374 | 209K| 2 (0)| 00:00:01 | |* 12 | INDEX UNIQUE SCAN | B1PERMIT_PK | 1 | | 1 (0)| 00:00:01 | | 13 | TABLE ACCESS BY INDEX ROWID | BWORKDES | 1 | 79 | 2 (0)| 00:00:01 | |* 14 | INDEX UNIQUE SCAN | BWORKDES_PK | 1 | | 1 (0)| 00:00:01 | | 15 | TABLE ACCESS BY INDEX ROWID | BPERMIT_DETAIL | 1 | 158 | 2 (0)| 00:00:01 | |* 16 | INDEX UNIQUE SCAN | BPERMIT_DETAIL_PK | 1 | | 1 (0)| 00:00:01 |
Thanks
lsllcm
Received on Sun Nov 08 2009 - 10:15:57 CST
