An odd index in the execution plan name
Hi allToday someone came to aks my help on setting a SQL. Follow-up is compositions of the entire plan. Although I resovled performance issue, I still don't understand why
the index with the name "BIN$ ld5VAtb88PngQAB/AQF8hg == $0 ' similar appear in the plan."
If I remember correctly, this kind of names mean the items in the Recycle Bin. But the index has been abandoned can be used in the execution plan?
Someone sees potential problems involved with this kind of index name, index name, just please?
Best regards
Leon
---------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 231 | 5 (0)| 00:00:01 |
|* 1 | FILTER | | | | | |
| 2 | TABLE ACCESS FULL | TBL_SYS_USERS | 344 | 79464 | 5 (0)| 00:00:01 |
| 3 | NESTED LOOPS | | 1 | 80 | 13 (0)| 00:00:01 |
|* 4 | TABLE ACCESS FULL | TBL_SYS_DATA_ACCESS_RULES | 1 | 54 | 13 (0)| 00:00:01 |
|* 5 | INDEX UNIQUE SCAN | BIN$ld5VAtb88PngQAB/AQF8hg==$0 | 1 | 26 | 0 (0)| 00:00:01 |
| 6 | NESTED LOOPS | | 1 | 80 | 13 (0)| 00:00:01 |
|* 7 | TABLE ACCESS FULL | TBL_SYS_DATA_ACCESS_RULES | 1 | 54 | 13 (0)| 00:00:01 |
|* 8 | INDEX UNIQUE SCAN | BIN$ld5VAtb88PngQAB/AQF8hg==$0 | 1 | 26 | 0 (0)| 00:00:01 |
| 9 | NESTED LOOPS | | 1 | 80 | 13 (0)| 00:00:01 |
|* 10 | TABLE ACCESS FULL | TBL_SYS_DATA_ACCESS_RULES | 1 | 54 | 13 (0)| 00:00:01 |
|* 11 | INDEX UNIQUE SCAN | BIN$ld5VAtb88PngQAB/AQF8hg==$0 | 1 | 26 | 0 (0)| 00:00:01 |
|* 12 | TABLE ACCESS BY INDEX ROWID | TBL_SYS_EMPLOYEES | 1 | 26 | 1 (0)| 00:00:01 |
|* 13 | INDEX UNIQUE SCAN | BIN$ld5VAtba8PngQAB/AQF8hg==$0 | 1 | | 0 (0)| 00:00:01 |
|* 14 | TABLE ACCESS FULL | TBL_SYS_DATA_ACCESS_RULES | 1 | 54 | 13 (0)| 00:00:01 |
|* 15 | TABLE ACCESS FULL | TBL_SYS_DATA_ACCESS_RULES | 1 | 54 | 13 (0)| 00:00:01 |
|* 16 | TABLE ACCESS FULL | TBL_SYS_DATA_ACCESS_RULES | 1 | 54 | 13 (0)| 00:00:01 |
|* 17 | TABLE ACCESS BY INDEX ROWID | TBL_SYS_EMPLOYEES | 1 | 26 | 1 (0)| 00:00:01 |
|* 18 | INDEX UNIQUE SCAN | BIN$ld5VAtba8PngQAB/AQF8hg==$0 | 1 | | 0 (0)| 00:00:01 |
| 19 | NESTED LOOPS | | 1 | 80 | 14 (0)| 00:00:01 |
| 20 | TABLE ACCESS BY INDEX ROWID | TBL_SYS_EMPLOYEES | 1 | 26 | 1 (0)| 00:00:01 |
|* 21 | INDEX UNIQUE SCAN | BIN$ld5VAtba8PngQAB/AQF8hg==$0 | 1 | | 0 (0)| 00:00:01 |
|* 22 | TABLE ACCESS FULL | TBL_SYS_DATA_ACCESS_RULES | 1 | 54 | 13 (0)| 00:00:01 |
| 23 | NESTED LOOPS | | 1 | 80 | 14 (0)| 00:00:01 |
user12064076 wrote:
Hi allToday someone came to aks my help on setting a SQL. Follow-up is compositions of the entire plan. Although I resovled performance issue, I still don't understand why
the index with the name "BIN$ ld5VAtb88PngQAB/AQF8hg == $0 ' similar appear in the plan."If I remember correctly, this kind of names mean the items in the Recycle Bin. But the index has been abandoned can be used in the execution plan?
Someone sees potential problems involved with this kind of index name, index name, just please?Best regards
Leon
The simple answer is that the table has been abandoned and flashed then back to before the fall. When this happens, the table name is restored to its original name, but the index names are not restored. A quick to demonstrate test case.
First, create us a table and an index, and then collect statistics:
DROP TABLE T1 PURGE;
CREATE TABLE T1 AS
SELECT
ROWNUM C1,
RPAD('A',255,'A') C2
FROM
DUAL
CONNECT BY
LEVEL<=10000;
COMMIT;
CREATE INDEX IND_T1_C1 ON T1(C1);
EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>USER,TABNAME=>'T1',CASCADE=>TRUE)
Then we will check that the index will be used with a sample SQL statement:
SELECT
C1,
SUBSTR(C2,1,2)
FROM
T1
WHERE
C1<=5;
C1 SU
--- --
1 AA
2 AA
3 AA
4 AA
5 AA
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,NULL));
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------
SQL_ID g0kkvxqg3v145, child number 0
-------------------------------------
SELECT C1, SUBSTR(C2,1,2) FROM T1 WHERE C1<=5
Plan hash value: 683303157
-----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 3 (100)| |
| 1 | TABLE ACCESS BY INDEX ROWID| T1 | 5 | 1300 | 3 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IND_T1_C1 | 5 | | 2 (0)| 00:00:01 |
-----------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("C1"<=5)
The index has been used.
Then, we will empty the trash, delete the index and see if it can still be used in an execution plan:
PURGE RECYCLEBIN;
DROP INDEX IND_T1_C1;
SELECT
C1,
SUBSTR(C2,1,2)
FROM
T1
WHERE
C1<=5;
C1 SU
--- --
1 AA
2 AA
3 AA
4 AA
5 AA
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,NULL));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------
SQL_ID g0kkvxqg3v145, child number 0
-------------------------------------
SELECT C1, SUBSTR(C2,1,2) FROM T1 WHERE C1<=5
Plan hash value: 3617692013
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 137 (100)| |
|* 1 | TABLE ACCESS FULL| T1 | 5 | 1300 | 137 (5)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("C1"<=5)
Note that in the foregoing that falling was not used.
We'll re-create the index and gather statistics (when the index is created on Oracle Database 10.1 and higher, the index of statistics will be automatically collected, so it's actually an unnecessary step):
CREATE INDEX IND_T1_C1 ON T1(C1);
EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>USER,TABNAME=>'T1',CASCADE=>TRUE)
We could verify that the index will be used again, but we can skip this step.
Now we remove the table and pick up the trash. Then we run the simple query of the T1 table again and retrieve the execution plan:
DROP TABLE T1;
FLASHBACK TABLE T1 TO BEFORE DROP;
SELECT
C1,
SUBSTR(C2,1,2)
FROM
T1
WHERE
C1<=5;
C1 SU
--- --
1 AA
2 AA
3 AA
4 AA
5 AA
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,NULL));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------
SQL_ID g0kkvxqg3v145, child number 0
-------------------------------------
SELECT C1, SUBSTR(C2,1,2) FROM T1 WHERE C1<=5
Plan hash value: 3441582395
--------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 3 (100)| |
| 1 | TABLE ACCESS BY INDEX ROWID| T1 | 5 | 1300 | 3 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | BIN$PESygWW5R0WhbOaDugxqwQ==$0 | 5 | | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("C1"<=5)
In the above, you will notice that the index has been used, but now has a funny name.
We will resolve the weird name and re - run the query:
ALTER INDEX "BIN$PESygWW5R0WhbOaDugxqwQ==$0" RENAME TO IND_T1_C1;
SELECT
C1,
SUBSTR(C2,1,2)
FROM
T1
WHERE
C1<=5;
C1 SU
--- --
1 AA
2 AA
3 AA
4 AA
5 AA
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,NULL));
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------
SQL_ID g0kkvxqg3v145, child number 0
-------------------------------------
SELECT C1, SUBSTR(C2,1,2) FROM T1 WHERE C1<=5
Plan hash value: 683303157
-----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 3 (100)| |
| 1 | TABLE ACCESS BY INDEX ROWID| T1 | 5 | 1300 | 3 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IND_T1_C1 | 5 | | 2 (0)| 00:00:01 |
-----------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("C1"<=5)
The index is now back to normal.
Charles Hooper
http://hoopercharles.WordPress.com/
IT Manager/Oracle DBA
K & M-making Machine, Inc.
Tags: Database
Similar Questions
-
Should I wait until the end of the execution time of the query for the execution plan?
Hello Experts,
I want to see the execution plan of the query below. However, it takes more than 3 hours. Should I wait all the time to see the execution plan?
Note: EXPLAIN PLAN for does not work. (I mean that I do not see the actual line number, etc. with EXPLAIN the PLAN of market)
You can see the output of the execution plan when I canceled the execution after 1 minute.
My first question is: what should I do to see the execution plan for queries running out of time time?
2nd question: when I cancel the query during execution in order to see the execution plan, will I see the specific plan of execution or erroneous values? Because the first execution plan seems inaccurate, what do you think?
question 3: why EXPLAIN the PLAN for the clause does not work? Also, should I use EXPLAIN the PLAN of the clause to this scenerio? Can I see the result of running for long time without her queries?
Thnaks for your help.
Oracle Database 11 g Enterprise Edition Release 11.2.0.2.0 - 64 bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE Production 11.2.0.2.0
AMT for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
Select / * + GATHER_PLAN_STATISTICS NO_PARALLEL * / J.INVOICEACCOUNT, J.INVOICEID, J.INVOICEDATE, (T.LINEAMOUNT + T.LINEAMOUNTTAX) price
of custinvoicejour j join custinvoicetrans t on
substr (nls_lower (j.DataAreaId), 1, 7) = substr (nls_lower (t.dataareaid), 1, 7) and
substr (nls_lower (J.INVOICEID), 1: 25) = substr (nls_lower (t.INVOICEID), 1: 25)
where
substr (nls_lower (T.DATAAREAID), 1, 7) = '201' and T.AVBROCHURELINENUM = 29457
and substr (nls_lower (j.dataareaid), 1, 7) = '201' and
J.INVOICEACCOUNT in
(select IT. Drmpos.avtr_seg_cust_campend ACCOUNTNUM this where THIS. CAMPAIGN = '201406' and THIS. SEGMENT_LEVEL in (', 'E'))
and J.AVAWARDSALES > 190
and substr (nls_lower (J.AVBILLINGCAMPAIGN), 1, 13) = '201406'
"and J.INVOICEDATE between ' 04.06.2014' and ' 13.06.2014 ';
SQL_ID, dznya6x7st0t8, number of children 0
-------------------------------------
Select / * + GATHER_PLAN_STATISTICS NO_PARALLEL * / J.INVOICEACCOUNT,.
J.INVOICEID, J.INVOICEDATE, (T.LINEAMOUNT + T.LINEAMOUNTTAX) price of
CustInvoiceJour j join custinvoicetrans t on
substr (nls_lower (j.DataAreaId), 1, 7) =
substr (nls_lower (t.DataAreaId), 1, 7) and
= substr (nls_lower (J.INVOICEID), 1: 25)
substr (nls_lower (t.INVOICEID), 1: 25) where
substr (nls_lower (T.DATAAREAID), 1, 7) = '201' and T.AVBROCHURELINENUM =
29457 and substr (nls_lower, (j.dataareaid), 1, 7) = '201' and
J.INVOICEACCOUNT in (select CE. ACCOUNTNUM of
drmpos.avtr_seg_cust_campend this where THIS. CAMPAIGN = '201406' and
IT. SEGMENT_LEVEL in (', 'E')) and J.AVAWARDSALES > 190 and
substr (nls_lower (J.AVBILLINGCAMPAIGN), 1, 13) = '201406' and
"J.INVOICEDATE between ' 04.06.2014' and ' 13.06.2014 '.
Hash value of plan: 2002317666
--------------------------------------------------------------------------------------------------------------------------------------------------------------
| ID | Operation | Name | Begins | E - lines. A - lines. A - time | Pads | Bed | OMem | 1Mem | Used Mem.
--------------------------------------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1. | 0 | 00:00:00.01 | 0 | 0 | | | |
|* 1 | HASH JOIN | | 1. 3956. 0 | 00:00:00.01 | 0 | 0 | 2254K | 1061K | 2190K (0) |
|* 2 | HASH JOIN | | 1. 87. 16676. 00:00:01.64 | 227K | 3552. 3109K | 1106K | 4111K (0) |
|* 3 | TABLE ACCESS BY INDEX ROWID | CUSTINVOICEJOUR | 1. 1155 | 31889 | 00:00:01.16 | 223KO | 15. | | |
|* 4 | INDEX RANGE SCAN | I_062INVOICEDATEORDERTYPEIDX | 1. 4943 | 134K | 00:00:00.83 | 45440 | 0 | | | |
| 5. SIMPLE LIST OF PARTITION. | 1. 82360 | 173K | 00:00:00.08 | 3809 | 3537 | | | |
|* 6 | TABLE ACCESS FULL | AVTR_SEG_CUST_CAMPEND | 1. 82360 | 173K | 00:00:00.06 | 3809 | 3537 | | | |
| 7. TABLE ACCESS BY INDEX ROWID | CUSTINVOICETRANS | 1. 4560 | 0 | 00:00:00.01 | 0 | 0 | | | |
|* 8 | INDEX RANGE SCAN | I_064INVLINENUMCAMPAIGNOFPRICE | 1. 4560 | 0 | 00:00:00.01 | 0 | 0 | | | |
--------------------------------------------------------------------------------------------------------------------------------------------------------------
Information of predicates (identified by the operation identity card):
---------------------------------------------------
1 - access("J".") "SYS_NC00299$"="T". "' SYS_NC00165$ ' AND SUBSTR (NLS_LOWER ('J'. "" "" REFFACTURE")(, 1, 25) = SUBSTR (NLS_LOWER ("T"." "" "REFFACTURE")(, 1, 25)).
2 - access("J".") INVOICEACCOUNT '= SYS_OP_C2C ("EC". ". ACCOUNTNUM'))
3 - filter("J".") AVAWARDSALES"> 190)
4 - access("J".") SYS_NC00299$ "= U ' 201"AND "J". INVOICEDATE"> = TO_DATE(' 2014-06-04 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND
"J"." SYS_NC00307$ "= U ' 201406"AND "J". INVOICEDATE"< = TO_DATE (' 2014-06-13 00:00:00 ',' syyyy-mm-dd hh24:mi:ss')))
filter ((' J'. "INVOICEDATE' > = 'J' AND TO_DATE(' 2014-06-04 00:00:00', 'syyyy-mm-dd hh24:mi:ss') '." " SYS_NC00307$ "= U '201406' AND"
"J"." INVOICEDATE"< = TO_DATE (' 2014-06-13 00:00:00 ',' syyyy-mm-dd hh24:mi:ss'))))
6 filter (("CE". "SEGMENT_LEVEL" = A "OR"THIS"." SEGMENT_LEVEL "=" E"))
8 - access("T".") SYS_NC00165$ "= U ' 201"AND "T". AVBROCHURELINENUM "= 29457)
filter ("T". ("AVBROCHURELINENUM" = 29457)
EXPLAIN PLAN FOR
Select / * + GATHER_PLAN_STATISTICS NO_PARALLEL * / J.INVOICEACCOUNT, J.INVOICEID, J.INVOICEDATE, (T.LINEAMOUNT + T.LINEAMOUNTTAX) price
of custinvoicejour j join custinvoicetrans t on
substr (nls_lower (j.DataAreaId), 1, 7) = substr (nls_lower (t.dataareaid), 1, 7) and
substr (nls_lower (J.INVOICEID), 1: 25) = substr (nls_lower (t.INVOICEID), 1: 25)
where
substr (nls_lower (T.DATAAREAID), 1, 7) = '201' and T.AVBROCHURELINENUM = 29457
and substr (nls_lower (j.dataareaid), 1, 7) = '201' and
J.INVOICEACCOUNT in
(select IT. Drmpos.avtr_seg_cust_campend ACCOUNTNUM this where THIS. CAMPAIGN = '201406' and THIS. SEGMENT_LEVEL in (', 'E'))
and J.AVAWARDSALES > 190
and substr (nls_lower (J.AVBILLINGCAMPAIGN), 1, 13) = '201406'
"and J.INVOICEDATE between ' 04.06.2014' and ' 13.06.2014 ';
SELECT * FROM table (DBMS_XPLAN. DISPLAY_CURSOR);
SELECT * FROM table (DBMS_XPLAN. DISPLAY_CURSOR ('7h1nbzqjgwsp7', 2));
SQL_ID, 7h1nbzqjgwsp7, number of children 2
EXPLAIN PLAN for select / * + GATHER_PLAN_STATISTICS NO_PARALLEL * /.
J.INVOICEACCOUNT, J.INVOICEID, J.INVOICEDATE,
(T.LINEAMOUNT + T.LINEAMOUNTTAX) join price j custinvoicejour
CustInvoiceTrans t on substr (nls_lower (j.dataareaid), 1, 7) =
substr (nls_lower (t.DataAreaId), 1, 7) and
= substr (nls_lower (J.INVOICEID), 1: 25)
substr (nls_lower (t.INVOICEID), 1: 25) where
substr (nls_lower (T.DATAAREAID), 1, 7) = '201' and T.AVBROCHURELINENUM =
29457 and substr (nls_lower, (j.dataareaid), 1, 7) = '201' and
J.INVOICEACCOUNT in (select CE. ACCOUNTNUM of
drmpos.avtr_seg_cust_campend this where THIS. CAMPAIGN = '201406' and
IT. SEGMENT_LEVEL in (', 'E')) and J.AVAWARDSALES > 190 and
substr (nls_lower (J.AVBILLINGCAMPAIGN), 1, 13) = '201406' and
"J.INVOICEDATE between ' 04.06.2014' and ' 13.06.2014 '.
NOTE: cannot fetch SQL_ID plan: 7h1nbzqjgwsp7, CHILD_NUMBER: 2
Check the value of SQL_ID and CHILD_NUMBER;
It could also be that the plan is no longer in the cursor cache (check v$ sql_plan)
NightWing wrote:
Randolf,
I don't understand. What you hear from the above statement that you mean A-lines and E will be incorrect, but the ratio between them remain the same. Therefore, you can deduct the bad things by comparing the differences.
Thus, A-lines always give a wrong result for cancellation of queries, isn't it?
Charlie,
I think that Martin gave a good explanation. Here's another example that hopefully makes more obvious things:
17:56:55 SQL >-things go very wrong here with a small buffer cache
17:56:55 SQL >-T2 lines are badly scattered when you access through T1. FK
17:56:55 SQL >--
17:56:55 SQL >-"Small job" approach would have been a good idea
17:56:55 SQL >-if the estimate of 100 iterations of the loop was correct!
17:56:55 SQL > select
17:56:55 (t2.attr2) count 2
17:56:55 3 of
17:56:55 4 t1
17:56:55 5, t2
17:56:55 6 where
17:56:55 7 /*------------------*/
17:56:55 8 trunc (t1.attr1) = 1
17:56:55 9 and trunc (t1.attr2) = 1
17:56:55 10 / *-* /.
17:56:55 11 and t1.fk = t2.id
17:56:55 12.
T1
*
ERROR on line 4:
ORA-01013: user has requested the cancellation of the current operation
Elapsed time: 00:04:58.30
18:01:53 SQL >
18:01:53 SQL > @xplan_extended_display_cursor ' ' ' ' 'ALLSTATS LAST + COST.
18:01:53 SQL > set echo off verify off termout off
SQL_ID, 353msax56jvvp, number of children 0
-------------------------------------
SELECT count (t2.attr2) from t1, t2 where
/ / *-* trunc (t1.attr1) = 1 and
trunc (T1.attr2) = 1 / *-* / and t1.fk = t2.id
Hash value of plan: 2900488714
------------------------------------------------------------------------------------------------------------------------------------
| ID | The NEST | DSB | Operation | Name | Begins | E - lines. Cost (% CPU). A - lines. A - time | Pads | Bed |
------------------------------------------------------------------------------------------------------------------------------------
| 0 | | 7. SELECT STATEMENT | | 1. | 4999 (100) | 0 | 00:00:00.01 | 0 | 0 |
| 1. 0 | 8 2 GLOBAL TRI | | 1. 1. | 0 | 00:00:00.01 | 0 | 0 |
| 2. 1. 5. NESTED LOOPS | | 1. | | 57516 | 00:04:58.26 | 173K | 30770 |
| 3. 2. 3. NESTED LOOPS | | 1. 100. 4999 (1) | 57516 | 00:00:21.06 | 116K | 3632.
|* 4 | 3. 1. TABLE ACCESS FULL | T1 | 1. 100. 4799 (1) | 57516 | 00:00:00.19 | 1008 | 1087 |
|* 5 | 3. 2. INDEX UNIQUE SCAN | T2_IDX | 57516 | 1. 1 (0) | 57516 | 00:00:20.82 | 115K | 2545 |
| 8 2 2 | 4. TABLE ACCESS BY INDEX ROWID | T2 | 57516 | 1. 2 (0) | 57516 | 00:04:37.14 | 57516 | 27138 |
------------------------------------------------------------------------------------------------------------------------------------
Information of predicates (identified by the operation identity card):
---------------------------------------------------
4 filter ((TRUNC ('T1'. "ATTR1") = 1 AND TRUNC ('T1'. " ATTR2') = 1))
5 - access("T1".") FK '= 'T2'.' (ID')
You say here that I canceled a query after about 5 minutes, and looking at the statistics of content (RowSource) I can already say the following:
1. the estimation of cardinality of T1 is far - the optimizer estimated 100 lines, but it actually generated more than 57000 lines when the query was cancelled. If this definitely seems like a candidate at the origin of the problems
2. the query has spent most of the time in search of random table T2
So while it is true that I don't know final A-lines of this cancelled query information, I can still say a lot of this and begin to deal with the problems identified so far.
Randolf
-
Star_transformation not shoiwng in the execution plan
Hello
We have a data warehouse and processing star not no projection in the execution plan.
STAR_TRANSFORMATION_ENABLED at the database level.
With the help of 11.2.0.3 on AIX
The fact table has index bitmap and fks to keys on tables dimesnion dimesnion.
Example query
Anthing we are ' % s '?select * from media m, retailer_transaction rt , retailer r where m.dimension_key = rt.plant_issue_id and rt.outlet_id = r.dimension_key and prod_num = 600
Found how interrogate more selective cause said to use star_transformation
added and plis_handled_year = 2013
and out_num 123423
Why is this good?
Is there a rule such as only highly selective queries will use transformation star?
Thank you
Published by: user5716448 on February 15, 2013 04:10Transformation of Star I it'sactually one expensive thing to do. So, the optimizer plans an ABC on this subject. This quote comes from a piece on the blog of optimizer Oracle [url https://blogs.oracle.com/optimizer/entry/star_transformation]:
"The transformation is performed based on cost - when the cost of the transformed plan is lower than that of the unprocessed plan. If dimension filters do not significantly reduce the amount of data to be extracted from the fact table, and then a full table scan is more effective. »
Cheers, APC
-
Sense of the GOAL: <; text >; in the execution plan
Hello
Could you please help me understand the following in the execution plan (Oracle10gR2)?
++++++++++++++
GOAL: HINT
OBJECTIVE: ANALYZE
++++++++++++++
For example, the following plan:
My question is: what do I do ' GOAL: HINT ' and ' GOAL: ANALYSIS "means? Not specifically for the plan above, just a question about how they mean when they show up in the plan of execution like the one above.Rows Execution Plan ------- --------------------------------------------------- 0 SELECT STATEMENT GOAL: HINT: FIRST_ROWS 301 HASH JOIN 200 TABLE ACCESS GOAL: ANALYZED (FULL) OF 'EP1' 303 NESTED LOOPS 304 TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID) OF 'EP3' 304 BITMAP CONVERSION (TO ROWIDS) 2 BITMAP OR 2 BITMAP INDEX (SINGLE VALUE) OF 'EP3_BI1' 2 BITMAP INDEX (SINGLE VALUE) OF 'EP3_BI2' 303 TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID) OF 'EP2' 606 INDEX GOAL: ANALYZED (UNIQUE SCAN) OF 'EP2_PK' (UNIQUE)
Thank you!
Published by: shape on May 6, 2009 10:52
Published by: shape on May 6, 2009 10:54
Published by: shape on May 6, 2009 10:58New: your exit is whence?
And I wonder too much about the word 'OBJECTIVE', the previous words and then the words are much more interest.GOAL: TIP: FIRST_ROWS<-- optimizer="" decided="" to="" use="" first_rows="">-->
301 HASH JOIN
TABLE 200 ACCESS OBJECTIVE: ANALYZED (FULL)<-- optimizer="" decided="" to="" go="" for="" a="" full="" table="" scan="" based="" on="" provided="" table="" stats="" ('analyzed'="" means:="" stats="" are="" available="" for="">-->
303 NESTED LOOPS
304 TABLE ACCESS OBJECTIVE: ANALYSIS (BY INDEX ROWID)<-- optimizer="" decides="" to="" go="" for="" an="" index="" scan="" here="" based="" on="" provided="" table="" stats="" ('analyzed'="" means:="" stats="" are="" available="" for="">--> -
Cost of the execution plan is different in the two databases
Hi gurus,
I have two databases, which are 12 C.
The execution plan cost is different in the two databases for the same query.
is it possible to copy the execution to another plan.
Thank you in advance
Kind regards
REDA
Jr.Raj wrote:
There are a few differences.
The machine that has a high cost, has setup up, linux, 2-node RAC, more CPU.
and
other machine windows server less Setup and less cpus.
Please explain, cost really makes a difference.
Thank you & best regards
REDA
You simply can't compare costs like that. It does not work like that. Especially through two different systems. Here is a very good read: column the COST of the PLAN to EXPLAIN. Oracle FAQ
-
How to capture the execution plan for a query
Hi all
Can someone help me please to find the command to capture the execution plan for a query.
Execution plan for select * from EMP where < condition >
Is getting executed successfully, but I need to get the appropriate for the same execution plan.
Thank youRead the Doc
-
difference between the execution plan and explain the plan?
What is the difference between the execution plan & explain the plan?an execution plan is the actual steps that oracle will pass by when it executes a query.
explain plan is a tool that is used to generate the steps of an execution plan for a query.
-
Hi all
Version of DB: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
Here is the description of the problem:
(The statistics are up to date for all tables).
The query below does not use the index on ACCOUNTS_LIVE (ID). (Unique index)
Line 23 of the query uses accounts_live.id.SQL> explain plan for 2 select txn.account_number,to_number(txn.amount_lcy) txn_amt,to_date(booking_date,'YYYYMMDD') TXN_DATE, 3 sal.latest_sal,sal.sal_date,customer_name,employer_name, 4 decode(COMMUNICATION_TYPE_1,'MOBILE',COMMUNICATION_NO_1, 5 decode(COMMUNICATION_TYPE_2,'MOBILE',COMMUNICATION_NO_2)) mob, 6 txn.CURRENCY, CHEQUE_NUMBER,trans_dets,trans_reference,target,teller_id,acc.category,acc.inactive_marker, 7 acc.posting_restrict,cus.sector,cus.industry 8 from coreadmin.Gtxn_dtl_v1 txn, 9 (select account_number,round(to_number(nvl(amount_lcy,0)),2) latest_sal,TXN_DATE sal_date,rr 10 from 11 (select to_date(booking_date,'YYYYMMDD') TXN_DATE,batch_id,account_number,amount_lcy 12 ,row_number() over (partition by account_number 13 order by to_date(booking_date,'YYYYMMDD') desc NULLS LAST, 14 batch_id desc nulls last) rr, 15 CURRENCY, CHEQUE_NUMBER,trans_dets,trans_reference 16 from coreadmin.Gtxn_dtl_v1 17 where transaction_code in ('204','938') 18 and to_number(amount_lcy) > 0) 19 where rr = 1 20 ) sal,accounts_live acc,customers_live cus 21 where to_date(booking_date,'YYYYMMDD') between to_date('030109','DDMMRR') and to_date('020209','DDMMRR') 22 and txn.account_number = sal.account_number 23 and txn.account_number = acc.id 24 and txn.CUSTOMER_ID = cus.CUSTOMER_number 25 and target in ('30','31','32') 26 / Explained. SQL> select * from table(dbms_xplan.display); PLAN_TABLE_OUTPUT ------------------------------------------------------------------------------------------------------------------------------------------------------ Plan hash value: 920245766 ----------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | ----------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 363M| 121G| | 223K (4)| 00:44:47 | |* 1 | HASH JOIN | | 363M| 121G| 6232K| 223K (4)| 00:44:47 | |* 2 | VIEW | | 34453 | 5820K| | 147K (1)| 00:29:36 | |* 3 | WINDOW SORT PUSHED RANK | | 34453 | 1480K| 4072K| 147K (1)| 00:29:36 | |* 4 | FILTER | | | | | | | | 5 | INLIST ITERATOR | | | | | | | |* 6 | TABLE ACCESS BY INDEX ROWID| GTXN_DTL_V1 | 34453 | 1480K| | 147K (1)| 00:29:31 | |* 7 | INDEX RANGE SCAN | IDX_TXN5 | 707K| | | 1815 (2)| 00:00:22 | |* 8 | HASH JOIN | | 598K| 106M| 20M| 63724 (1)| 00:12:45 | |* 9 | MAT_VIEW ACCESS FULL | CUSTOMERS_LIVE | 227K| 17M| | 2239 (4)| 00:00:27 | |* 10 | HASH JOIN | | 598K| 59M| 9504K| 57157 (1)| 00:11:26 | | 11 | MAT_VIEW ACCESS FULL | ACCOUNTS_LIVE | 249K| 6577K| | 1832 (2)| 00:00:22 | |* 12 | TABLE ACCESS BY INDEX ROWID | GTXN_DTL_V1 | 597K| 43M| | 52319 (1)| 00:10:28 | |* 13 | INDEX RANGE SCAN | IDX_TXN11_V1 | 1204K| | | 3931 (2)| 00:00:48 | ----------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - access("TXN"."ACCOUNT_NUMBER"="ACCOUNT_NUMBER") 2 - filter("RR"=1) 3 - filter(ROW_NUMBER() OVER ( PARTITION BY "ACCOUNT_NUMBER" ORDER BY TO_DATE("BOOKING_DATE",'YYYYMMDD') DESC NULLS LAST,INTERNAL_FUNCTION("BATCH_ID") DESC NULLS LAST)<=1) 4 - filter(TO_DATE('030109','DDMMRR')<=TO_DATE('020209','DDMMRR')) 6 - filter(TO_NUMBER("AMOUNT_LCY")>0) 7 - access("TRANSACTION_CODE"='204' OR "TRANSACTION_CODE"='938') 8 - access("TXN"."CUSTOMER_ID"="CUS"."CUSTOMER_NUMBER") 9 - filter("TARGET"='30' OR "TARGET"='31' OR "TARGET"='32') 10 - access("TXN"."ACCOUNT_NUMBER"="ACC"."ID") 12 - filter("TXN"."CUSTOMER_ID" IS NOT NULL) 13 - access(TO_DATE("BOOKING_DATE",'YYYYMMDD')>=TO_DATE('030109','DDMMRR') AND TO_DATE("BOOKING_DATE",'YYYYMMDD')<=TO_DATE('020209','DDMMRR')) 38 rows selected. SQL> select index_name 2 from dba_ind_columns 3 where table_name = 'ACCOUNTS_LIVE' 4 and column_name = 'ID'; INDEX_NAME ------------------------------ IDX_ACCLIVE
11 the order ID explain plan shows that the index does not use.
Please suggest.
Thanks in advance,
JacWhat happens when you force the index by using hint and use the hash between txn and acc join?
See you soon
Sarma. -
order of operations in the execution plan
Hello
I'm not sure if my order of the following execution plan is correct.
So hopefully someone can confirm or refute my order of the plan.
This is the query:
SELECT DISTINCT 'A3. ' "' ISIN '.
Of
"WERTPAPIERE" "A3."
"LOGTABLE" "A2."
"WP_STATUS" "A1".
WHERE
"A2". "PK_ID"= "A3". "" IDENTITY CARD "AND
"A2". "" REFERENCE "> TIMESTAMP' 2014-01-06 18:30 ' AND
"A2". "" REFERENCE "< = TIMESTAMP' 2014-01-08 07:00 ' AND
"A2". "" LOG_DATUM "> TIMESTAMP' 2014-01-07 18:30 ' AND
"A2". "" LOG_DATUM "< = TIMESTAMP' 2014-01-08 07:00 ' AND
"A2". "TABLE" = "WERTPAPIERE" AND "
"A3". ' BATCH '= 'A1'. "" IDENTITY CARD "AND
"A1". "" CODE "<>" * 33' AND "
(THERE ARE
(SELECT "BESTANDS_MERKM" 0 "A7"
WHERE 'A7 '. "ID"= "A3". "' BESTANDS_MERKMAL_ID ' AND ('A7'. "CODE"= "1" OR "A7". "CODE"(= '2')) AND ("A3" ".") " USER name "= 'Ect' OR 'A3'." USER name "= 'pro' OR 'A3'". "" Username "(= 'prom') or does NOT EXIST"
(SELECT 0
OF 'BESTANDS_MERKM' "A6".
WHERE "A6". «ID «= NVL ("A3".» ("' BESTANDS_MERKMAL_ID ', 0) AND ("A6". "CODE"= "1" OR "A6". "CODE"(= '2')) AND ("A3" ".") " Username "="Res"OR"A3"." Username "(= 'prom') AND ("A3"". ")" LOESCH_KZ_ID' IS NULL OR EXISTS
(SELECT 0
OF 'WERTPAPIER_LOESCH_KZ' "A5".
WHERE "A5". "ID"= "A3". "' LOESCH_KZ_ID ' AND 'A5 '. (("CODE"="1")) AND THERE ARE
(SELECT 'PRODUKTGRUPPE_SEGMENT' 0 'A4'
WHERE "A4". "ID"= "A3". "' PRODUKTGRUPPE_SEGMENTIERUNG_ID ' AND ('A4'. "CODE"= "USE" OR "A4". "CODE"= "ZUUZ" OR "A4". "CODE"= "4000" OR "A4". "CODE"= "5000" OR "A4". "CODE"= "3000" OR "A4". "CODE"= "4444" OR "A4". "CODE"= "4445" OR "A4". "CODE"= "5544" OR "A4". "CODE"= "6544" OR "A4". «CODE ' = ' 6543 "OR"A4".» ((("CODE"="8765')))
The plan has been acquired through dbms_xplan:
Select * from table (dbms_xplan.display_cursor (format = > 'ALLSTATS LAST SCHEMA'));
Here's the plan:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
| ID | Operation | Name | Begins | E - lines. A - lines. A - time | Pads | Bed | OMem | 1Mem | Used Mem.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1. | 1252 | 00:05:55.03 | 11 M | 594K | | | |
| 1. UNIQUE HASH | | 1. 28517 | 1252 | 00:05:55.03 | 11 M | 594K | 1135K | 1135K | 2976K (0) |
|* 2 | FILTER | | 1. | 2579 | 00:05:55.02 | 11 M | 594K | | | |
|* 3 | HASH JOIN | | 1. 571K | 2219K | 00:05:53.49 | 11 M | 594K | 1306K | 1306K | 1 272 K (0) |
|* 4 | INDEX SCAN FULL | WP_STAT_UPI | 1. 57. 57. 00:00:00.01 | 1. 0 | | | |
| 5. NESTED LOOPS | | 1. | 2219K | 00:05:52.17 | 11 M | 594K | | | |
| 6. NESTED LOOPS | | 1. 583K | 2219K | 00:00:18.62 | 726K | 436K | | | |
| 7. RANGE OF SINGLE PARTITION | | 1. 583K | 2219K | 00:00:12.29 | 436K | 436K | | | |
| 8. PARTITION LIST ALL | | 1. 583K | 2219K | 00:00:11.96 | 436K | 436K | | | |
|* 9 | TABLE ACCESS FULL | LOGTABLE | 4. 583K | 2219K | 00:00:11.61 | 436K | 436K | | | |
| * 10 | INDEX UNIQUE SCAN | WP_PK_I | 2219K | 1. 2219K | 00:00:05.34 | 289K | 491. | | |
| 11. TABLE ACCESS BY INDEX ROWID | WERTPAPIERE | 2219K | 1. 2219K | 00:05:32.59 | 10 M | 157K | | | |
| * 12 | TABLE ACCESS BY INDEX ROWID | BESTANDS_MERKM | 5. 1. 2. 00:00:00.01 | 8. 0 | | | |
| * 13 | INDEX UNIQUE SCAN | BESTANDS_MERKM_PK_I | 5. 1. 4. 00:00:00.01 | 4. 0 | | | |
| * 14 | TABLE ACCESS BY INDEX ROWID | BESTANDS_MERKM | 3. 1. 0 | 00:00:00.01 | 5. 0 | | | |
| * 15 | INDEX UNIQUE SCAN | BESTANDS_MERKM_PK_I | 3. 1. 2. 00:00:00.01 | 3. 0 | | | |
| * 16. TABLE ACCESS BY INDEX ROWID | PRODUKTGRUPPE_SEGMENT | 3. 1. 2. 00:00:00.01 | 6. 0 | | | |
| * 17. INDEX UNIQUE SCAN | PRG_SEG_PK_I | 3. 1. 3. 00:00:00.01 | 3. 0 | | | |
| * 18. INDEX UNIQUE SCAN | WERTPAPIER_LOESCH_KZ_UPI | 2. 1. 1. 00:00:00.01 | 2. 0 | | | |
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Vector data
-------------
/*+
BEGIN_OUTLINE_DATA
IGNORE_OPTIM_EMBEDDED_HINTS
OPTIMIZER_FEATURES_ENABLE ('11.2.0.3')
DB_VERSION ('11.2.0.3')
ALL_ROWS
OUTLINE_LEAF(@"SEL$2")
OUTLINE_LEAF(@"SEL$3")
OUTLINE_LEAF(@"SEL$4")
OUTLINE_LEAF(@"BLOCK1")
OUTLINE_LEAF(@"SEL$1")
OUTLINE(@"BLOCK1")
FULL (@"SALT$ 1" "A2"@"SEL$1")
INDEX (@"SALT$ 1" "A3"@"SEL$1" ("WERTPAPIERE".) "ID")) "
INDEX (@"SALT$ 1" "A1"@"SEL$1" ("WP_STATUS".) "CODE" "WP_STATUS" "." " ID'))
LEADING (@"SALT$ 1" "A2"@"SEL$1" "A3"@"SEL$1" "A1"@"SEL$1")
USE_NL (@"SALT$ 1" "A3"@"SEL$1")
NLJ_BATCHING (@"SALT$ 1" "A3"@"SEL$1")
USE_HASH (@"SALT$ 1" "A1"@"SEL$1")
SWAP_JOIN_INPUTS (@"SALT$ 1" "A1"@"SEL$1")
USE_HASH_AGGREGATION(@"SEL$1")
INDEX_RS_ASC (@"BLOCK1" "A4"@"BLOCK1" ("PRODUKTGRUPPE_SEGMENT".) "ID")) "
INDEX (@"SALT$ 4" "A5"@"SEL$4" ("WERTPAPIER_LOESCH_KZ".) "CODE" "WERTPAPIER_LOESCH_KZ" "." " ID'))
INDEX_RS_ASC (@"SALT$ 3" "A6"@"SEL$3" ("BESTANDS_MERKM".) "ID")) "
INDEX_RS_ASC (@"SALT$ 2" "A7"@"SEL$2" ("BESTANDS_MERKM".) "ID")) "
END_OUTLINE_DATA
*/
According to independent-combine- JOIN operation by HASH, I assumed the first operation's Id 4 because the "INDEX FULL SCAN' on 'WP_STAT_UPI' is the first child.
So I guess the order of operations by Id is 4,9,10 and so on.
I got my information from the official oracle documentation, the book of Troubleshooting Oracle Performance (APRESS) and some research on the internet.
Unfortunately so far I have found a good documentation on the scheduling. Most of the tutorials and documentation talk a lot operations themselves, but very little about the opening sequence.
According to the section ATTACK to State "LEADING(@"SEL$1""A2"@"SEL$1""A3"@"SEL$1""A1"@"SEL$1")", for the classification should be Id: 9,10 and so on.
I also tried to find order information in the v$ sql_plan. The database version is 11.2.
Any help welcome.
Best regards
Your interpretation is correct (even if you have obscured the lines 5-8, but they do not add significant value to what you're saying).
The explanation of the difference between your interpretation and the indicator leading() is the indicator USE_HASH() is accompanied by a hint of swap_join_inputs(). Hash joins | Oracle scratchpad indicator tells you the order of join optimizer was examining, but the optimizer exchange the roles of man and hash tables when it comes to her 'now to join A1 (WP_STAT)' part of the analysis - and this is reflected in the implementation plan.
Symbolically, the main indicator says
You should join A2 and A3--> (A2, A3)
Then you must join A1--> ((A2, A3), A1)
But Exchange - join entries. (A1, (A2, A3))
Concerning
Jonathan Lewis
-
The execution plan changes for the same query.
Hi all
This issue was raised before also, but still not able to find the real cause of this.
Thread1:
Thread2:
It comes, sometimes hammers server 100% CPU utilization with free latch and buffer busy wait events.
We found a single query consumes high CPU usage that is run by different sessions.
This query have two types of execution plans, where one is accurate and is not (its primary key hit index index no appropriate means present on the table)
Because its primary key index hit repeatedly at various sessions, some sessions are powerful db file sequential read and a few sessions waiting buffer busy waits for event. Also during this time a few sessions waiting for latch free event.
My doubt is how to sql even with different literal values execution plan changes and causes a prob.
How to avoid this... why its different execution plan using (I mean bad index PK)select count(*),event from v$session_wait group by event; COUNT(*) EVENT ---------- ---------------------------------------------------------------- 165 SQL*Net message from client 1 SQL*Net message to client 3 buffer busy waits 2 db file parallel read 18 db file sequential read 10 latch free 5 log file sync 1 pmon timer 6 rdbms ipc message 1 smon timer SQL> select sid from v$session_wait where event='db file sequential read'; SID ---------- 26 58 82 107 116 223 212 203 192 173 161 157 150 147 254 238 229 112 101 81 68 SQL> select spid, sid, s.serial#, p.program from v$session s, v$process p where paddr=addr and sid=&SID; Enter value for sid: 161 old 1: select spid, sid, s.serial#, p.program from v$session s, v$process p where paddr=addr and sid=&SID new 1: select spid, sid, s.serial#, p.program from v$session s, v$process p where paddr=addr and sid=161 SPID SID SERIAL# PROGRAM --------- ---------- ---------- ------------------------------------------------ 4231 161 49569 oracle@tfrdb3 (TNS V1-V3) SQL> select sql_text from v$process a, v$session b, 2 3 v$sql c where a.addr = b.paddr and b.sql_hash_value = c.hash_value and a.spid = &PID; 4 5 6 7 Enter value for pid: 4231 old 7: a.spid = &PID new 7: a.spid = 4231 SQL_TEXT -------------------------------------------------------------------------------- SELECT ERROR,TIME_STAMP,O_RESOURCE,QUEUE,NEW_QUEUE FROM LOG WHERE ID = '09292AMR 10B41FE' AND TYPE IN (11, 28, 25, 18, 60, 13) AND (LOG_SEQ>'234225222' OR TYPE = 18 AND LOG_SEQ='234225222') ORDER BY TIME_STAMP ASC SQL> set autotrace traceonly exp SQL> SELECT ERROR,TIME_STAMP,O_RESOURCE,QUEUE,NEW_QUEUE FROM amrwf1.LOG WHERE ID = '09292AMR10B41FE' AND TYPE IN (11, 28, 25, 18, 60, 13) AND (LOG_SEQ>'234225222' OR TYPE =18 AND LOG_SEQ='234225222') ORDER BY TIME_STAMP ASC; Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=11 Card=2 Bytes=126) 1 0 SORT (ORDER BY) (Cost=11 Card=2 Bytes=126) 2 1 CONCATENATION 3 2 TABLE ACCESS (BY INDEX ROWID) OF 'LOG' (Cost=4 Card=1 Bytes=63) 4 3 INDEX (UNIQUE SCAN) OF 'PK_LOG_LOG_SEQ' (UNIQUE) (Co st=3 Card=1) 5 2 TABLE ACCESS (BY INDEX ROWID) OF 'LOG' (Cost=4 Card=1 Bytes=63) 6 5 INDEX (RANGE SCAN) OF 'PK_LOG_LOG_SEQ' (UNIQUE) (Cos t=3 Card=1) SQL> select spid, sid, s.serial#, p.program from v$session s, v$process p where paddr=addr and sid=&SID; Enter value for sid: 147 old 1: select spid, sid, s.serial#, p.program from v$session s, v$process p where paddr=addr and sid=&SID new 1: select spid, sid, s.serial#, p.program from v$session s, v$process p where paddr=addr and sid=147 SPID SID SERIAL# PROGRAM --------- ---------- ---------- ------------------------------------------------ 6255 147 38306 oracle@tfrdb3 (TNS V1-V3) SQL> select sql_text from v$process a, v$session b, v$sql c 2 3 where a.addr = b.paddr and b.sql_hash_value = c.hash_value and a.spid = &PID; 4 5 6 7 Enter value for pid: 6255 old 7: a.spid = &PID new 7: a.spid = 6255 SQL_TEXT -------------------------------------------------------------------------------- SELECT ERROR,TIME_STAMP,O_RESOURCE,QUEUE,NEW_QUEUE FROM LOG WHERE ID = '09273AMR 62B4894' AND TYPE IN (11, 28, 25, 18, 60, 13) AND (LOG_SEQ>'223324996' OR TYPE = 18 AND LOG_SEQ='223324996') ORDER BY TIME_STAMP ASC SQL> set autotrace traceonly exp SQL> SELECT ERROR,TIME_STAMP,O_RESOURCE,QUEUE,NEW_QUEUE FROM amrwf1.LOG WHERE ID = '09273AMR62B4894' AND TYPE IN (11, 28, 25, 18, 60, 13) AND (LOG_SEQ>'223324996' OR TYPE =18 AND LOG_SEQ='223324996') ORDER BY TIME_STAMP ASC; Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1538 Card=736 Bytes= 46368) 1 0 SORT (ORDER BY) (Cost=1538 Card=736 Bytes=46368) 2 1 TABLE ACCESS (BY INDEX ROWID) OF 'LOG' (Cost=1527 Card=7 36 Bytes=46368) 3 2 INDEX (RANGE SCAN) OF 'LOG_ID' (NON-UNIQUE) (Cost=32 C ard=736) SQL> select spid, sid, s.serial#, p.program from v$session s, v$process p where paddr=addr and sid=&SID; Enter value for sid: 82 old 1: select spid, sid, s.serial#, p.program from v$session s, v$process p where paddr=addr and sid=&SID new 1: select spid, sid, s.serial#, p.program from v$session s, v$process p where paddr=addr and sid=82 SPID SID SERIAL# PROGRAM --------- ---------- ---------- ------------------------------------------------ 6172 82 45378 oracle@tfrdb3 (TNS V1-V3) SQL> select sql_text from v$process a, v$session b, v$sql c where a.addr = b.paddr and b.sql_hash_value = c.hash_value and 2 3 a.spid = &PID; 4 5 6 7 Enter value for pid: 6172 old 7: a.spid = &PID new 7: a.spid = 6172 SQL_TEXT -------------------------------------------------------------------------------- INSERT INTO LOG (ID,TIME_STAMP,TYPE,ERROR,INSTANCE,RULE_NUM,RULE_TYPE,PRIORITY,F LAGS,NAME,BATCH,O_RESOURCE,QUEUE,NEW_QUEUE,SERVER,FORM,WORKSET) VALUES (:V001,:V 002,11,0,0,3,1,0,1,:V003,:V004,:V005,:V006,:V007,:V008,:V009,:V010) INSERT INTO LOG (ID,TIME_STAMP,TYPE,ERROR,INSTANCE,RULE_NUM,RULE_TYPE,PRIORITY,F LAGS,NAME,BATCH,O_RESOURCE,QUEUE,NEW_QUEUE,SERVER,FORM,WORKSET) VALUES (:V001,:V 002,11,0,0,3,1,0,1,:V003,:V004,:V005,:V006,:V007,:V008,:V009,:V010) INSERT INTO LOG (ID,TIME_STAMP,TYPE,ERROR,INSTANCE,RULE_NUM,RULE_TYPE,PRIORITY,F LAGS,NAME,BATCH,O_RESOURCE,QUEUE,NEW_QUEUE,SERVER,FORM,WORKSET) VALUES (:V001,:V 002,11,0,0,3,1,0,1,:V003,:V004,:V005,:V006,:V007,:V008,:V009,:V010) SQL_TEXT -------------------------------------------------------------------------------- INSERT INTO LOG (ID,TIME_STAMP,TYPE,ERROR,INSTANCE,RULE_NUM,RULE_TYPE,PRIORITY,F LAGS,NAME,BATCH,O_RESOURCE,QUEUE,NEW_QUEUE,SERVER,FORM,WORKSET) VALUES (:V001,:V 002,11,0,0,3,1,0,1,:V003,:V004,:V005,:V006,:V007,:V008,:V009,:V010) INSERT INTO LOG (ID,TIME_STAMP,TYPE,ERROR,INSTANCE,RULE_NUM,RULE_TYPE,PRIORITY,F LAGS,NAME,BATCH,O_RESOURCE,QUEUE,NEW_QUEUE,SERVER,FORM,WORKSET) VALUES (:V001,:V 002,11,0,0,3,1,0,1,:V003,:V004,:V005,:V006,:V007,:V008,:V009,:V010) INSERT INTO LOG (ID,TIME_STAMP,TYPE,ERROR,INSTANCE,RULE_NUM,RULE_TYPE,PRIORITY,F LAGS,NAME,BATCH,O_RESOURCE,QUEUE,NEW_QUEUE,SERVER,FORM,WORKSET) VALUES (:V001,:V SQL_TEXT -------------------------------------------------------------------------------- 002,11,0,0,3,1,0,1,:V003,:V004,:V005,:V006,:V007,:V008,:V009,:V010) INSERT INTO LOG (ID,TIME_STAMP,TYPE,ERROR,INSTANCE,RULE_NUM,RULE_TYPE,PRIORITY,F LAGS,NAME,BATCH,O_RESOURCE,QUEUE,NEW_QUEUE,SERVER,FORM,WORKSET) VALUES (:V001,:V 002,11,0,0,3,1,0,1,:V003,:V004,:V005,:V006,:V007,:V008,:V009,:V010)
Is it possible to avoid this?
If any details please check out some of my previous post on this specific URL (above)
-YasserMy doubt is how to sql even with different literal values execution plan changes and causes a prob.
Different literal values cause analysis difficult.
Hard analysis includes the re-evaluation of the best path.
Literal value is included in the assessment of the selectivity for the scan interval (log_seq >...)See
http://www.centrexcc.com/A%20Look%20under%20The%20Hood%20Of%20CBO%20-%20The%2010053%20Event.ppt.PDF
http://www.centrexcc.com/fallacies%20Of%20The%20Cost%20Based%20Optimizer.PDF
more the book of Jonathan Lewis which other threads, I believe that you already have.You must lower your CPU.
Previous discussions, if the situation is still the same, it sounded like hard analysis particularly with this SELECTION against the NEWSPAPER plays an important role in that.How to avoid this... why its different execution plan using (I mean bad index PK)
The points raised in the previous discussion remain valid.
-Do you have access to this SQL to change?
for example using bind variable or trick it if necessary due to problems caused by data as discussed in the previous thread.
- Or you could it repoint the view to a view and a hint?
-If a particular user makes this sql, could affect you cursor_sharing just for this user. If not, you should consider implementing pan-Canadian database.Oracle 8.1.6 still?
-
Find child cursors due to changes in the execution plan
Hi all
I have a situation to provide the list of execution of the plan for a particular SQL_ID. The particular SQL toggles between 2 paths (FTS and Index scan), but at this point in time, I can see that a single (current) plan_hash_value for instruction. That is to say - the previous cursor gets disabled (due to a statistical series application package which in turn disabled the previous cursor - this is my guess).
I can get it from dba_hist_sqlstat for the specific SQL, but curious, it is only possible to get it from the dynamic views such as V$ SQL and V$ SQLAREA for a list of all the plan_hash_values for a particular SQL, where the child_number is 0.
Any idea please?
Note: I am interested to extract cursors of the child due to the execution of different cursors of the regime and not child created because different settings for the same plan (mode ex-optimizer etc...)
> is it possible to capture the two dynamic views PHV even if the first cursor is invalidated
Once it is invalid, it is out! Is no longer present.
Hemant K Collette
-
Hence the optimizer is get the data for the execution Plan?
Hi all
11 GR 2 DB.
It may be a fundamental ignorance.
I had created a new table as DEPT_TEST in the sample HR schema provided by ORACLE.
No primary key. No index. Stats not garthered. Now my doubt is hence the optimizer is information for power plan?create table dept_test as select * from departments;
How does he know that the 3 FILTER will produce 2 rows? (That's okay!)SQL> explain plan for 2 select * 3 from employees e,dept_test d 4 where e.department_id = d.department_id 5 and d.department_name in( 'Purchasing','IT Support','xx','yyy'); Explained. SQL> select * 2 from table(dbms_xplan.display); PLAN_TABLE_OUTPUT ---------------------------------------------------------------------------------------------------- Plan hash value: 3561042801 -------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 19 | 2375 | 4 (0)| 00:00:01 | | 1 | NESTED LOOPS | | | | | | | 2 | NESTED LOOPS | | 19 | 2375 | 4 (0)| 00:00:01 | |* 3 | TABLE ACCESS FULL | DEPT_TEST | 2 | 112 | 3 (0)| 00:00:01 | |* 4 | INDEX RANGE SCAN | EMP_DEPARTMENT_IX | 10 | | 0 (0)| 00:00:01 | | 5 | TABLE ACCESS BY INDEX ROWID| EMPLOYEES | 10 | 690 | 1 (0)| 00:00:01 | -------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 3 - filter("D"."DEPARTMENT_NAME"='IT Support' OR "D"."DEPARTMENT_NAME"='Purchasing' OR "D"."DEPARTMENT_NAME"='xx' OR "D"."DEPARTMENT_NAME"='yyy') 4 - access("E"."DEPARTMENT_ID"="D"."DEPARTMENT_ID") Note ----- - dynamic sampling used for this statement (level=2) 23 rows selected.
How does know - outside the Department 4 data are names, only two (purchase and support). Yet once, no primary key is defined in TEST_DEPT.
Again, if I change the query by adding a name of service valid, optimizer generates the correct plan. He correctly assumes, IN condition will be released 3 departments... !
SQL> select * 2 from table(dbms_xplan.display); PLAN_TABLE_OUTPUT ---------------------------------------------------------------------------------------------------- Plan hash value: 3561042801 -------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 29 | 3625 | 4 (0)| 00:00:01 | | 1 | NESTED LOOPS | | | | | | | 2 | NESTED LOOPS | | 29 | 3625 | 4 (0)| 00:00:01 | |* 3 | TABLE ACCESS FULL | DEPT_TEST | 3 | 168 | 3 (0)| 00:00:01 | |* 4 | INDEX RANGE SCAN | EMP_DEPARTMENT_IX | 10 | | 0 (0)| 00:00:01 | | 5 | TABLE ACCESS BY INDEX ROWID| EMPLOYEES | 10 | 690 | 1 (0)| 00:00:01 | -------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 3 - filter("D"."DEPARTMENT_NAME"='Human Resources' OR "D"."DEPARTMENT_NAME"='IT Support' OR "D"."DEPARTMENT_NAME"='Purchasing' OR "D"."DEPARTMENT_NAME"='xx' OR "D"."DEPARTMENT_NAME"='yyy') 4 - access("E"."DEPARTMENT_ID"="D"."DEPARTMENT_ID") Note ----- - dynamic sampling used for this statement (level=2) 24 rows selected.
Now my doubt is hence the optimizer is information for power plan?
It seems that the optimizer played just - leaving a Note
Note ----- - dynamic sampling used for this statement (level=2)
Concerning
Etbin
-
I know that I am not posting the complete plan, but what is more curious, is that I have never seen it before. I don't know if any of you have seen this.
I've hidden the name of the table for various reasons, but if you have alook at 34 and 31 stages they do not correspond to the top. I'm more curious to know why he thinks, he spent 10 minutes on the step 34 when he finished step 31 in 2 minutes and 22 seconds. And elapse time total of this request is 2 minutes and 23 seconds.SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production PL/SQL Release 11.1.0.7.0 - Production CORE 11.1.0.7.0 Production TNS for Linux: Version 11.1.0.7.0 - Production NLSRTL Version 11.1.0.7.0 - Production select * from table(dbms_Xplan.display_cursor('sql_id', null, 'ALLSTATS LAST')); PLAN_TABLE_OUTPUT ---------------------------------------------------------------------------------------------------- SQL_ID cnskfxp99n1gp, child number 0 ------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads | OMem | 1Mem | Used-Mem | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 1 |00:02:23.34 | 463K| 322K| | | | | 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:02:23.34 | 463K| 322K| | | | | 2 | VIEW | | 1 | 47948 | 14734 |00:02:23.34 | 463K| 322K| | | | | 3 | HASH GROUP BY | | 1 | 47948 | 14734 |00:02:23.34 | 463K| 322K| 3463K| 973K| 4899K (0)| | 4 | VIEW | | 1 | 47948 | 25714 |00:00:00.70 | 463K| 322K| | | | | 5 | UNION-ALL | | 1 | | 25714 |00:00:00.70 | 463K| 322K| | | | |* 6 | FILTER | | 1 | | 0 |00:00:00.01 | 0 | 0 | | | | | 7 | NESTED LOOPS | | 1 | | 0 |00:00:00.01 | 0 | 0 | | | | | 8 | NESTED LOOPS | | 1 | 1 | 0 |00:00:00.01 | 0 | 0 | | | | | 9 | MERGE JOIN CARTESIAN | | 1 | 1 | 0 |00:00:00.01 | 0 | 0 | | | | | 10 | PARTITION RANGE SINGLE | | 1 | 1 | 0 |00:00:00.01 | 0 | 0 | | | | |* 11 | TABLE ACCESS BY LOCAL INDEX ROWID| aaaaa | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | | | | |* 12 | INDEX RANGE SCAN | aaaa_IDX | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | | | | | 13 | BUFFER SORT | | 0 | 113K| 0 |00:00:00.01 | 0 | 0 | 3989K| 854K| | |* 14 | TABLE ACCESS FULL | bbb | 0 | 113K| 0 |00:00:00.01 | 0 | 0 | | | | |* 15 | INDEX RANGE SCAN | IX2_bbb | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | | | | |* 16 | TABLE ACCESS BY INDEX ROWID | bbb | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | | | | | 17 | HASH GROUP BY | | 1 | 47946 | 14548 |00:00:00.70 | 24273 | 0 | 1592K| 1158K| 2908K (0)| |* 18 | FILTER | | 1 | | 45639 |00:00:03.05 | 24273 | 0 | | | | |* 19 | HASH JOIN | | 1 | 47946 | 45639 |00:00:03.05 | 24273 | 0 | 1018K| 1018K| 1402K (0)| | 20 | PARTITION RANGE SINGLE | | 1 | 5472 | 5041 |00:00:00.01 | 960 | 0 | | | | |* 21 | TABLE ACCESS FULL | ccc | 1 | 5472 | 5041 |00:00:00.01 | 960 | 0 | | | | |* 22 | HASH JOIN | | 1 | 44172 | 45640 |00:00:00.38 | 23313 | 0 | 2515K| 1437K| 5099K (0)| | 23 | PARTITION RANGE SINGLE | | 1 | 45644 | 45648 |00:00:00.01 | 1463 | 0 | | | | |* 24 | TABLE ACCESS FULL | ddd | 1 | 45644 | 45648 |00:00:00.01 | 1463 | 0 | | | | |* 25 | HASH JOIN | | 1 | 113K| 118K|00:00:00.31 | 21850 | 0 | 6993K| 2487K| 9677K (0)| |* 26 | TABLE ACCESS FULL | bbb | 1 | 113K| 109K|00:00:00.01 | 10925 | 0 | | | | |* 27 | TABLE ACCESS FULL | bbb | 1 | 126K| 126K|00:00:00.01 | 10925 | 0 | | | | |* 28 | FILTER | | 1 | | 11166 |00:02:22.57 | 439K| 322K| | | | | 29 | SORT GROUP BY | | 1 | 1 | 11434 |00:02:22.57 | 439K| 322K| 3313K| 814K| 2944K (0)| |* 30 | HASH JOIN | | 1 | 6 | 12124 |00:02:22.52 | 439K| 322K| 2157K| 1015K| 2914K (0)| |* 31 | HASH JOIN | | 1 | 5 | 12124 |00:02:22.34 | 438K| 322K| 2265K| 1007K| 2938K (0)| | 32 | NESTED LOOPS | | 1 | | 17129 |00:10:16.99 | 427K| 322K| | | | | 33 | NESTED LOOPS | | 1 | 6 | 17333 |00:10:15.53 | 417K| 322K| | | | |* 34 | HASH JOIN | | 1 | 5 | 17129 |00:10:16.91 | 408K| 322K| 963K| 963K| 1248K (0)| |* 35 | VIEW | index$_join$_010 | 1 | 75 | 75 |00:00:00.02 | 10 | 3 | | | | |* 36 | HASH JOIN | | 1 | | 75 |00:00:00.02 | 10 | 3 | 1048K| 1048K| 1550K (0)| | 37 | INLIST ITERATOR | | 1 | | 75 |00:00:00.02 | 3 | 0 | | | | |* 38 | INDEX RANGE SCAN | ddd_IDX2 | 7 | 75 | 75 |00:00:00.02 | 3 | 0 | | | | | 39 | INDEX FAST FULL SCAN | ddd_IDX1 | 1 | 75 | 210 |00:00:00.01 | 7 | 3 | | | | | 40 | NESTED LOOPS | | 1 | | 17172 |00:00:48.24 | 408K| 322K| | | | | 41 | NESTED LOOPS | | 1 | 54 | 17172 |00:10:16.62 | 391K| 322K| | | | | 42 | PARTITION RANGE ALL | | 1 | 54 | 17172 |00:10:11.33 | 361K| 322K| | | | | 43 | PARTITION LIST INLIST | | 276 | 54 | 17172 |00:07:16.25 | 361K| 322K| | | | |* 44 | TABLE ACCESS FULL | eee | 552 | 54 | 17172 |00:02:24.35 | 361K| 322K| | | | |* 45 | INDEX UNIQUE SCAN | fff_PK | 17172 | 1 | 17172 |00:00:00.63 | 29633 | 3 | | | | |* 46 | TABLE ACCESS BY INDEX ROWID | fff | 17172 | 1 | 17172 |00:00:00.49 | 17177 | 175 | | | | |* 47 | INDEX RANGE SCAN | IX2_bbb | 17129 | 1 | 17333 |00:00:00.20 | 9265 | 33 | | | | |* 48 | TABLE ACCESS BY INDEX ROWID | bbb | 17333 | 1 | 17129 |00:00:00.06 | 9840 | 0 | | | | |* 49 | TABLE ACCESS FULL | bbb | 1 | 113K| 109K|00:00:00.01 | 10925 | 0 | | | | | 50 | PARTITION RANGE SINGLE | | 1 | 5472 | 5041 |00:00:00.07 | 960 | 5 | | | | |* 51 | TABLE ACCESS FULL | ccc | 1 | 5472 | 5041 |00:00:00.07 | 960 | 5 | | | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Concerning
REDA>
I'm more curious to know why he thinks, he spent 10 minutes on the step 34 when he finished step 31 in 2 minutes and 22 seconds. And elapse time total of this request is 2 minutes and 23 seconds.
>
This can happen if you use the flag "gather_plan_statistics" instead of define statistics_level to 'all '.It is related to the sampling frequency used.
Oracle ACE Director and author, Jonathan Lewis examines your specific question in this blog
http://jonathanlewis.WordPress.com/2007/04/26/Heisenberg/
>
So how can garnish 2 report a time greater than line 1. How can top 6 report a time greater than line 5? Straight lines, and what lines are bad? -
appropriate using index for the execution of the parallel statement
Hi all
I created indexes for my table
That was before I started thinking about the execution of the parallel statement. As far as I've heard I need to change my correct use with parallel hint index. Could you please suggest the way forward?CREATE INDEX ZOO.rep184_med_arcdate ON ZOO.rep184_mediate(arcdate);
Marco wrote:
Hi allI created indexes for my table
CREATE INDEX ZOO.rep184_med_arcdate ON ZOO.rep184_mediate(arcdate);
That was before I started thinking about the execution of the parallel statement. As far as I've heard I need to change my correct use with parallel hint index. Could you please suggest the way forward?
When all else fails, read the Fine
http://download.Oracle.com/docs/CD/E11882_01/server.112/e17118/sql_elements006.htm#autoId63
-
Operation in the execution plan list
Oracle 11.2.0.1
Windows xp
Kindly give me documentation link from where I can get the complete list of all the different operations that appears in a plan of execution with their details and priority / sequence of operations.
Thank you.Hello
I think it would have been much more useful for it if you read the link I provided and doing the job yourself, but anyway:
(1) BITMAP INDEX C1_IND SINGLE VALUE
(2) BITMAP INDEX C2_IND SINGLE VALUE
(3 take a NEGATIVE 1 sign) and 2).
(4) SINGLE C2_IND OF BITMAP INDEX VALUE
((5) BITMAP UNDER 4) and 3)
(6) BITMAP INDEX C3_IND RANGE SCAN, followed by the MERGER of BITMAP
((7) BITMAP or 5) and 6)
((8) BITMAP CONVERSION TO ROWID of 7)
(TABLE 9) ACCESS T BY INDEX ROWID, using rowid got in 8)
(10) the results returned to the userBest regards
Nikolai
Maybe you are looking for
-
need to remove the search 4loot page you want normal firefox back
I loaded the search for 4loot.com through firefox screen, and now I can't figure out how to delete and return to the normal page of firefox. Search 4loot page is annoying.
-
I want to oder a photo book on the UK store as I have before I can't do in the Photos I did in iPhoto
-
How to remove iphone backup current password (do not remember) and set a new?
I want to backup my iPhone 5 s before installing the next update of the os, but don't remember the password encrypted backup. I would like to delete the previous backups and the password and create a new backup with a new password. How do I do that?
-
Oficejet Pro L7680 duplex printing does not work anymore
I used duplex printing on my Oficejet Pro L7680 all-in-One because it was new, but for the last month it does not work. When you choose to print or copy double-sided, it then prints the first side of the sheet, rather than take this piece of paper in
-
erroe MSG at the stop "program end BF8.
to logout, I get an erroe 'end program fc8' msg or it may be BA8 ee0 ea8, C78, etc, etc has statement if I finish now, I'll lose files