How to walk through an explain plan

Hi Experts,
I am on Oracle 11.2.0.2 on Linux, I have a query with an query plan as below. I am trying to understand the sequence in which the steps are executed, can you please help on it:
variable v_client_oid varchar2(16);
variable SYS_B_0 varchar2(16);
variable SYS_B_1 NUMBER;
variable SYS_B_2 varchar2(16);
--0Y0WJ354NKR00E6J
exec :v_client_oid:= '0G34308B12X006XJ';
exec :SYS_B_0:= 'Y';
exec :SYS_B_1:= 1;
exec :SYS_B_2:= 'N';
UPDATE acc_usr_RL_cross a
   SET included = :"SYS_B_0"
WHERE     clnt_oid = :v_clnt_oid
       AND EXISTS
              (SELECT :"SYS_B_1"
                 FROM    acc_usr_RL_cross x
                      JOIN
                         acc_RL r
                      ON (x.RL_oid = r.oid)
                WHERE     x.included = :"SYS_B_2"
                      AND a.RL_oid = r.parent_RL_oid
                      AND a.usr_id = x.usr_id)
| Id  | Operation                     | Name                     | Starts | E-Rows | Cost (%CPU)| A-Rows |   A-Time   | Buffers | Reads  |  OMem |  1Mem |  O/1/M   |
|   1 |  UPDATE                       | ACC_USR_RL_XREF          |      1 |        |            |      0 |00:01:48.80 |     240K|    240K|       |       |          |
|*  2 |   HASH JOIN SEMI              |                          |      1 |      1 | 60220   (1)|      1 |00:01:48.79 |     240K|    240K|  1448K|  1053K|     1/0/0|
|   3 |    TABLE ACCESS BY INDEX ROWID| ACC_USR_RL_XREF         |      1 |  22262 |  7522   (1)|   8515 |00:00:00.46 |     277 |    174 |       |       |          |
|*  4 |     INDEX RANGE SCAN          | ACC_USR_RL_XREF_IDX08   |      1 |  22262 |   165   (0)|   8515 |00:00:00.02 |      65 |      0 |       |       |          |
|   5 |    VIEW                       | VW_SQ_1                  |      1 |   5454K| 52669   (1)|   5701K|00:01:31.57 |     240K|    240K|       |       |          |
|*  6 |     HASH JOIN                 |                          |      1 |   5454K| 52669   (1)|   5701K|00:01:25.87 |     240K|    240K|  1853K|  1647K|     1/0/0|
|   7 |      TABLE ACCESS FULL        | ACC_RL                   |      1 |  28560 |   111   (1)|  28561 |00:00:00.19 |     443 |    439 |       |       |          |
|*  8 |      INDEX FAST FULL SCAN     | ACC_USR_RL_XREF_IDX08   |      1 |   5454K| 52530   (1)|   5701K|00:01:08.48 |     239K|    239K|       |       |          |
PLAN_TABLE_OUTPUT
Predicate Information (identified by operation id):
   2 - access("A"."RL_OID"="PARENT_RL_OID" AND "A"."USR_ID"="USR_ID")
   4 - access("CLNT_OID"=:V_CLNT_OID)
   6 - access("X"."RL_OID"="R"."OID")
   8 - filter("X"."INCLUDED"=:SYS_B_2)
Here my question is how does the execution happen - What does HASH JOIN SEMI mean here? I was expecting that subquery will get executed several times as there is exists but everywhere the STARTS is just 1.  I am not clear on what is HASH JOIN SEMI and also why even though there is EXISTS, still the STARTS are only 1 (I was expecting several of them).
Will be thankful for help on this.
OrauserN

A SEMI JOIN can stop as soon as it finds one matching row.
So for your EXISTS, we don't need to join all the matches between the rowsources, we can stop as soon as we find the first match.
The general approach to reading an execution plan - and which is true nearly all (but not all) of the time -  is to find the first operation without a child - this is the starting step.
Preservation of spacing makes reading execution plans much easier.
The first step of your plan is at step 4 - the INDEX RANGE SCAN of ACC_USR_RL_XREF_IDX08 with access predicate:
CLNT_OID = :V_CLNT_OID
The rowids from this index lookup are used to do a table lookup at step 3.
These rows are then hashed into memory for the HASH JOIN SEMI at step 2 where you join with your EXISTS subquery.
The VIEW operation at line 5 indicates that this is a non-mergeable view and it's a HASH JOIN of a full table scan of ACC_RL and an index FFS of ACC_USR_RL_XREF_IDX08.
A HASH JOIN will have starts of 1 because, broadly speaking, you take the driving rowsource and hash on the join colums then you then take the inner rowsource and do the same hash which gives you the matching rows.
A nested loop is more like a for loop - for each row in the driving rowsource, probe the inner rowsource. Therefore for each row returned by the driving rowsource, you get a "start" on the inner rowsource.
Message was edited by: Dom Brooks

Similar Messages

  • Efficient way to read through big explain plan and genterate html explain plan for sql id's executed in past

    Hi,
    I have a sql which is recently having a performance problems in Production. I have generated a explain plan for it trying to find out what it is doing but plan itself is close to 1000 lines. I want to check if there is any efficient way to go through big plan like this one and quickly find the damaging areas..
    2) I also wanted to know if there is way to generate explain plans in HTML format which executed in past and have entry in dba_hist_sqltext.
    3) I also have two sql_monitor reports which I want to compare. is there any efficient way to do it as well?
    Please share your thoughts!
    Thanks in advance!
    Regards,
    Suman-

    Hi,
    I suggest you can try running sql advisor on the query maybe something fruitful comes up
    http://www.oracle-base.com/articles/11g/sql-access-advisor-11gr1.php
    I am not sure about the explain plan being printed in html format but
    You may also want to try the sqlhistory.sql query from below page
    http://evdbt.com/scripts/
    I have used it many times to check on executions and explain plans which may have changed over the period
    I have faced it many times , the query picks up a bad explain plan and performs poorly

  • How can i paste the explain plan from toad..

    Hello all
    I tried taking a snap of the explain plan from toad but in this forum the paste option is disabled...please help

    964145 wrote:
    I tried taking a snap of the explain plan from toad but in this forum the paste option is disabled...please helpI don't know, but it is a waste of time since explain plans from Toad are not useful.
    Please read the forum FAQ on providing information for a tuning request, it describes how to generate an explain plan that can be shared.
    {message:id=9360003}
    This is an example.
    SQL> explain plan for
      2  select * from dual;
    Explained.
    SQL> select * from table(dbms_xplan.display);
    PLAN_TABLE_OUTPUT
    Plan hash value: 3543395131
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT  |      |     1 |     2 |     2   (0)| 00:00:01 |
    |   1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
    --------------------------------------------------------------------------

  • How to export results of explain plan?

    A colleague tells me that in an older version of SQLDeveloper (1.2.1, perhaps?), he was able to export the results of the explain plan operation (I don't know what export forms were available). In the current version (1.5.1), it generates a tree component with information I can look at, but there's no way to write out these results in any form. Am I missing something?

    HOW TO TRANSPORT A SQL TUNING SET [ID 456019.1]
    Modified 08-SEP-2008 Type HOWTO Status PUBLISHED
    In this Document
    Goal
    Solution
    Applies to:
    Oracle Server - Enterprise Edition - Version: 10.2.0.1 to 11.1.0.6
    Information in this document applies to any platform.
    10.2.X,11.1.X
    Goal
    The Purpose of This Note is to Show the Steps needed to Transport a Sql Tuning Set from
    One Database server to another Database Server.
    Solution
    The Sql Tuning Set name is small_sh_sts_4.It is on 10.2.0.2.0 Database server.
    It has 4 sqls .
    select sql_id, substr(sql_text,1, 15) text
    from dba_sqlset_statements
    where sqlset_name = 'small_sh_sts_4'
    order by sql_id;
    SQL_ID TEXT
    4qdz7j26mdwzb SELECT /*+ my_q
    6y289t15dqj9r SELECT /*+ my_q
    ckm14c67njf0q SELECT /*+ my_q
    g37muqb81wjau SELECT /*+ my_q
    1) Create the Staging Table ON THE SOURCE SYSTEM ( IN this case 10.2.0.2.0 ) .
    execute DBMS_SQLTUNE.CREATE_STGTAB_SQLSET(table_name =>'TEST');
    PL/SQL procedure successfully completed.
    SQL> select count(*) from test;
    COUNT(*)
    0
    2) Popluate the table TEST using DBMS_SQLTUNE.PACK_STGTAB_SQLSET THE SOURCE SYSTEM (IN this case 10.2.0.2.0 )
    execute DBMS_SQLTUNE.PACK_STGTAB_SQLSET(sqlset_name => 'small_sh_sts_4',staging_table_name => 'TEST');
    PL/SQL procedure successfully completed.
    select count(*) from test;
    SQL> select count(*) from test;
    COUNT(*)
    4
    3) Export the table table test on THE SOURCE SYSTEM ( IN this case 10.2.0.2.0 )
    and move the table to the Destination Server
    and Import it . The staging table TEST can also be moved using
    the mechanism of choice such as datapump or database link.
    While exporting the table you will see something like
    About to export specified tables via Conventional Path ...
    Table(T) or Partition(T:P) to be exported: (RETURN to quit) > TEST
    . . exporting table TEST 4 rows exported
    . . exporting table TEST_CBINDS 0 rows exported
    . . exporting table TEST_CPLANS 34 rows exported
    Import on the Destination system ( IN this CASE it was 11.1.0.6.0 )
    While Importing the table you will see something like
    . importing SH's objects into SH
    . importing SH's objects into SH
    . . importing table "TEST" 4 rows imported
    . . importing table "TEST_CBINDS" 0 rows imported
    . . importing table "TEST_CPLANS" 34 rows imported
    Import terminated successfully without warnings.
    SQL> select count(*) from test;
    COUNT(*)
    4
    Verify the contents of DBA_SQLSET or USER_SQLSET on the Destination system
    Select NAME,CREATED,STATEMENT_COUNT FROM DBA_SQLSET;
    4) Unpack the table using DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET on the Destination system ( IN this CASE it was 11.1.0.6.0 )
    execute DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET( sqlset_name => '%',-
    replace => TRUE,-
    staging_table_name => 'TEST');
    Select NAME,OWNER,CREATED,STATEMENT_COUNT FROM DBA_SQLSET;
    NAME CREATED STATEMENT_COUNT
    small_sh_sts_4 24-AUG-07 4
    Related
    Products
    •Oracle Database Products > Oracle Database > Oracle Database > Oracle Server - Enterprise Edition

  • How to walk through tabs?

    Hello,
    I can walk through Applications by Command Tab and through windows by Command >  
    How can I go to other tabs?
    Thank you,
    Karl

    Because of german keyboard with no home or end key, I had to add a shortcut to the safari shortcuts. Much better than to have it not
    ~k.

  • How to get the complete explain plan stored in a particular OUTLINE

    Hi,
    How do I get the complete text of the explain plan stored in a particular outline? I have the name of the outline.
    I can't run the query which has this outline as it is on production.I want to know which tables/views will have the explain plan text?
    Thanks,
    Sach
    Edited by: user631085 on Mar 29, 2009 11:27 PM
    Edited by: user631085 on Mar 29, 2009 11:29 PM
    Edited by: user631085 on Mar 29, 2009 11:29 PM

    You can access the _OUTLINES views.
    Pelase refer the following and look for 'Viewing Outline Data':
    http://youngcow.net/doc/oracle10g/server.102/b14211/outlines.htm

  • How to switch to graphical explain plan

    When I view an explain plan it is presented in a textualy. I would like to switch it to graphical but can not figure out how to. Anyone know how to make the switch?
    Thanks,
    Bill

    Graphical representation is possible as long as you are using the SVG plugin.
    I had installed the plugin but did not realize is was not working until I saw our primary dba's screen yesterday with the graphics.
    I started looking around and realized that the SVG plugin was disabled in my browser by default. I enabled the plugin and now everything works.
    Bill

  • How to set autotrace to explain plan ONLY

    Hi,
    I would like to see explain plan for a long running statement.
    Now if I do following:
    set autotrace on explain
    UPDATE ......-- my statement
    I get the plan, but the rows are updated also :-(
    Is there a way to tell ORACLE, please show me the explain plan but dio not execute the statement?
    Thanks

    ONLY FOR queries you can use
    set autotrace traceonly explain
    And actually query isn't executed. For other DML you cannot use that.
    The other way can be explaining the query and then selecting the plan_table output:
    SQL> explain plan for update t set code = 3;
    Explained.
    SQL> SELECT * FROM table(DBMS_XPLAN.DISPLAY);
    PLAN_TABLE_OUTPUT
    Plan hash value: 931696821
    | Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | UPDATE STATEMENT   |      |     3 |     9 |     3   (0)| 00:00:01 |
    |   1 |  UPDATE            | T    |       |       |            |          |
    |   2 |   TABLE ACCESS FULL| T    |     3 |     9 |     3   (0)| 00:00:01 |
    Note
    PLAN_TABLE_OUTPUT
       - dynamic sampling used for this statement
    13 rows selected.
    SQL> see http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_xplan.htm
    Gints Plivna
    http://www.gplivna.eu

  • How does SQL Developer run EXPLAIN PLAN?

    Hello,
    I noticed that SQL Developer can do an EXPLAIN PLAN even though I don't have a PLAN_TABLE available for the user that I use to connect in SQL Developer.
    I was always wondering whether there was a way to do an EXPLAIN PLAN without a PLAN_TABLE, apparently this seems to be possible.
    Thomas

    If I try an explain plan when I do not have a plan table available, I get the message "A PLAN_TABLE is required to access the explain plan, but it does not exist. Do you want to create a PLAN_TABLE?". Unfortunately, as that user does not have create table privs, if I say Yes I get the following error "ORA-01031: insufficient privileges".
    Given this, if you are doing an explain plan, you either have access to a plan table or you have create table privs and SQL Developer has created the plan table for you.

  • How to find Explain Plan for a large querry which has multiple sub querries

    Hi All,
    I have a Package which has many procedures and one of the procedure has a cursor which is like 2000 lines. This cursor has a main select statement which again has many select statements in it.
    Now how do I do the explain plan for the main select statement?
    If it can be done easier way in toad(or SQLPLUS), please tell me...

    When your query takes too long ...

  • How to provide tuning solution from explain plan only

    Dear all,
    If I do not have any kind of access to the database and only have explain plan with me,how I can provideperformance or query  tuning solutions from that??
    Regards
    Anirban

    958657,
    If I do not have any kind of access to the database and only have explain plan with me,how I can provide performance or query  tuning solutions from that??
    This is contradictory as you said you don't have access but you have explain plan. You wont get any explain plan until you connect to the database and run "Explain plan for" statement for the query. How do you get the "explain plan"? If it is provided by someone to you, you might request to get the "Execution Plan" for the query.
    Keep in mind that "explain plan" and  "execution plan "  - these two are not same.
    Explain plan  is not enough for predicting elapsed/response time of a query as Explain plan is static Whereas Execution plan is dynamic and talks about query in execution.
    Oracle provides following things for a query to diagnose its performance :
    1. Static - Explain plan  - Not enough
    2. Dynamic:  Execution plan - Run time Plan
    3. awr/ statspack execution plan --Run time from the past - this is again dynamic execution plan of query runs in the past
    Tuning recommendation is possible by comparing run time of the same query in the past and today's run time and based on further analysis.
    Tuning Recommendation is not possible if you have only Explain plan.

  • Understand the output of explain plan

    I am trying to understand the output of explain plan. I have 2 plans below and don't understand it completely.
    In below SQL I would expect optimizer to fetch "ROWNUM < 500" first and then do the outer join. But below explain plan doesn't list it as No. 1. So I don't really understand how to intepret the sequence from the explain plan:
    select TASK0_.TASK_ID from
    (  select TASK0_.TASK_ID from
      ( select task0_.task_id  from task task0_) TASK0_ where ROWNUM < 500 ) TASK0_ 
    left outer join f_message_task task0_1_ on task0_.task_id=task0_1_.task_id
    left outer join b_a_task task0_2_ on task0_.task_id=task0_2_.task_id
    left outer join i_task task0_3_ on task0_.task_id=task0_3_.task_id
    left outer join o_task task0_4_ on task0_.task_id=task0_4_.task_id
    left outer join r_transmission_task task0_5_ on task0_.task_id=task0_5_.task_id
    left outer join s_error_task task0_6_ on task0_.task_id=task0_6_.task_id
    PLAN_TABLE_OUTPUT     
    Plan hash value: 707970537     
    | Id  | Operation                    | Name                     | Rows  | Bytes | Cost (%CPU)| Time     |     
    |   0 | SELECT STATEMENT             |                          |   499 | 19461 |  1042   (6)| 00:00:13 |     
    |*  1 |  HASH JOIN OUTER             |                          |   499 | 19461 |  1042   (6)| 00:00:13 |     
    |*  2 |   HASH JOIN OUTER            |                          |   499 | 16966 |   757   (6)| 00:00:10 |     
    |   3 |    NESTED LOOPS OUTER        |                          |   499 | 14471 |   589   (4)| 00:00:08 |     
    |   4 |     NESTED LOOPS OUTER       |                          |   499 | 12475 |   588   (4)| 00:00:08 |     
    |   5 |      NESTED LOOPS OUTER      |                          |   499 | 10479 |   588   (4)| 00:00:08 |     
    |   6 |       NESTED LOOPS OUTER     |                          |   499 |  8982 |   588   (4)| 00:00:08 |     
    |   7 |        VIEW                  |                          |   499 |  2495 |   588   (4)| 00:00:08 |     
    |*  8 |         COUNT STOPKEY        |                          |       |       |            |          |     
    |   9 |          INDEX FAST FULL SCAN| PK_TASK                  |   697K|  3403K|   588   (4)| 00:00:08 |     
    |* 10 |        INDEX UNIQUE SCAN     | PK_r_TRANSMISSION |     1 |    13 |     0   (0)| 00:00:01 |     
    |* 11 |       INDEX UNIQUE SCAN      | PK_b_a_TASK          |     1 |     3 |     0   (0)| 00:00:01 |     
    |* 12 |      INDEX UNIQUE SCAN       | PK_s_ERROR_TASK     |     1 |     4 |     0   (0)| 00:00:01 |     
    |* 13 |     INDEX UNIQUE SCAN        | PK_i_TASK    |     1 |     4 |     0   (0)| 00:00:01 |     
    |  14 |    INDEX FAST FULL SCAN      | PK_o_TASK           |   347K|  1695K|   161   (6)| 00:00:02 |     
    |  15 |   INDEX FAST FULL SCAN       | PK_f_MESSAGE        |   392K|  1917K|   276   (4)| 00:00:04 |     
    Predicate Information (identified by operation id):     
       1 - access("TASK0_"."TASK_ID"="TASK0_1_"."TASK_ID"(+))     
       2 - access("TASK0_"."TASK_ID"="TASK0_4_"."TASK_ID"(+))     
       8 - filter(ROWNUM<500)     
      10 - access("TASK0_"."TASK_ID"="TASK0_5_"."TASK_ID"(+))     
      11 - access("TASK0_"."TASK_ID"="TASK0_2_"."TASK_ID"(+))     
      12 - access("TASK0_"."TASK_ID"="TASK0_6_"."TASK_ID"(+))     
      13 - access("TASK0_"."TASK_ID"="TASK0_3_"."TASK_ID"(+))     
    In below SQL I expect rownum to be applied at the end but it gets applied first:
    select *  from (  select TASK0_.TASK_ID from ( select task0_.task_id  from task task0_ 
    left outer join f_message_task task0_1_ on task0_.task_id=task0_1_.task_id
    left outer join b_a_task task0_2_ on task0_.task_id=task0_2_.task_id
    left outer join i_task task0_3_ on task0_.task_id=task0_3_.task_id
    left outer join o_task task0_4_ on task0_.task_id=task0_4_.task_id
    left outer join r_t_task task0_5_ on task0_.task_id=task0_5_.task_id
    left outer join s_error_task task0_6_ on task0_.task_id=task0_6_.task_id
    ) TASK0_ where ROWNUM < 500 ) TASK0_;
    PLAN_TABLE_OUTPUT     
    Plan hash value: 673345378     
    | Id  | Operation                    | Name                     | Rows  | Bytes | Cost (%CPU)| Time     |     
    |   0 | SELECT STATEMENT             |                          |   499 |  6487 |   507   (1)| 00:00:07 |     
    |   1 |  VIEW                        |                          |   499 |  6487 |   507   (1)| 00:00:07 |     
    |*  2 |   COUNT STOPKEY              |                          |       |       |            |          |     
    |   3 |    NESTED LOOPS OUTER        |                          |   501 | 19539 |   507   (1)| 00:00:07 |     
    |   4 |     NESTED LOOPS OUTER       |                          |   501 | 17034 |     5  (20)| 00:00:01 |     
    |   5 |      NESTED LOOPS OUTER      |                          |   501 | 15030 |     5  (20)| 00:00:01 |     
    |   6 |       NESTED LOOPS OUTER     |                          |   501 | 13026 |     5  (20)| 00:00:01 |     
    |   7 |        NESTED LOOPS OUTER    |                          |   501 | 11523 |     5  (20)| 00:00:01 |     
    |   8 |         NESTED LOOPS OUTER   |                          |   501 |  5010 |     5  (20)| 00:00:01 |     
    |   9 |          INDEX FAST FULL SCAN| PK_TASK                  |   499 |  2495 |     2   (0)| 00:00:01 |     
    |* 10 |          INDEX UNIQUE SCAN   | PK_o_TASK           |     1 |     5 |     1   (0)| 00:00:01 |     
    |* 11 |         INDEX UNIQUE SCAN    | PK_r_T |     1 |    13 |     0   (0)| 00:00:01 |     
    |* 12 |        INDEX UNIQUE SCAN     | PK_b_a_TASK          |     1 |     3 |     0   (0)| 00:00:01 |     
    |* 13 |       INDEX UNIQUE SCAN      | PK_s_ERROR_TASK     |     1 |     4 |     0   (0)| 00:00:01 |     
    |* 14 |      INDEX UNIQUE SCAN       | PK_i_TASK    |     1 |     4 |     0   (0)| 00:00:01 |     
    |* 15 |     INDEX UNIQUE SCAN        | PK_f_MESSAGE        |     1 |     5 |     1   (0)| 00:00:01 |     
    Predicate Information (identified by operation id):     
       2 - filter(ROWNUM<500)     
      10 - access("TASK0_"."TASK_ID"="TASK0_4_"."TASK_ID"(+))     
      11 - access("TASK0_"."TASK_ID"="TASK0_5_"."TASK_ID"(+))     
      12 - access("TASK0_"."TASK_ID"="TASK0_2_"."TASK_ID"(+))     
      13 - access("TASK0_"."TASK_ID"="TASK0_6_"."TASK_ID"(+))     
      14 - access("TASK0_"."TASK_ID"="TASK0_3_"."TASK_ID"(+))     
      15 - access("TASK0_"."TASK_ID"="TASK0_1_"."TASK_ID"(+))Edited by: user628400 on Feb 20, 2009 12:14 PM
    Edited by: user628400 on Feb 20, 2009 12:15 PM

    Please read the FAQ: http://forums.oracle.com/forums/help.jspa
    And learn how to post code and explain plans using the tags.                                                                                                                                                                                                                                                                           

  • Explain plan generating it self taking very long time !!! What to do ?

    Hi,
    I am trying to generate explain plan for a query which is running more than 2 hours. I am trying to generate explain plan for query by "explin plan for select ..." but it self is taking very long time.
    Kindly suggest me how to reduce time for explain plan ? Secondly why explain plan itself taking very long time ?
    thanks & regards
    PKP

    Just guessing here, but I've experienced this behaviour when I did two explain's within a second. This is because a plan is identified by a statement_id or, if you don't provide a statement_id, by the timestamp (of DATE datatype). So if you execute two explain plans within the second (using a script), it has two sets of data with the same primary key. The hierarchical query that needs to be executed to provide you the nicely indented text, will exponentially expand in this case.
    Maybe time to clean up your plan_table ?
    Hope this helps.
    Regards,
    Rob.

  • Explain plan--Object not found error

    Hi All,
    I want to use 'explain plan' to optimise the query.
    How do i see the explain plan in toad.
    when i say
    explain plan set statement_id='XX' for select stmt;
    select * from explain plan
    where statement_id='XX';
    iam geeting object not found
    what parameters i need to set up before using explain plan
    Please give me details.
    Please suggest.
    Thanks.

    This should have been in TOAD Forum :-)).. Anyway,
    You need to set the plan table name in view->Options->Oracle. If the specified plan table doesnt exist, create the plan table

  • Explain plan for timesten and Oracle

    we have a base table in our Oracle 10g database. We created a DSN for this in timesten 7.0 database and are able to connect. Now we have created 3 materialized views in timesten on top of the Oracle Base Table. How can we get the explain plan in timesten to find out when the table is being called by a custom java application, the materialized views are being used or not ? Please advice

    Hi Can you help me in this regards,
    i am getting the following error. Can you tell me how can i get rid of them?
    Command> call ttcachestart();
    15001: User lacks privilege ADMIN

Maybe you are looking for