DBMS_SQLTUNE.REPORT_TUNING_TASK

Hi,
In 10g R2 i receive the following :
SQL> SET LONG 1000
SQL> SET LONGCHUNKSIZE 1000
SQL> SET LINESIZE 100
SQL> SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK( 'my_sql_tuning_task')
  2    FROM DUAL;
DBMS_SQLTUNE.REPORT_TUNING_TASK('MY_SQL_TUNING_TASK')
GENERAL INFORMATION SECTION
Tuning Task Name                  : my_sql_tuning_task
Tuning Task Owner                 : SCOTT
Scope                             : COMPREHENSIVE
Time Limit(seconds)               : 60
Completion Status                 : COMPLETED
Started at                        : 07/05/2010 17:21:36
Completed at                      : 07/05/2010 17:21:37
Number of Statistic Findings      : 2
DBMS_SQLTUNE.REPORT_TUNING_TASK('MY_SQL_TUNING_TASK')
Schema Name: SCOTT
SQL ID     : 6trybwr380un5
SQL Text   : SELECT /*+ ORDERED */ * FROM emp e, dept d WHERE e.deptno =
             d.deptno AND e.empno < :bnd
FINDINGS SECTION (2 findings)
1- Statistics Finding
DBMS_SQLTUNE.REPORT_TUNING_TASK('MY_SQL_TUNING_TASK')
  Table "SCOTT"."DEPT" and its inMy questions are :
1-What are the findings ? It says two but displays (If no mistake from me) only one.
2-What does mean : Table "SCOTT"."DEPT" and its in ?
Thank you.

My glogin.sql file contains the following:
set pagesize 25
set linesize 121
set long 1000000   <-------------------
col name format a30
col value format a30
col column_name format a30
col object_name format a30
col segment_name format a30
col file_name format a60
col data_type format a20
SET DEFINE OFF
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
ALTER SESSION SET PLSQL_WARNINGS='ENABLE:ALL';you might find it useful so you don't bump into these problems in the future.

Similar Messages

  • Generate HTML format report using  DBMS_SQLTUNE.REPORT_TUNING_TASK function

    How could i generate HTML format report using DBMS_SQLTUNE.REPORT_TUNING_TASK function in oracle 11g

    See [url http://download.oracle.com/docs/cd/E11882_01/appdev.112/e16760/d_sqltun.htm#CHDGEIHJ]documentation for DBMS_SQLTUNE.
    The TYPE parameter suggests that it would determine the format and whilst the nline documentation in the code (desc DBMS_SQLTUNE) suggests that valid values are TEXT, HTML and XML, it seems that this is not yet implemented. Whilst valid values of TEXT, HTML and XML are validated, only a TEXT report is produced.

  • Unable to get the execution plan when using dbms_sqltune (11gR2)

    Hi,
    Database version: 11gR2
    I have a user A that is granted privileges to execute dbms_sqltune.
    I can create a task, excute it and run the report.
    But, when I run the report I get the following error:
    SQL> show user
    USER is "A"
    SQL> set long 10000 longchunksize 10000 linesize 200 pagesize 000
    select dbms_sqltune.report_tuning_task(task_name => 'MYTEST') from dual;SQL>
    GENERAL INFORMATION SECTION
    Tuning Task Name : MYTEST
    Tuning Task Owner : A
    Workload Type : Single SQL Statement
    Scope : COMPREHENSIVE
    Time Limit(seconds): 1800
    Completion Status : COMPLETED
    Started at : 05/15/2013 11:53:22
    Completed at : 05/15/2013 11:53:23
    Schema Name: SYSMAN
    SQL ID : gjm43un5cy843
    SQL Text : SELECT SUM(USED), SUM(TOTAL) FROM (SELECT /*+ ORDERED */
    SUM(D.BYTES)/(1024*1024)-MAX(S.BYTES) USED,
    SUM(D.BYTES)/(1024*1024) TOTAL FROM (SELECT TABLESPACE_NAME,
    SUM(BYTES)/(1024*1024) BYTES FROM (SELECT /*+ ORDERED USE_NL(obj
    tab) */ DISTINCT TS.NAME FROM SYS.OBJ$ OBJ, SYS.TAB$ TAB,
    SYS.TS$ TS WHERE OBJ.OWNER# = USERENV('SCHEMAID') AND OBJ.OBJ# =
    TAB.OBJ# AND TAB.TS# = TS.TS# AND BITAND(TAB.PROPERTY,1) = 0 AND
    BITAND(TAB.PROPERTY,4194400) = 0) TN, DBA_FREE_SPACE SP WHERE
    SP.TABLESPACE_NAME = TN.NAME GROUP BY SP.TABLESPACE_NAME) S,
    DBA_DATA_FILES D WHERE D.TABLESPACE_NAME = S.TABLESPACE_NAME
    GROUP BY D.TABLESPACE_NAME)
    ERRORS SECTION
    - ORA-00942: table or view does not exist
    SQL>
    It seems there a missing privileg for dislaying the execution plan.
    As a workaround, this is solved by granting select any dictionay (which I don't want) to the user A.
    Does someone have an idea about what privilege is missing?
    Kind Regards.

    Hi,
    SELECT ANY DICTIONARY system privilege provides access to SYS schema objects only => which you are using as workaround
    SELECT_CATALOG_ROLE provides access to all SYS views only.==> Safe option
    SQL> grant SELECT ANY DICTIONARY to test;
    Grant succeeded.
    SQL> conn test/test
    Connected.
    SQL> select count(*) from  sys.obj$;
      COUNT(*)
         13284
    SQL> conn /as sysdba
    Connected.
    SQL> revoke SELECT ANY DICTIONARY from test;
    Revoke succeeded.
    SQL> grant SELECT_CATALOG_ROLE to test;
    Grant succeeded.
    SQL> conn test/test
    Connected.
    SQL> select count(*) from  sys.obj$;
    select count(*) from  sys.obj$
    ERROR at line 1:
    ORA-00942: table or view does not existHTH

  • Errors using DBMS_SQLTUNE Advisors for Oracle 10g

    I get errors trying to tune the below query for Oracle 10g using the DBMS_SQLTUNE advisors.
    It happens when I wrap either a large block of PL/SQL code that uses bind variables or multiple nested subqueries with multiple JOIN conditions in a SELECT query statement that I wish to tune using the 10g SQLTUNE advisors.
    Message was edited by:
    benprusinski

    Hi, I was trying to use the DBMS_SQLTUNE package to tune my sql statements used in the huge procedure. I can successfully create a task and execute it. But when I run report tuning task, I'm always getting error like the one in below example. Two questions I have now.
    1) Is this becuase I'm using bind, but not passing any values?
    2) Can I able to use to this package to tune a procedures instead of sql statement?
    Example output...
    SQL&gt; SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK( 'my_sql_tuning_task3')
    2 FROM DUAL;
    DBMS_SQLTUNE.REPORT_TUNING_TASK('MY_SQL_TUNING_TASK3')
    GENERAL INFORMATION SECTION
    Tuning Task Name : my_sql_tuning_task3
    Tuning Task Owner : SCOTT
    Scope : COMPREHENSIVE
    Time Limit(seconds) : 3000
    Completion Status : COMPLETED
    Started at : 02/26/2009 21:44:41
    Completed at : 02/26/2009 21:44:41
    Number of Errors : 1
    DBMS_SQLTUNE.REPORT_TUNING_TASK('MY_SQL_TUNING_TASK3')
    Schema Name: KPRAVEEN
    SQL ID : 479831s42xj1n
    SQL Text : SELECT a.pdrorn, a.pdrcto, a.pdrlln FROM f4311 a
    WHERE a.pddoco = receiptsrcrec.prdoco AND a.pddcto = :2 AND
    a.pdkcoo = :3 AND a.pdsfxo = :4 AND a.pdlnid = :5
    ERRORS SECTION
    SQL&gt;

  • Awr dbms_sqltune  package

    Hi,
    Our company doesn't currently have oem installed on production. This will be done in March. Right now I am working with the sqltune package to access the database on the dev server before I run it on production. I was running the following procedure below and requested the GOLDUSER schema.
    Down in the load_sqlset procdure I think I have the load_option and update_option set to the correct values. I could be wrong though. By setting these all I want is to extract the old sql statements and performace tune them.
    I get those sql statements listed out and also I get a different named schema under "tables with new potential indices" (LEADUSERS).
    Should I be concerned with this? Would someone just look this procedure over to see if it is correct?
    I would appreciate your help in this matter.
    Thanks in advance.
    al
    declare
    cursor_1 dbms_sqltune.sqlset_cursor;
    begin
    open cursor_1 for
    select value(p)
    from table(dbms_sqltune.select_workload_repository)
    750,
    1501,
    'parsing_schema_name= ''GOLDUSER'' AND executions > 25',
    null,
    null,
    null,
    null,
    null,
    10)) p;
    dbms_sqltune.load_sqlset(
    sqlset_name => 'prod_awr',
    populate_cursor => cursor_1,
    load_option => 'MERGE',
    update_option => 'ACCUMULATE');
    end;
    /

    Check this one:
    http://www.oracle-base.com/articles/10g/AutomaticSQLTuning10g.php
    OR
    DECLARE
    ret_val VARCHAR2(4000);
    BEGIN
    ret_val := dbms_sqltune.create_tuning_task(
    task_name=>'t1',
    sql_id=>' '); Execute the sql prior to this and get the sql_id in place it here
    dbms_sqltune.execute_tuning_task('t1');
    END;
    check the status by,
    SELECT status FROM DBA_ADVISOR_LOG WHERE task_name ='t1';
    Upon completion of the above,
    SET LONG 100000
    SET LONGCHUNKSIZE 99999
    SET LINESIZE 20000
    SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK( 't1') FROM DUAL;

  • ORA-06532: ORACLE 10.2.0.4: TUNING: dbms_sqltune accept_sql_profile

    Hi all,
    i have a big problem with oracle tuning set. I'm using this script for tune some query when the EM is unusable, but for the first time i have this error: ORA-06532: Subscript outside of limit.
    I have not found any solutions from google to metalink... can you help me? you need others informations?
    these are the steps:
    1) login with system
    2) launching the script sqltune.sql
    spool M:\tuning\sql_tune_TSQ.log
    set long 100000
    SET LONGCHUNKSIZE 100000
    SET LINESIZE 200
    execute DBMS_SQLTUNE.DROP_TUNING_TASK('sqltuning_request_fromuser');
    DECLARE my_task_name VARCHAR2(100);
    tune_sqltext CLOB;
    BEGIN
    tune_sqltext := q'#Select row_ticket from abc.ticket_kasdeww_export#';
    my_task_name := dbms_sqltune.create_tuning_task(user_name=>'abc',sql_text=>tune_sqltext, task_name=>'sqltuning_request_fromuser', time_limit=>1800);
    dbms_sqltune.execute_tuning_task(task_name=>'sqltuning_request_fromuser');
    END;
    SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK( 'sqltuning_request_fromuser') FROM DUAL;
    spool off
    3) when trying accept new sql profile:
    execute dbms_sqltune.accept_sql_profile(task_name => 'sqltuning_request_fromuser', replace => TRUE);
    ERROR at line 1:
    ORA-06532: Subscript outside of limit
    ORA-06512: at "SYS.DBMS_SQLTUNE_INTERNAL", line 7087
    ORA-06512: at "SYS.DBMS_SQLTUNE", line 5559
    ORA-06512: at "SYS.DBMS_SQLTUNE", line 5586
    ORA-06512: at line 1
    N.b. A Generic error from EM is returned when trying accept sql profile, this is the reason for using the command line method
    N.b.2 This query return approximately 40.000 rows and is a select from a view that is created from the union of two type of select

    user9523366 wrote:
    thanks!
    no one for this unusual problem please?I think I had some time ago a similar issue. You can try to check if the SQL profile generated contains an unusual large number of hints, by querying for your tuning task here:
    USER_TUNING_TASKS
    And then query an underlying table called SYS.WRI$_ADV_RATIONALE like that:
    select
    from
              sys.WRI$_ADV_RATIONALE
    where
              task_id = <your_task_id from USER_TUNING_TASKS>;If this query shows hundreds of rows with hints in the ATTR1 column then this might be the reason for the error. You might want to open an SR with Oracle then, because I can't remember if I found a way back then to make the "ACCEPT_SQL_PROFILE" work and I think I remember I solved the issue otherwise.
    Regards,
    Randolf
    Oracle related stuff blog:
    http://oracle-randolf.blogspot.com/
    SQLTools++ for Oracle (Open source Oracle GUI for Windows):
    http://www.sqltools-plusplus.org:7676/
    http://sourceforge.net/projects/sqlt-pp/

  • DBMS_SQLTUNE.REPORT

    Hi,
    on 11g R2 on Win I run in SQLPLUS:
    variable stmt_task VARCHAR2(64);
    EXEC :stmt_task := DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_id => ‘4rc7d8c0mvfm8');
    EXEC DBMS_SQLTUNE.EXECUTE_TUNING_TASK(:stmt_task);
    SET LINESIZE 140
    SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK(:stmt_task) from dual;
    DBMS_SQLTUNE.REPORT_TUNING_TASK(:STMT_TASK)
    GENERAL INFORMATION SECTION
    SQL>Is the report empty ? Nothing in it ? Why ?
    Thank you.

    Is this not just the display being too small?
    Try something like:
    set long 10000then rerun.

  • Need help to debug SQL Tuning Advisor Error Message

    Hi,
    I am getting an error message while try to get recommendations from the SQL Tuning Advisor.
    Environment:
    Oracle Version:  11.2.0.3.0
    O/S: AIX
    Following is my code:
    declare
    my_task_name  varchar2 (30);
    my_sqltext    clob;
    begin
    my_sqltext := 'SELECT DISTINCT MRKT_AREA AS DIVISION, PROMO_ID,
                    PROMO_CODE,
                    RBR_DTL_TYPE.PERF_DETL_TYP, 
                    RBR_DTL_TYPE.PERF_DETL_DESC,
                    RBR_DTL_TYPE.PERF_DETL_SUB_TYP,
                    RBR_DTL_TYPE.PERF_DETL_SUB_DESC,
                    BU_SYS_ITM_NUM,
                    RBR_CPN_LOC_ITEM_ARCHIVE.CLI_SYS_ITM_DESC,
                    PROMO_START_DATE,
                    PROMO_END_DATE,
                    PROMO_VALUE2,
                    PROMO_VALUE1,
                    EXEC_COMMENTS,
                    PAGE_NUM,
                    BLOCK_NUM,
                    AD_PLACEMENT,
                    BUYER_CODE,
                    RBR_CPN_LOC_ITEM_ARCHIVE.CLI_STAT_TYP,
                    RBR_MASTER_CAL_ARCHIVE.STATUS_FLAG
    FROM  (PROMO_REPT_OWNER.RBR_CPN_LOC_ITEM_ARCHIVE
    INNER JOIN PROMO_REPT_OWNER.RBR_MASTER_CAL_ARCHIVE
    ON (RBR_CPN_LOC_ITEM_ARCHIVE.CLI_PROMO_ID = PROMO_ID)
    AND (RBR_CPN_LOC_ITEM_ARCHIVE.CLI_PERF_DTL_ID = PERF_DETAIL_ID)
    AND (RBR_CPN_LOC_ITEM_ARCHIVE.CLI_STR_NBR = STORE_ZONE)
    AND (RBR_CPN_LOC_ITEM_ARCHIVE.CLI_ITM_ID = ITM_ID))
    INNER JOIN PROMO_REPT_OWNER.RBR_DTL_TYPE
    ON (RBR_MASTER_CAL_ARCHIVE.PERF_DETL_TYP = RBR_DTL_TYPE.PERF_DETL_TYP)
    AND (RBR_MASTER_CAL_ARCHIVE.PERF_DETL_SUB_TYP = RBR_DTL_TYPE.PERF_DETL_SUB_TYP)
    WHERE ( ((MRKT_AREA)=40)
    AND ((RBR_DTL_TYPE.PERF_DETL_TYP)=1)
    AND ((RBR_DTL_TYPE.PERF_DETL_SUB_TYP)=1) )
    AND ((CLI_STAT_TYP)=1 Or (CLI_STAT_TYP)=6)
    AND ((RBR_MASTER_CAL_ARCHIVE.STATUS_FLAG)=''A'')
    AND ( ((PROMO_START_DATE) >= to_date(''2011-10-20'', ''YYYY-MM-DD'')
    And (PROMO_END_DATE) <= to_date(''2011-10-26'', ''YYYY-MM-DD'')) )
    ORDER BY MRKT_AREA';
    my_task_name := dbms_sqltune.create_tuning_task
                                 (sql_text => my_sqltext,
                                  user_name => 'PROMO_REPT_OWNER',
                                  scope     => 'COMPREHENSIVE',
                                  time_limit => 3600,
                                  task_name  => 'Test_Query',
                                  description  => 'Test Query');
    end;
    begin
      dbms_sqltune.execute_tuning_task(task_name => 'Test_Query');
    end;
    set serveroutput on size unlimited;
    set pagesize 5000
    set linesize 130
    set long 50000
    set longchunksize 500000
    SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('Test_Query') FROM DUAL;
    Output:
    snippet .....
    FINDINGS SECTION (1 finding)
    1- Index Finding (see explain plans section below)
    The execution plan of this statement can be improved by creating one or more
    indices.
    Recommendation (estimated benefit: 71.48%)
    - Consider running the Access Advisor to improve the physical schema design
    or creating the recommended index.
    Error: Cannot fetch actions for recommendation: INDEX
    Error: ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    Rationale
    Creating the recommended indices significantly improves the execution plan
    of this statement. However, it might be preferable to run "Access Advisor"
    using a representative SQL workload as opposed to a single statement. This
    will allow to get comprehensive index recommendations which takes into
    account index maintenance overhead and additional space consumption.
    snippet
    Any ideas why I am getting ORA-06502 error?
    Thanks in advance
    Rogers

    Bug 14407401 - ORA-6502 from index recommendation section of DBMS_SQLTUNE output (Doc ID 14407401.8)
    Fixed:
    The fix for 14407401 is first included in
    12.1.0.1 (Base Release)

  • ORA-13786: missing SQL text of statement object - Unable to profile a sql_id in oracle 11g -

    11.2.0.3.5 / 2 node rac on rhel-6 / 64-bit
    I would like to a profile a sql_id since its following 4 plans and one of them is the optimal.
    But im unable to do it as it throwing ORA-13786.
    Steps I followed :
    {code}
    SET SERVEROUTPUT ON
    -- Tuning task created for specific a statement from the AWR.
    DECLARE
      l_sql_tune_task_id  VARCHAR2(100);
    BEGIN
      l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task (
                              begin_snap  => 29676,
                              end_snap    => 29707,
                              sql_id      => 'fjndcnvzkjkb5',
                              scope       => DBMS_SQLTUNE.scope_comprehensive,
                              time_limit  => 60,
                              task_name   => '420tavt57dxkx_tuning_task',
                              description => 'Tuning task for statement 420tavt57dxkx in AWR.');
      DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id);
    END;
    EXEC DBMS_SQLTUNE.execute_tuning_task(task_name => 'fjndcnvzkjkb5_CFO_tuning_task');
    SET LONG 10000;
    SET PAGESIZE 1000
    SET LINESIZE 200
    SELECT DBMS_SQLTUNE.report_tuning_task('420tavt57dxkx_tuning_task') AS recommendations FROM dual;
    SET PAGESIZE 24
    SQL>  execute dbms_sqltune.accept_sql_profile(task_name =>'420tavt57dxkx_tuning_task_task', replace => TRUE,force_match  => TRUE);
    BEGIN dbms_sqltune.accept_sql_profile(task_name =>420tavt57dxkx_tuning_task', replace => TRUE,force_match  => TRUE); END;
    ERROR at line 1:
    ORA-13786: missing SQL text of statement object "1" for tuning task "420tavt57dxkx_tuning_task"
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95
    ORA-06512: at "SYS.DBMS_SQLTUNE_INTERNAL", line 16442
    ORA-06512: at "SYS.PRVT_SQLPROF_INFRA", line 31
    ORA-06512: at "SYS.DBMS_SQLTUNE", line 7544
    ORA-06512: at "SYS.DBMS_SQLTUNE", line 7568
    ORA-06512: at line 1
    {code}
    Can somebody help me out on this?

    Hi Experts,
    i too getting this error while attaching the tuning task to the sql profiler, below are the details, appreciate any help on this.
    SQL> SQL> VAR profile_name VARCHAR2(30);
    SQL> BEGIN
       :profile_name := DBMS_SQLTUNE.ACCEPT_SQL_PROFILE(task_name => 'sql_tuning_task');
    END;
    /  2    3    4
    BEGIN
    ERROR at line 1:
    ORA-13786: missing SQL text of statement object "1" for tuning task "sql_tuning_task"
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95
    ORA-06512: at "SYS.DBMS_SQLTUNE_INTERNAL", line 16442
    ORA-06512: at "SYS.PRVT_SQLPROF_INFRA", line 31
    ORA-06512: at "SYS.DBMS_SQLTUNE", line 7544
    ORA-06512: at line 2
    SQL> select banner from v$version;
    BANNER
    Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
    PL/SQL Release 11.2.0.3.0 - Production
    CORE    11.2.0.3.0      Production
    TNS for Linux: Version 11.2.0.3.0 - Production
    NLSRTL Version 11.2.0.3.0 - Production

  • How to see an explain plan?

    Hi all,
    I'm looking to tune one sql sentence of my application. To do it, I've used the sqltune package. When I see the report, I obtain the actual explain plan and, finally the suggestion to use an SQL Profile.
    How can I see the new explain plan of this option before apply it?
    I attach the report result for your information:
    SELECT DBMS_SQLTUNE.report_tuning_task('analisis_matriculation_view') AS recommendations FROM dual;SQL> SQL> SQL>
    RECOMMENDATIONS
    GENERAL INFORMATION SECTION
    Tuning Task Name : analisis_matriculation_view
    Tuning Task Owner : A9
    Scope : COMPREHENSIVE
    Time Limit(seconds) : 3600
    Completion Status : COMPLETED
    Started at : 08/11/2010 09:33:18
    Completed at : 08/11/2010 10:23:16
    Number of SQL Profile Findings : 1
    Schema Name: A9
    SQL ID : gd8b5pwyj0yu8
    SQL Text : SELECT PO.ID POID, BO.ID BOID, MAT.AGENT_ID AGENTID,
    MAT.AGENCY_ID AGENCYID, MAT.ID MATID,MAT.PARTNERBRANCH_ID
    PBRANCHID, MAT.DOSSIERNUMBER, MAT.DOSSIERVERSION,
    MAT.FILINGDATE,MAT.TELEMATIC, MAT.MANUALDGTTAXCODE,
    MAT.ASSIGNDGTTAX, MAT.STATUS, MAT.PLATENUMBER,MAT.REJECTIONCAUSE,
    MAT.REJECTIONNOTES, MAT.COLOR, MAT.CREATEDON, MAT.MODIFIEDON,
    FO.COLOR,AG.MEMBERID, US.NAME AGENTNAME, US.SURNAME
    AGENTSURNAME, US.SURNAME2 AGENTSURNAME2, US.NIF AGENTNIF,AY.NAME
    AGENCYNAME, VD.SERIALNUMBER, VOWN.NAME OWNERNAME, VOWN.SURNAME
    OWNERSURNAME,VOWN.SURNAME2 OWNERSURNAME2, UPPER(VOWN.NAME) || '
    ' || UPPER(VOWN.SURNAME) || ' ' || UPPER(VOWN.SURNAME2)
    OWNERFULLNAME,VOWN.FISCALID OWNERNIF, FO.ID FOLDERID, FO.NAME
    FOLDERNAME, FO.STATUS FOLDERSTATUS, IVTM.ID IVTMID,IVTM.STATUS
    IVTMSTATUS, IVTM.FINALAMOUNT IVTMAMOUNT, IVTM.IVTMCOLLECTOR,
    F576.ID F576ID,F576.PAYMENTCOMPLETEREFNUMBER NRC576,
    F576.MATRICULATIONCODE CEM576, F576.AEATELECTRONICCODEMANUAL
    CEM576MANUAL,F576.NRCMANUAL NRC576MANUAL, F06.ID F06ID,
    F06.MATRICULATIONCODE CEM06, F06.AEATELECTRONICCODEMANUAL
    CEM06MANUAL,F06.NRE NRE06, F06.NREMANUAL NRE06MANUAL, F05.ID
    F05ID, F05.MATRICULATIONCODE CEM05, F05.AEATELECTRONICCODEMANUAL
    CEM05MANUAL FROM A9_MATRICULATION MAT INNER JOIN A9_AGENT AG ON
    (MAT.AGENT_ID = AG.ID) INNER JOIN A9_USER US ON (AG.ID = US.ID)
    INNER JOIN A9_BRANCHOFFICE BO ON (AG.BRANCHOFFICE_ID = BO.ID)
    INNER JOIN A9_PROFESSIONALORDER PO ON (BO.PROFESSIONALORDER_ID =
    PO.ID) INNER JOIN A9_AGENCY AY ON (MAT.AGENCY_ID = AY.ID) INNER
    JOIN A9_VEHICLEDATA VD ON (MAT.VEHICLEDATA_ID = VD.ID) INNER
    JOIN A9_VEHICLEOWNER VOWN ON (VOWN.MATRICULATION_ID = MAT.ID)
    LEFT JOIN A9_MATRICULATIONFOLDER FO ON
    (MAT.MATRICULATIONFOLDER_ID = FO.ID) LEFT JOIN A9_IVTM IVTM ON
    (MAT.IVTM_ID = IVTM.ID)LEFT JOIN A9_FORM576 F576 ON
    (MAT.FORM576_ID = F576.ID) LEFT JOIN A9_FORM05 F05 ON
    (MAT.FORM05_ID = F05.ID) LEFT JOIN A9_FORM06 F06 ON
    (MAT.FORM06_ID = F06.ID) WHERE VOWN.MAINOWNER = 1 AND MAT.VALID
    = 1 AND US.DELETEDON IS NULL AND PO.DELETEDON IS NULL AND
    BO.DELETEDON IS NULL AND AY.DELETEDON IS NULL AND VOWN.DELETEDON
    IS NULL AND FO.DELETEDON IS NULL AND IVTM.DELETEDON IS NULL AND
    VD.DELETEDON IS NULL AND F576.DELETEDON IS NULL AND
    F05.DELETEDON IS NULL AND F06.DELETEDON IS NULL AND
    MAT.DELETEDON IS NULL ORDER BY DOSSIERNUMBER DESC
    FINDINGS SECTION (1 finding)
    1- SQL Profile Finding (see explain plans section below)
    Se ha encontrado un plan de ejecucion potencialmente mejor para esta
    sentencia.
    Recommendation (estimated benefit: 35,82%)
    - Puede aceptar el perfil SQL recomendado.
    execute dbms_sqltune.accept_sql_profile(task_name =>
    'analisis_matriculation_view', replace => TRUE);
    EXPLAIN PLANS SECTION
    1- Original With Adjusted Cost
    Plan hash value: 1271206505
    Id      Operation      Name      Rows      Bytes      TempSpc      Cost (%CPU)      Time
    0      SELECT STATEMENT           4728K      2015M           783K (1)      02:36:41
    1      SORT ORDER BY           4728K      2015M      4346M      783K (1)      02:36:41
    * 2      HASH JOIN           4728K      2015M      1857M      333K (1)      01:06:48
    * 3      HASH JOIN           4728K      1803M      1736M      231K (1)      00:46:14
    * 4      HASH JOIN           4728K      1682M           133K (1)      00:26:42
    * 5      TABLE ACCESS FULL      A9_AGENCY      1076      34432           8 (0)      00:00:01
    * 6      FILTER                               
    * 7      HASH JOIN OUTER           5029K      1635M      1568M      133K (1)      00:26:42
    * 8      FILTER                               
    * 9      HASH JOIN OUTER           5029K      1510M      235M      45724 (2)      00:09:09
    * 10      FILTER                               
    * 11      HASH JOIN RIGHT OUTER           846K      226M      7792K      23780 (2)      00:04:46
    12      TABLE ACCESS FULL      A9_MATRICULATIONFOLDER      185K      5613K           731 (2)      00:00:09
    * 13      FILTER                               
    * 14      HASH JOIN RIGHT OUTER           846K      201M      6784K      12190 (2)      00:02:27
    15      TABLE ACCESS FULL      A9_FORM06      192K      4517K           1340 (3)      00:00:17
    * 16      FILTER                               
    * 17      HASH JOIN RIGHT OUTER           65680      14M      2784K      9769 (2)      00:01:58
    18      TABLE ACCESS FULL      A9_FORM05      91913      1705K           592 (2)      00:00:08
    * 19      HASH JOIN           65680      12M           8360 (2)      00:01:41
    * 20      HASH JOIN           560      37520           25 (8)      00:00:01
    * 21      HASH JOIN           560      14560           10 (10)      00:00:01
    * 22      HASH JOIN           8      112           7 (15)      00:00:01
    * 23      TABLE ACCESS FULL      A9_PROFESSIONALORDER      6      30           3 (0)      00:00:01
    * 24      TABLE ACCESS FULL      A9_BRANCHOFFICE      16      144           3 (0)      00:00:01
    25      TABLE ACCESS FULL      A9_AGENT      1053      12636           3 (0)      00:00:01
    * 26      TABLE ACCESS FULL      A9_USER      2245      92045           14 (0)      00:00:01
    * 27      TABLE ACCESS FULL      A9_MATRICULATION      123K      16M           8333 (2)      00:01:41
    28      TABLE ACCESS FULL      A9_FORM576      899K      30M           8158 (2)      00:01:38
    29      TABLE ACCESS FULL      A9_IVTM      1207K      29M           7562 (3)      00:01:31
    * 30      TABLE ACCESS FULL      A9_VEHICLEDATA      979K      25M           9552 (1)      00:01:55
    * 31      TABLE ACCESS FULL      A9_VEHICLEOWNER      983K      44M           7771 (2)      00:01:34
    Predicate Information (identified by operation id):
    2 - access("VOWN"."MATRICULATION_ID"="MAT"."ID")
    3 - access("MAT"."VEHICLEDATA_ID"="VD"."ID")
    4 - access("MAT"."AGENCY_ID"="AY"."ID")
    5 - filter("AY"."DELETEDON" IS NULL)
    6 - filter("IVTM"."DELETEDON" IS NULL)
    7 - access("MAT"."IVTM_ID"="IVTM"."ID"(+))
    8 - filter("F576"."DELETEDON" IS NULL)
    9 - access("MAT"."FORM576_ID"="F576"."ID"(+))
    10 - filter("FO"."DELETEDON" IS NULL)
    11 - access("MAT"."MATRICULATIONFOLDER_ID"="FO"."ID"(+))
    13 - filter("F06"."DELETEDON" IS NULL)
    14 - access("MAT"."FORM06_ID"="F06"."ID"(+))
    16 - filter("F05"."DELETEDON" IS NULL)
    17 - access("MAT"."FORM05_ID"="F05"."ID"(+))
    19 - access("MAT"."AGENT_ID"="AG"."ID")
    20 - access("AG"."ID"="US"."ID")
    21 - access("AG"."BRANCHOFFICE_ID"="BO"."ID")
    22 - access("BO"."PROFESSIONALORDER_ID"="PO"."ID")
    23 - filter("PO"."DELETEDON" IS NULL)
    24 - filter("BO"."DELETEDON" IS NULL)
    26 - filter("US"."DELETEDON" IS NULL)
    27 - filter("MAT"."VALID"=1 AND "MAT"."DELETEDON" IS NULL)
    30 - filter("VD"."DELETEDON" IS NULL)
    31 - filter("VOWN"."DELETEDON" IS NULL AND "VOWN"."MAINOWNER"=1)
    2- Using SQL Profile
    Plan hash value: 1408211821
    Best regards,
    dbajug
    Edited by: dbajug on Aug 11, 2010 6:31 AM

    Hi all,
    the aswer is on this post:
    Re: Explain plan
    Regards,
    dbajug

  • Oracle 10g SQL Tuning Advisor

    I am working as a junior DBA. I tried to tune a query using SQL Tuning Advisor that is with DBMS_SQLTUNE.I have created the tuning task successfully with DBMS_SQLTUNE.create_tuning_task.But when i execute the tuning task with EXEC DBMS_SQLTUNE.execute_tuning_task() i got an error like
    SQL> EXEC DBMS_SQLTUNE.execute_tuning_task(task_name => 'rep_three');
    BEGIN DBMS_SQLTUNE.execute_tuning_task(task_name => 'rep_three'); END;
    ERROR at line 1:
    ORA-00081: address range [0x60000000000A7D70, 0x60000000000A7D74) is not
    readable
    ORA-00600: internal error code, arguments: [kesatmGetSqlStats:optCost], [], [],
    ORA-06512: at "SYS.PRVT_ADVISOR", line 1624
    ORA-06512: at "SYS.DBMS_ADVISOR", line 186
    ORA-06512: at "SYS.DBMS_SQLTUNE", line 1008
    ORA-06512: at line 1The oracle version is Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - 64bi. The OS is HP-UX. The version is HP-UX B.11.23 U ia64.
    I tried to execute DBMS_SQLTUNE as DWH user.I have granted the advisor,DROP ANY SQL PROFILE,ALTER ANY SQL PROFILE,CREATE ANY SQL PROFILE privileges and DBA roles to the DWH user. The way i ran DBMS_SQLTUNE is, first i logged in as DWH user and i tried to execute the query for getting the SQL_ID for the query. For getting the SQL_ID i selected the SQL_ID column value for the DWH user session from v$session.I kept that query executing and meanwhile i opened another session as DWH user and created the tuning task as follows
    DECLARE
      l_sql_tune_task_id  VARCHAR2(100);
    BEGIN
      l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task (
                              sql_id      => 'b65fj39dkkb9v',
                              scope       => DBMS_SQLTUNE.scope_limited,
                              time_limit  => 3600,
                              task_name   => 'rep_three',
                              description => 'Report Tuning');
      DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id);
    END;
    /The creation of tuning task was successful.And i executed the tuning task as follows
    EXEC DBMS_SQLTUNE.execute_tuning_task(task_name => 'rep_three');The above mentioned errors came when i executed the tuning task.
    I am also adding the query which i have tried to tune
    select * from dwh.beneficiary_dim BEN_DIM,
                     (Select adr_dp_id,
                   adr_account_no,
                   ADR_ADDRESS_LINE_1 || ' ' ||
                   ADR_ADDRESS_LINE_2 || ' ' ||
                   ADR_ADDRESS_LINE_3 || ' ' ||
                   ADR_ADDRESS_LINE_4 as ADDRESS,
                   adr_pin_code,adr_phone_no,adr_fax_no
              from dwh.beneficiary_address_dim where adr_type_id = 1) PERMANENT_ADD_DIM,
           (Select adr_dp_id,
                   adr_account_no,
                   ADR_ADDRESS_LINE_1 || ' ' ||
                   ADR_ADDRESS_LINE_2 || ' ' ||
                   ADR_ADDRESS_LINE_3 || ' ' ||
                   ADR_ADDRESS_LINE_4 as ADDRESS,
                   adr_pin_code,adr_phone_no,adr_fax_no
              from dwh.beneficiary_address_dim where adr_type_id = 2) BANK_ADD_DIM,
           (Select adr_dp_id,
                   adr_account_no,
                   ADR_ADDRESS_LINE_1 || ' ' ||
                   ADR_ADDRESS_LINE_2 || ' ' ||
                   ADR_ADDRESS_LINE_3 || ' ' ||
                   ADR_ADDRESS_LINE_4 as ADDRESS,
                   adr_pin_code,adr_phone_no,adr_fax_no
              from dwh.beneficiary_address_dim where adr_type_id = 3) NOM_GUARDIAN_ADD_DIM,
           (Select adr_dp_id,
                   adr_account_no,
                   ADR_ADDRESS_LINE_1 || ' ' ||
                   ADR_ADDRESS_LINE_2 || ' ' ||
                   ADR_ADDRESS_LINE_3 || ' ' ||
                   ADR_ADDRESS_LINE_4 as ADDRESS,
                   adr_pin_code,adr_phone_no,adr_fax_no
              from dwh.beneficiary_address_dim where adr_type_id = 4) CORR_ADD_DIM,
           (Select adr_dp_id,
                   adr_account_no,
                   ADR_ADDRESS_LINE_1 || ' ' ||
                   ADR_ADDRESS_LINE_2 || ' ' ||
                   ADR_ADDRESS_LINE_3 || ' ' ||
                   ADR_ADDRESS_LINE_4 as ADDRESS,
                   adr_pin_code,adr_phone_no,adr_fax_no
              from dwh.beneficiary_address_dim where adr_type_id = 6) MINOR_ADDRESS,
                     (Select rp.requestid as requestid,
    decode(rp.value,'ALL','ALL','','ALL',decode(substr(rp.value,1,instr(rp.value,'|',1,1)-1),'','ALL',substr(rp.value,1,instr(rp.value,'|',1,1)-1))) as Name,
    decode(rp.value,'ALL','ALL','','ALL',decode(substr(rp.value,(instr(rp.value,'|',1,1)+1),((instr(rp.value,'|',1,2))-(instr(rp.value,'|',1,1)+1))),'','ALL',substr(rp.value,(instr(rp.value,'|',1,1)+1),((instr(rp.value,'|',1,2))-(instr(rp.value,'|',1,1)+1))))) as Address,
    decode(rp.value,'ALL','ALL','','ALL',decode(substr(rp.value,(instr(rp.value,'|',1,2)+1)),'','ALL',substr(rp.value,(instr(rp.value,'|',1,2)+1)))) as PAN
                      from disadmin.requestparameters rp, disadmin.requestparameters rps, disadmin.reportrequests rr
                     where rp.parameterid = 'CNAS_PARAM_VALUE'   
                       and rr.status = 'A'
                       and rp.requestid = rr.id
                       and rp.id = rps.id) P_PARAM_VALUE,
                     (Select rp.requestid as requestid, rp.value as Type
                        from disadmin.requestparameters rp, disadmin.reportrequests rr
                       where rp.parameterid = 'CNAS_NAME_TYPE'
                         and rr.status = 'A'
                         and rp.requestid = rr.id)  P_NAME_TYPE,
                     (Select rp.requestid as requestid, rp.value as Addtype
                        from disadmin.requestparameters rp, disadmin.reportrequests rr
                       where rp.parameterid = 'CNAS_ADDRESS_TYPE'
                         and rr.status = 'A'
                         and rp.requestid = rr.id) P_ADDRESS_TYPE    
       where ( 1= case when P_NAME_TYPE.Type = 'F' then
                   case when BEN_DIM.BDM_FIRST_HOLDER_NAME like DECODE(P_PARAM_VALUE.Name,'ALL','%'||BEN_DIM.BDM_FIRST_HOLDER_NAME||'%','%'||P_PARAM_VALUE.Name||'%')
                             or BEN_DIM.BDM_FIRST_HOLDER_SURNAME like DECODE(P_PARAM_VALUE.Name,'ALL','%'||BEN_DIM.BDM_FIRST_HOLDER_SURNAME||'%','%'||P_PARAM_VALUE.Name||'%')
                        then 1
                   else null end
                 else            
                   case when P_NAME_TYPE.Type = 'ALL' then
                     case when (BEN_DIM.BDM_FIRST_HOLDER_NAME like DECODE(P_PARAM_VALUE.Name,'ALL','%'||BEN_DIM.BDM_FIRST_HOLDER_NAME||'%','%'||P_PARAM_VALUE.Name||'%')
                                or BEN_DIM.BDM_FIRST_HOLDER_SURNAME like DECODE(P_PARAM_VALUE.Name,'ALL','%'||BEN_DIM.BDM_FIRST_HOLDER_SURNAME||'%','%'||P_PARAM_VALUE.Name||'%'))
                                and BEN_DIM.BDM_SECOND_HOLDER_NAME like DECODE(P_PARAM_VALUE.Name,'ALL','%'||BEN_DIM.BDM_SECOND_HOLDER_NAME||'%','%'||P_PARAM_VALUE.Name||'%')
                                and BEN_DIM.BDM_THIRD_HOLDER_NAME like DECODE(P_PARAM_VALUE.Name,'ALL','%'||BEN_DIM.BDM_THIRD_HOLDER_NAME||'%','%'||P_PARAM_VALUE.Name||'%')
                          then 1
                     else null end
                   else null end 
                 end )                    
         and BEN_DIM.BDM_IT_PAN like DECODE(P_PARAM_VALUE.PAN,'ALL','%'||BEN_DIM.BDM_IT_PAN||'%','%'||P_PARAM_VALUE.PAN||'%')
         and (1 = case when P_ADDRESS_TYPE.ADDTYPE = 1 then
                         case when instr(PERMANENT_ADD_DIM.ADDRESS, DECODE(P_PARAM_VALUE.ADDRESS,'ALL',PERMANENT_ADD_DIM.ADDRESS, P_PARAM_VALUE.ADDRESS)) <> 0
                              then 1
                         else null end
                       when P_ADDRESS_TYPE.ADDTYPE = 3 then
                         case when instr(NOM_GUARDIAN_ADD_DIM.ADDRESS, DECODE(P_PARAM_VALUE.ADDRESS,'ALL',NOM_GUARDIAN_ADD_DIM.ADDRESS, P_PARAM_VALUE.ADDRESS)) <> 0 
                           then 1
                         else null end 
                       when P_ADDRESS_TYPE.ADDTYPE = 4 then
                         case when instr(CORR_ADD_DIM.ADDRESS, DECODE(P_PARAM_VALUE.ADDRESS,'ALL',CORR_ADD_DIM.ADDRESS, P_PARAM_VALUE.ADDRESS)) <> 0 
                           then 1
                         else null end
                       when P_ADDRESS_TYPE.ADDTYPE = 6 then
                         case when instr(MINOR_ADDRESS.ADDRESS, DECODE(P_PARAM_VALUE.ADDRESS,'ALL',MINOR_ADDRESS.ADDRESS, P_PARAM_VALUE.ADDRESS)) <> 0 
                           then 1
                         else null end 
                  else null end );The above query also tries to access some tables from another user DISADMIN. Could you please help me in solving this problem while using SQL Tuning Advisor ? I am the only DBA here.

    will the rows really be updated just by using the package?Considering DMLs
    SQL> select * from test
      2  /
            NO
             1
             2
    SQL> ed
    Wrote file afiedt.buf
      1  DECLARE
      2   my_task_name VARCHAR2(30);
      3  my_sqltext   CLOB;
      4  BEGIN
      5  my_sqltext := 'insert into test values (3)';
      6  my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(
      7   sql_text    => my_sqltext,
      8  task_name   => 'my_sql_tuning_task');
      9* end;
    SQL> /
    PL/SQL procedure successfully completed.
    SQL> BEGIN
      2  DBMS_SQLTUNE.EXECUTE_TUNING_TASK( task_name => 'my_sql_tuning_task' );
      3  END;
      4  /
    PL/SQL procedure successfully completed.
    SQL> select * from test
      2  /
            NO
             1
             2
    SQL> SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK( 'my_sql_tuning_task')
      2    FROM DUAL;
    DBMS_SQLTUNE.REPORT_TUNING_TASK('MY_SQL_TUNING_TASK')
    GENERAL INFORMATION SECTION
    Tuning Task Name   : my_sql_tuning_task
    Tuning Task Owner  : TEST
    Scope              : COMPREHENSIVE
    Time Limit(seconds): 1800
    Completion Status  : COMPLETED
    Started at         : 03/27/2008 05:16:14
    Completed at       : 03/27/2008 05:16:16
    DBMS_SQLTUNE.REPORT_TUNING_TASK('MY_SQL_TUNING_TASK')
    Schema Name: TEST
    SQL ID     : gwkmgmyj9824t
    SQL Text   : insert into test values (3)
    There are no recommendations to improve the statement.
    -------------------------------------------------------------------------------Adith

  • CPU intensive query

    Hi,
    on 11g R2 64 bits on Win 2008 R2, when query runs CPU is used at 100%.
    AWR says :
    Event                                 Waits     Time(s)   (ms)   time Wait Class
    DB CPU                                            2,805          80.1
    db file sequential read               5,189         100     19    2.8 User I/O
    direct path read                      1,633           9      5     .2 User I/O
    log file sync                         1,245           7      5     .2 Commit
    db file scattered read                   73           2     24     .0 User I/O
    Host CPU (CPUs:    1 Cores:    1 Sockets:    1)And SQL Tunning job, when ran said :
    DBMS_SQLTUNE.REPORT_TUNING_TASK('MY_SQL_TUNING_TASK')
    Schema Name: userSQL ID     : ad7t7wmzzdfmu
    SQL Text   : SELECT * FROM VW_I
    There are no recommendations to improve the statement.Is the CPU utilization to 100% generated from an Oracle process ?
    Is there any utility in Win 2008 or Oracle to check the threads from the Windows side ?
    Thank you.

    Thanks to all.
    my explain plan is too large and we are limited to 30000 characthers. What can I do ? Here is a part
    | Id  | Operation                          | Name               | Rows  | Bytes | Cost (%CPU)|                                             
    |   0 | SELECT STATEMENT                   |                    |     1 |   255 |  1009   (0)|                                             
    |   1 |  TABLE ACCESS BY INDEX ROWID       | PS_NAME_PREFIX_LNG |     1 |    12 |     1   (0)|                                             
    |*  2 |   INDEX UNIQUE SCAN                | PS_NAME_PREFIX_LNG |     1 |       |     0   (0)|                                             
    |   3 |  TABLE ACCESS BY INDEX ROWID       | PS_PERSONAL_PHONE  |     1 |    29 |     2   (0)|                                             
    |*  4 |   INDEX UNIQUE SCAN                | PS_PERSONAL_PHONE  |     1 |       |     1   (0)|                                             
    |   5 |  TABLE ACCESS BY INDEX ROWID       | PS_EMAIL_ADDRESSES |     1 |    37 |     2   (0)|                                             
    |*  6 |   INDEX UNIQUE SCAN                | PS_EMAIL_ADDRESSES |     1 |       |     1   (0)|                                             
    |   7 |  SORT UNIQUE                       |                    |     1 |    24 |     8  (13)|                                             
    |   8 |   TABLE ACCESS BY INDEX ROWID      | PS_WKF_CNT_TYPE    |     1 |    24 |     3   (0)|                                             
    |*  9 |    INDEX RANGE SCAN                | PS_WKF_CNT_TYPE    |     1 |       |     2   (0)|                                             
    |  10 |     SORT AGGREGATE                 |                    |     1 |    20 |            |                                             
    |* 11 |      INDEX RANGE SCAN              | PS_WKF_CNT_TYPE    |     1 |    20 |     2   (0)|                                             
    |* 12 |  INDEX RANGE SCAN                  | PS_WKF_CNT_TYPE    |     1 |    20 |     2   (0)|                                             
    |  13 |   SORT AGGREGATE                   |                    |     1 |    20 |            |                                             
    |* 14 |    INDEX RANGE SCAN                | PS_WKF_CNT_TYPE    |     1 |    20 |     2   (0)|                                             
    |* 15 |  TABLE ACCESS BY INDEX ROWID       | PS_DEPT_TBL        |     1 |    28 |     3   (0)|                                             
    |* 16 |   INDEX RANGE SCAN                 | PS4DEPT_TBL        |     1 |       |     2   (0)|                                             
    |  17 |    SORT AGGREGATE                  |                    |     1 |    21 |            |                                             
    |* 18 |     INDEX RANGE SCAN               | PS_DEPT_TBL        |     1 |    21 |     2   (0)|                                             
    |* 19 |  TABLE ACCESS BY INDEX ROWID       | PS_DEPT_TBL        |     1 |    28 |     3   (0)|                                             
    |* 20 |   INDEX RANGE SCAN                 | PS4DEPT_TBL        |     1 |       |     2   (0)|                                             
    |  21 |    SORT AGGREGATE                  |                    |     1 |    21 |            |                                             
    |* 22 |     INDEX RANGE SCAN               | PS_DEPT_TBL        |     1 |    21 |     2   (0)|                                             
    |* 23 |  TABLE ACCESS BY INDEX ROWID       | PS_DEPT_TBL        |     1 |    28 |     3   (0)|                                             
    |* 24 |   INDEX RANGE SCAN                 | PS4DEPT_TBL        |     1 |       |     2   (0)|                                             
    |  25 |    SORT AGGREGATE                  |                    |     1 |    21 |            |                                             
    |* 26 |     INDEX RANGE SCAN               | PS_DEPT_TBL        |     1 |    21 |     2   (0)|                                             
    |* 27 |  TABLE ACCESS BY INDEX ROWID       | PS_DEPT_TBL        |     1 |    28 |     3   (0)|                                             
    |* 28 |   INDEX RANGE SCAN                 | PS4DEPT_TBL        |     1 |       |     2   (0)|                                             
    |  29 |    SORT AGGREGATE                  |                    |     1 |    21 |            |                                             
    |* 30 |     INDEX RANGE SCAN               | PS_DEPT_TBL        |     1 |    21 |     2   (0)|                                             
    |  31 |  SORT AGGREGATE                    |                    |     1 |    28 |            |                                             
    |* 32 |   TABLE ACCESS BY INDEX ROWID      | PS_DEPT_TBL        |     1 |    28 |     8   (0)|                                             
    |* 33 |    INDEX RANGE SCAN                | PS_DEPT_TBL        |     1 |       |     7   (0)|                                             
    |  34 |     SORT AGGREGATE                 |                    |     1 |    21 |            |                                             
    |* 35 |      INDEX RANGE SCAN              | PS_DEPT_TBL        |     1 |    21 |     2   (0)|                                             
    |* 36 |  TABLE ACCESS BY INDEX ROWID       | PS_DEPT_TBL        |     1 |    28 |     3   (0)|                                             
    |* 37 |   INDEX RANGE SCAN                 | PS4DEPT_TBL        |     1 |       |     2   (0)|                                             
    |  38 |    SORT AGGREGATE                  |                    |     1 |    21 |            |                                             
    |* 39 |     INDEX RANGE SCAN               | PS_DEPT_TBL        |     1 |    21 |     2   (0)|                                             
    |* 40 |  FILTER                            |                    |       |       |            |                                             
    |  41 |   NESTED LOOPS                     |                    |     1 |   255 |    77   (0)|                                             
    |  42 |    NESTED LOOPS                    |                    |     1 |   218 |    76   (0)|                                             
    |  43 |     NESTED LOOPS                   |                    |     1 |   192 |    74   (0)|                                             
    |  44 |      MERGE JOIN CARTESIAN          |                    |     1 |   101 |    72   (0)|                                             
    |  45 |       NESTED LOOPS                 |                    |     1 |    75 |    69   (0)|                                             
    |  46 |        NESTED LOOPS                |                    |     3 |   165 |    63   (0)|                                             
    |  47 |         TABLE ACCESS BY INDEX ROWID| PS_NAMES           |     3 |   120 |    60   (0)|                                             
    |* 48 |          INDEX SKIP SCAN           | PSANAMES           |     3 |       |    57   (0)|                                             
    |  49 |           SORT AGGREGATE           |                    |     1 |    19 |            |                                             
    |* 50 |            INDEX RANGE SCAN        | PS_NAMES           |     1 |    19 |     2   (0)|                                             
    |  51 |         TABLE ACCESS BY INDEX ROWID| PS_PERSON          |     1 |    15 |     1   (0)|                                             
    |* 52 |          INDEX UNIQUE SCAN         | PS_PERSON          |     1 |       |     0   (0)|                                             
    |  53 |        TABLE ACCESS BY INDEX ROWID | PS_PERS_DATA_EFFDT |     1 |    20 |     2   (0)|                                             
    |* 54 |         INDEX RANGE SCAN           | PS_PERS_DATA_EFFDT |     1 |       |     1   (0)|                                             
    |  55 |          SORT AGGREGATE            |                    |     1 |    15 |            |                                             
    |* 56 |           INDEX RANGE SCAN         | PS_PERS_DATA_EFFDT |     1 |    15 |     2   (0)|                                             
    |  57 |       BUFFER SORT                  |                    |  1013 | 26338 |    70   (0)|                                             
    |  58 |        INDEX FAST FULL SCAN        | PS4DEPT_TBL        |  1013 | 26338 |     3   (0)|                                             
    |* 59 |      TABLE ACCESS BY INDEX ROWID   | PS_JOB             |     1 |    91 |     2   (0)|                                             
    |* 60 |       INDEX RANGE SCAN             | PS1JOB             |     1 |       |     1   (0)|                                             
    |* 61 |        TABLE ACCESS BY INDEX ROWID | PS_JOB             |     1 |    26 |     3   (0)|                                             
    |* 62 |         INDEX RANGE SCAN           | PSAJOB             |     1 |       |     2   (0)|                                             
    |  63 |          SORT AGGREGATE            |                    |     1 |    17 |            |                                             
    |* 64 |           INDEX RANGE SCAN         | PSAJOB             |     4 |    68 |     2   (0)|                                             
    |  65 |          SORT AGGREGATE            |                    |     1 |    20 |            |                                             
    |* 66 |           INDEX RANGE SCAN         | PSAJOB             |     1 |    20 |     2   (0)|                                             
    |  67 |        SORT AGGREGATE              |                    |     1 |    17 |            |                                             
    |* 68 |         INDEX RANGE SCAN           | PSAJOB             |     4 |    68 |     2   (0)|                                             
    |  69 |        SORT AGGREGATE              |                    |     1 |    20 |            |                                             
    |* 70 |         INDEX RANGE SCAN           | PSAJOB             |     1 |    20 |     2   (0)|                                             
    |  71 |     TABLE ACCESS BY INDEX ROWID    | PS_JOBCODE_TBL     |     1 |    26 |     2   (0)|                                             
    |* 72 |      INDEX RANGE SCAN              | PS_JOBCODE_TBL     |     1 |       |     1   (0)|                                             
    |  73 |       SORT AGGREGATE               |                    |     1 |    20 |            |                                             
    |* 74 |        INDEX RANGE SCAN            | PS_JOBCODE_TBL     |     1 |    20 |     2   (0)|                                             
    |  75 |    TABLE ACCESS BY INDEX ROWID     | PS_JOB_CL_I        |     1 |    37 |     1   (0)|                                             
    |* 76 |     INDEX UNIQUE SCAN              | PS_JOB_CL_I        |     1 |       |     0   (0)|                                             
    |  77 |   SORT AGGREGATE                   |                    |     1 |    21 |            |                                             
    |* 78 |    INDEX RANGE SCAN                | PS_DEPT_TBL        |     1 |    21 |     2   (0)|                                             
    Predicate Information (identified by operation id):                                                                                        
       2 - access("L"."NAME_PREFIX"=:B1 AND "L"."LANGUAGE_CD"='FRA')                                                                           
       4 - access("F"."EMPLID"=:B1 AND "F"."PHONE_TYPE"='BUSN')                                                                                
       6 - access("G"."EMPLID"=:B1 AND "G"."E_ADDR_TYPE"='BUSN')                                                                               
       9 - access("H"."EMPLID"=:B1 AND "H"."CONTRACT_NUM"=:B2)                                                                                 
           filter(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))= (SELECT                                                                           
                  MAX(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))) FROM SYSADM."PS_WKF_CNT_TYPE" "W"                                             
                  WHERE SYS_OP_DESCEND("EFFDT") IS NOT NULL AND                                                                                
                  SYS_OP_DESCEND("EFFDT")>=SYS_OP_DESCEND(TO_DATE(TO_CHAR(SYSDATE@!,'YYYY-MM-DD'),'YYYY-                                       
                  MM-DD')) AND "W"."CONTRACT_NUM"=:B1 AND "W"."EMPLID"=:B2 AND                                                                 
                  SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))<=TO_DATE(TO_CHAR(SYSDATE@!,'YYYY-MM-DD'),'YY                                       
                  YY-MM-DD')))                                                                                                                 
      11 - access("W"."EMPLID"=:B1 AND "W"."CONTRACT_NUM"=:B2 AND                                                                              
                  SYS_OP_DESCEND("EFFDT")>=SYS_OP_DESCEND(TO_DATE(TO_CHAR(SYSDATE@!,'YYYY-MM-DD'),'YYYY-                                       
                  MM-DD')) AND SYS_OP_DESCEND("EFFDT") IS NOT NULL)                                                                            
           filter(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))<=TO_DATE(TO_CHAR(SYSDATE@!,'YY                                                     
                  YY-MM-DD'),'YYYY-MM-DD'))                                                                                                    
      12 - access("H"."EMPLID"=:B1 AND "H"."CONTRACT_NUM"=:B2)                                                                                 
           filter(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))= (SELECT                                                                           
                  MAX(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))) FROM SYSADM."PS_WKF_CNT_TYPE" "W"                                             
                  WHERE SYS_OP_DESCEND("EFFDT") IS NOT NULL AND                                                                                
                  SYS_OP_DESCEND("EFFDT")>=SYS_OP_DESCEND(TO_DATE(TO_CHAR(SYSDATE@!,'YYYY-MM-DD'),'YYYY-                                       
                  MM-DD')) AND "W"."CONTRACT_NUM"=:B1 AND "W"."EMPLID"=:B2 AND                                                                 
                  SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))<=TO_DATE(TO_CHAR(SYSDATE@!,'YYYY-MM-DD'),'YY                                       
                  YY-MM-DD')))                                                                                                                 
      14 - access("W"."EMPLID"=:B1 AND "W"."CONTRACT_NUM"=:B2 AND                                                                              
                  SYS_OP_DESCEND("EFFDT")>=SYS_OP_DESCEND(TO_DATE(TO_CHAR(SYSDATE@!,'YYYY-MM-DD'),'YYYY-                                       
                  MM-DD')) AND SYS_OP_DESCEND("EFFDT") IS NOT NULL)                                                                            
           filter(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))<=TO_DATE(TO_CHAR(SYSDATE@!,'YY                                                     
                  YY-MM-DD'),'YYYY-MM-DD'))                                                                                                    
      15 - filter("DEPT"."EFF_STATUS"='A')                                                                                                     
      16 - access("DEPT"."MANAGER_ID"=:B1 AND "DEPT"."SETID"='SHARE' AND                                                                       
                  "DEPT"."DEPTID"='F0100R')                                                                                                    
           filter(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))= (SELECT                                                                           
                  MAX(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))) FROM SYSADM."PS_DEPT_TBL" "DEPT1"                                             
                  WHERE "DEPT1"."DEPTID"=:B1 AND "DEPT1"."SETID"=:B2))                                                                         
      18 - access("DEPT1"."SETID"=:B1 AND "DEPT1"."DEPTID"=:B2)                                                                                
      19 - filter("DEPT"."EFF_STATUS"='A')                                                                                                     
      20 - access("DEPT"."MANAGER_ID"=:B1 AND "DEPT"."SETID"='SHARE')                                                                          
           filter(SUBSTR("DEPT"."DEPTID",4,1)='0' AND (SUBSTR("DEPT"."DEPTID",1,1)='R' OR                                                      
                  SUBSTR("DEPT"."DEPTID",1,1)='C') AND SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))=                                              
                  (SELECT MAX(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))) FROM SYSADM."PS_DEPT_TBL"                                             
                  "DEPT1" WHERE "DEPT1"."DEPTID"=:B1 AND "DEPT1"."SETID"=:B2))                                                                 
      22 - access("DEPT1"."SETID"=:B1 AND "DEPT1"."DEPTID"=:B2)                                                                                
      23 - filter("DEPT"."EFF_STATUS"='A')                                                                                                     
      24 - access("DEPT"."MANAGER_ID"=:B1 AND "DEPT"."SETID"='SHARE')                                                                          
           filter(SUBSTR("DEPT"."DEPTID",1,1)='F' AND SUBSTR("DEPT"."DEPTID",4,1)='0' AND                                                      
                  "DEPT"."DEPTID"<>'F0100R' AND SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))= (SELECT                                             
                  MAX(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))) FROM SYSADM."PS_DEPT_TBL" "DEPT1"                                             
                  WHERE "DEPT1"."DEPTID"=:B1 AND "DEPT1"."SETID"=:B2))                                                                         
      26 - access("DEPT1"."SETID"=:B1 AND "DEPT1"."DEPTID"=:B2)                                                                                
      27 - filter("DEPT"."EFF_STATUS"='A')                                                                                                     
      28 - access("DEPT"."MANAGER_ID"=:B1 AND "DEPT"."SETID"='SHARE')                                                                          
           filter(SUBSTR("DEPT"."DEPTID",4,1)<>'0' AND                                                                                         
                  SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))= (SELECT                                                                           
                  MAX(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))) FROM SYSADM."PS_DEPT_TBL" "DEPT1"                                             
                  WHERE "DEPT1"."DEPTID"=:B1 AND "DEPT1"."SETID"=:B2))                                                                         
      30 - access("DEPT1"."SETID"=:B1 AND "DEPT1"."DEPTID"=:B2)                                                                                
      32 - filter("DEPTM"."EFF_STATUS"='A')                                                                                                    
      33 - access("DEPTM"."SETID"='SHARE')                                                                                                     
           filter(SUBSTR("DEPTM"."DEPTID",4,1)='0' AND                                                                                         
                  SUBSTR("DEPTM"."DEPTID",1,3)=SUBSTR(:B1,1,3) AND                                                                             
                  SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))= (SELECT                                                                           
                  MAX(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))) FROM SYSADM."PS_DEPT_TBL" "DEPT1"                                             
                  WHERE "DEPT1"."DEPTID"=:B2 AND "DEPT1"."SETID"=:B3))                                                                         
      35 - access("DEPT1"."SETID"=:B1 AND "DEPT1"."DEPTID"=:B2)                                                                                
      36 - filter("DEPT"."EFF_STATUS"='A')                                                                                                     
      37 - access("DEPT"."MANAGER_ID"=:B1 AND "DEPT"."SETID"='SHARE')                                                                          
           filter(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))= (SELECT                                                                           
                  MAX(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))) FROM SYSADM."PS_DEPT_TBL" "DEPT1"                                             
                  WHERE "DEPT1"."DEPTID"=:B1 AND "DEPT1"."SETID"=:B2))                                                                         
      39 - access("DEPT1"."SETID"=:B1 AND "DEPT1"."DEPTID"=:B2)                                                                                
      40 - filter(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))= (SELECT                                                                           
                  MAX(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))) FROM SYSADM."PS_DEPT_TBL" "Y" WHERE                                           
                  SYS_OP_DESCEND("EFFDT") IS NOT NULL AND SYS_OP_DESCEND("EFFDT")>=SYS_OP_DESCEND(TO_DAT                                       
                  E(TO_CHAR(SYSDATE@!,'YYYY-MM-DD'),'YYYY-MM-DD')) AND "Y"."DEPTID"=:B1 AND                                                    
                  "Y"."SETID"=:B2 AND SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))<=TO_DATE(TO_CHAR(SYSDATE                                       
                  @!,'YYYY-MM-DD'),'YYYY-MM-DD')))                                                                                             
      48 - access("C"."NAME_TYPE"='PRI')                                                                                                       
           filter("C"."NAME_TYPE"='PRI' AND "C"."EFFDT"= (SELECT                                                                               
                  MAX(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))) FROM SYSADM."PS_NAMES" "J" WHERE                                              
                  SYS_OP_DESCEND("EFFDT") IS NOT NULL AND SYS_OP_DESCEND("EFFDT")>=SYS_OP_DESCEND(TO_DAT                                       
                  E(TO_CHAR(SYSDATE@!,'YYYY-MM-DD'),'YYYY-MM-DD')) AND "J"."NAME_TYPE"=:B1 AND                                                 
                  "J"."EMPLID"=:B2 AND SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))<=TO_DATE(TO_CHAR(SYSDAT                                       
                  E@!,'YYYY-MM-DD'),'YYYY-MM-DD')))                                                                                            
      50 - access("J"."EMPLID"=:B1 AND "J"."NAME_TYPE"=:B2 AND                                                                                 
                  SYS_OP_DESCEND("EFFDT")>=SYS_OP_DESCEND(TO_DATE(TO_CHAR(SYSDATE@!,'YYYY-MM-DD'),'YYYY-                                       
                  MM-DD')) AND SYS_OP_DESCEND("EFFDT") IS NOT NULL)                                                                            
           filter(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))<=TO_DATE(TO_CHAR(SYSDATE@!,'YY                                                     
                  YY-MM-DD'),'YYYY-MM-DD'))                                                                                                    
      52 - access("C"."EMPLID"="D"."EMPLID")                                                                                                   
      54 - access("D"."EMPLID"="E"."EMPLID")                                                                                                   
           filter(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))= (SELECT                                                                           
                  MAX(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))) FROM SYSADM."PS_PERS_DATA_EFFDT" "S"                                          
                  WHERE SYS_OP_DESCEND("EFFDT") IS NOT NULL AND                                                                                
                  SYS_OP_DESCEND("EFFDT")>=SYS_OP_DESCEND(TO_DATE(TO_CHAR(SYSDATE@!,'YYYY-MM-DD'),'YYYY-                                       
                  MM-DD')) AND "S"."EMPLID"=:B1 AND SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))<=TO_DATE(T                                       
                  O_CHAR(SYSDATE@!,'YYYY-MM-DD'),'YYYY-MM-DD')))                                                                               
      56 - access("S"."EMPLID"=:B1 AND SYS_OP_DESCEND("EFFDT")>=SYS_OP_DESCEND(TO_DATE(TO_                                                     
                  CHAR(SYSDATE@!,'YYYY-MM-DD'),'YYYY-MM-DD')) AND SYS_OP_DESCEND("EFFDT") IS NOT NULL)                                         
           filter(SYS_OP_UNDESCEND(SYS_OP_DESCEND("EFFDT"))<=TO_DATE(TO_CHAR(SYSDATE@!,'YY                                                     
                  YY-MM-DD'),'YYYY-MM-DD'))                                                                                                    
       - 'PLAN_TABLE' is old version                                                                                                           

  • Question Regarding SQL logic error!

    Hello everyone,
    I get the following error when executing an Informatica mapping with teh following SQL in the Source Qualifier.
    error - OR- 00936: missing expression.
    Can anyone help please!
    SELECT
    PS_CUSTOMER.SETID
    , PS_CUSTOMER.CUST_ID
    , PS_CUSTOMER.CUST_STATUS
    , PS_CUSTOMER.ADD_DT
    , PS_CUSTOMER.NAME1
    , PS_CUSTOMER.TAXPAYER_ID
    , PS_CUSTOMER.WEB_URL
    , PS_CUSTOMER.LAST_MAINT_OPRID
    , PS_CUSTOMER.DATE_LAST_MAINT
    , PS_CUST_SIC_CODES.SIC_CD_QUAL
    , PS_CUST_SIC_CODES.SIC_CODE
    , PS_CUST_CGRP_LNK.CUST_GRP_TYPE
    , PS_CUST_CGRP_LNK.CUSTOMER_GROUP
    , PS_CUST_CGRP_LNK.LASTUPDDTTM
    , PS_CUST_ID_NBRS.STD_ID_NUM
    , PS_CUSTOMER.SUBCUST_QUAL1
    FROM PS_CUSTOMER
    select SIC1.SETID, SIC1.CUST_ID, MAX(SIC1.SIC_CODE) SIC_CODE, SIC1.SIC_CD_QUAL
    from PS_CUST_SIC_CODES SIC1
    where SIC1.SIC_CD_QUAL =
    ( select MAX(SIC_CD_QUAL)
    from PS_CUST_SIC_CODES SIC2
    where SIC2.CUST_ID = SIC1.CUST_ID
    and SIC2.SETID = SIC1.SETID
    group by SETID, CUST_ID, SIC1.SIC_CD_QUAL
    ) PS_CUST_SIC_CODES
    select A.CUST_ID, A.SETID, A.CUST_GRP_TYPE
    , MAX(A.CUSTOMER_GROUP) CUSTOMER_GROUP, A.LASTUPDDTTM
    from PS_CUST_CGRP_LNK A
    where A.CUST_GRP_TYPE =
    SELECT MAX(CUST_GRP_TYPE)
    FROM PS_CUST_CGRP_LNK B
    WHERE A.CUST_ID = B.CUST_ID
    AND A.SETID = B.SETID
    AND A.LASTUPDDTTM = B.LASTUPDDTTM
    AND B.LASTUPDDTTM =
    SELECT MAX(LASTUPDDTTM)
    FROM PS_CUST_CGRP_LNK C
    WHERE C.CUST_ID = B.CUST_ID
    AND C.SETID = B.SETID
    GROUP BY CUST_ID, SETID, CUST_GRP_TYPE, LASTUPDDTTM
    ) PS_CUST_CGRP_LNK
    select SETID, CUST_ID, STD_ID_NUM
    from PS_CUST_ID_NBRS
    where STD_ID_NUM_QUAL = 'DNS'
    ) PS_CUST_ID_NBRS
    WHERE
    { PS_CUSTOMER
    LEFT OUTER JOIN
    PS_CUST_SIC_CODES ON
    PS_CUSTOMER.SETID = PS_CUST_SIC_CODES.SETID
    AND PS_CUSTOMER.CUST_ID = PS_CUST_SIC_CODES.CUST_ID
    LEFT OUTER JOIN
    PS_CUST_CGRP_LNK ON
    PS_CUSTOMER.SETID = PS_CUST_CGRP_LNK.SETID
    AND PS_CUSTOMER.CUST_ID = PS_CUST_CGRP_LNK.CUST_ID
    LEFT OUTER JOIN
    PS_CUST_ID_NBRS ON
    PS_CUSTOMER.SETID = PS_CUST_ID_NBRS.SETID
    AND PS_CUSTOMER.CUST_ID = PS_CUST_ID_NBRS.CUST_ID
    ORDER BY PS_CUSTOMER.CUST_ID , PS_CUSTOMER.SETID
    Thanks,
    Ajay.

    Kramer wrote:
    Hi
    So.. do we have to pay for the feature regarding sql tuning advisor?
    Can we use the dbms_sqltune package for free in oracle?
    No, you need the license. Please read below,
    http://download.oracle.com/docs/cd/E11882_01/license.112/e10594/options.htm#CIHFIHFG
    I `m doing below test on my Linux. I installed an oracle on it and only for study purpose so didn`t pay.
    As you can see. I got no output.
    SQL> exec dbms_sqltune.execute_tuning_task('TASK_1634');
    PL/SQL procedure successfully completed.
    SQL> select dbms_sqltune.report_tuning_task('TASK_1634') from dual;
    DBMS_SQLTUNE.REPORT_TUNING_TASK('TASK_1634')
    GENERAL INFORMATION SECTION
    Please read the below link to learn how to use the STA.
    http://download.oracle.com/docs/cd/E11882_01/server.112/e16638/sql_tune.htm
    HTH
    Aman....

  • Perf issue : wrong choice of index

    Hi,
    I'm on 10.2.0.4, AIX5.3
    Statistics have been gathered, they are up-to-date.
    I have a query which run for several hours, here is the query :
    UPDATE ps_AB_PDI_CN_TAO_TMP                              
    SET country_2char = COALESCE((                            
    SELECT c.COUNTRY_2CHAR                                    
    FROM PSOPRDEFN o                                          
    , PS_JOB j                                                
    , PS_LOCATION_TBL l                                       
    , PS_COUNTRY_TBL c                                        
    WHERE j.EMPLID = o.EMPLID                                 
    AND j.EFFDT = (SELECT MAX(j1.EFFDT)                                      
                   FROM PS_JOB j1                                            
                   WHERE j1.EMPLID = j.EMPLID                                
                   AND j1.EMPL_RCD = j.EMPL_RCD                              
                   AND j1.EFFDT <= sysdate)                                  
    AND j.EFFSEQ = (SELECT MAX(j2.EFFSEQ)                                     
                    FROM PS_JOB j2                                            
                    WHERE j2.EMPLID = j.EMPLID                                
                    AND j2.EMPL_RCD = j.EMPL_RCD                              
                    AND j2.EFFDT = j.EFFDT)                                   
    AND j.EMPL_RCD = (SELECT MAX(js.EMPL_RCD)                                   
                      FROM PS_JOB js                                            
                      WHERE js.EMPLID = j.EMPLID                                
                      AND js.EFFDT = (SELECT MAX(js1.EFFDT)                                     
                                      FROM PS_JOB js1                                           
                                      WHERE js1.EMPLID = js.EMPLID                              
                                      AND js1.EMPL_RCD = js.EMPL_RCD                            
                                      AND js1.EFFDT <= sysdate)                                 
                      AND js.EFFSEQ = (SELECT MAX(js2.EFFSEQ)                                    
                                       FROM PS_JOB js2                                           
                                       WHERE js2.EMPLID = js.EMPLID                              
                                       AND js2.EMPL_RCD = js.EMPL_RCD                            
                                       AND js2.EFFDT = js.EFFDT))                                
    AND l.SETID = j.SETID_LOCATION                            
    AND l.LOCATION = j.LOCATION                               
    AND l.EFFDT = (SELECT MAX(l1.EFFDT)                                      
                   FROM PS_LOCATION_TBL l1                                   
                   WHERE l1.SETID = l.SETID                                  
                   AND l1.LOCATION = l.LOCATION                              
                   AND l1.EFFDT <= j.EFFDT)                                  
    AND l.EFF_STATUS = 'A'                                    
    AND c.COUNTRY = l.COUNTRY                                 
    AND o.oprid = ps_AB_PDI_CN_TAO_TMP.OPRID),' ' )          
    WHERE COUNTRY_2CHAR = ' ';Explain plan is the following :
    | Id  | Operation                                      | Name                 | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | UPDATE STATEMENT                               |                      |     1 |    52 |    45   (3)| 00:00:01 |
    |   1 |  UPDATE                                        | PS_AB_PDI_CN_TAO_TMP |       |       |         |             |
    |*  2 |   TABLE ACCESS FULL                            | PS_AB_PDI_CN_TAO_TMP |     1 |    52 |    45   (3)| 00:00:01 |
    |   3 |   NESTED LOOPS                                 |                      |     1 |    80 |     8   (0)| 00:00:01 |
    |   4 |    NESTED LOOPS                                |                      |     1 |    73 |     7   (0)| 00:00:01 |
    |   5 |     NESTED LOOPS                               |                      |     1 |    48 |     5   (0)| 00:00:01 |
    |   6 |      TABLE ACCESS BY INDEX ROWID               | PSOPRDEFN            |     1 |    15 |     2   (0)| 00:00:01 |
    |*  7 |       INDEX UNIQUE SCAN                        | PS_PSOPRDEFN         |     1 |       |     1   (0)| 00:00:01 |
    |   8 |      TABLE ACCESS BY INDEX ROWID               | PS_JOB               |     1 |    33 |     3   (0)| 00:00:01 |
    |*  9 |       INDEX RANGE SCAN                         | PS_JOB               |     1 |       |     2   (0)| 00:00:01 |
    |  10 |        SORT AGGREGATE                          |                      |     1 |    19 |         |             |
    |  11 |         FIRST ROW                              |                      |    14 |   266 |     3   (0)| 00:00:01 |
    |* 12 |          INDEX RANGE SCAN (MIN/MAX)            | PSAJOB               |    14 |   266 |     3   (0)| 00:00:01 |
    |  13 |           SORT AGGREGATE                       |                      |     1 |    22 |         |             |
    |  14 |            FIRST ROW                           |                      |     1 |    22 |     3   (0)| 00:00:01 |
    |* 15 |             INDEX RANGE SCAN (MIN/MAX)         | PSAJOB               |     1 |    22 |     3   (0)| 00:00:01 |
    |  16 |              SORT AGGREGATE                    |                      |     1 |    22 |         |             |
    |  17 |               FIRST ROW                        |                      |     1 |    22 |     7  (58)| 00:00:01 |
    |* 18 |                INDEX FULL SCAN (MIN/MAX)       | PSIJOB               |     1 |    22 |     7  (58)| 00:00:01 |
    |  19 |                 SORT AGGREGATE                 |                      |     1 |    19 |         |             |
    |  20 |                  FIRST ROW                     |                      |    14 |   266 |     3   (0)| 00:00:01 |
    |* 21 |                   INDEX RANGE SCAN (MIN/MAX)   | PSAJOB               |    14 |   266 |     3   (0)| 00:00:01 |
    |  22 |                    SORT AGGREGATE              |                      |     1 |    22 |         |             |
    |  23 |                     FIRST ROW                  |                      |     1 |    22 |     3   (0)| 00:00:01 |
    |* 24 |                      INDEX RANGE SCAN (MIN/MAX)| PSAJOB               |     1 |    22 |     3   (0)| 00:00:01 |
    |* 25 |     TABLE ACCESS BY INDEX ROWID                | PS_LOCATION_TBL      |     1 |    25 |     2   (0)| 00:00:01 |
    |* 26 |      INDEX RANGE SCAN                          | PS_LOCATION_TBL      |     1 |       |     1   (0)| 00:00:01 |
    |  27 |       SORT AGGREGATE                           |                      |     1 |    19 |         |             |
    |  28 |        FIRST ROW                               |                      |     1 |    19 |     2   (0)| 00:00:01 |
    |* 29 |         INDEX RANGE SCAN (MIN/MAX)             | PS_LOCATION_TBL      |     1 |    19 |     2   (0)| 00:00:01 |
    |  30 |    TABLE ACCESS BY INDEX ROWID                 | PS_COUNTRY_TBL       |     1 |     7 |     1   (0)| 00:00:01 |
    |* 31 |     INDEX UNIQUE SCAN                          | PS_COUNTRY_TBL       |     1 |       |     0   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       2 - filter("COUNTRY_2CHAR"=' ')
       7 - access("O"."OPRID"=:B1)
       9 - access("J"."EMPLID"="O"."EMPLID")
           filter("J"."EFFDT"= (SELECT MAX("J1"."EFFDT") FROM "PS_JOB" "J1" WHERE "J1"."EFFDT"<=SYSDATE@! AND
                  "J1"."EMPL_RCD"=:B1 AND "J1"."EMPLID"=:B2) AND "J"."EFFSEQ"= (SELECT MAX("J2"."EFFSEQ") FROM "PS_JOB" "J2"
                  WHERE "J2"."EFFDT"=:B3 AND "J2"."EMPL_RCD"=:B4 AND "J2"."EMPLID"=:B5) AND "J"."EMPL_RCD"= (SELECT
                  MAX("JS"."EMPL_RCD") FROM "PS_JOB" "SYS_ALIAS_5" WHERE "JS"."EMPLID"=:B6 AND "JS"."EFFDT"= (SELECT
                  MAX("JS1"."EFFDT") FROM "PS_JOB" "JS1" WHERE "JS1"."EFFDT"<=SYSDATE@! AND "JS1"."EMPL_RCD"=:B7 AND
                  "JS1"."EMPLID"=:B8) AND "JS"."EFFSEQ"= (SELECT MAX("JS2"."EFFSEQ") FROM "PS_JOB" "JS2" WHERE "JS2"."EFFDT"=:B9
                  AND "JS2"."EMPL_RCD"=:B10 AND "JS2"."EMPLID"=:B11)))
      12 - access("J1"."EMPLID"=:B1 AND "J1"."EMPL_RCD"=:B2 AND "J1"."EFFDT"<=SYSDATE@!)
      15 - access("J2"."EMPLID"=:B1 AND "J2"."EMPL_RCD"=:B2 AND "J2"."EFFDT"=:B3)
      18 - filter("JS"."EMPLID"=:B1 AND "JS"."EFFDT"= (SELECT MAX("JS1"."EFFDT") FROM "PS_JOB" "JS1" WHERE
                  "JS1"."EFFDT"<=SYSDATE@! AND "JS1"."EMPL_RCD"=:B2 AND "JS1"."EMPLID"=:B3) AND "JS"."EFFSEQ"= (SELECT
                  MAX("JS2"."EFFSEQ") FROM "PS_JOB" "JS2" WHERE "JS2"."EFFDT"=:B4 AND "JS2"."EMPL_RCD"=:B5 AND
                  "JS2"."EMPLID"=:B6))
      21 - access("JS1"."EMPLID"=:B1 AND "JS1"."EMPL_RCD"=:B2 AND "JS1"."EFFDT"<=SYSDATE@!)
      24 - access("JS2"."EMPLID"=:B1 AND "JS2"."EMPL_RCD"=:B2 AND "JS2"."EFFDT"=:B3)
      25 - filter("L"."EFF_STATUS"='A')
      26 - access("L"."SETID"="J"."SETID_LOCATION" AND "L"."LOCATION"="J"."LOCATION")
           filter("L"."EFFDT"= (SELECT MAX("L1"."EFFDT") FROM "PS_LOCATION_TBL" "L1" WHERE "L1"."EFFDT"<=:B1 AND
                  "L1"."LOCATION"=:B2 AND "L1"."SETID"=:B3))
      29 - access("L1"."SETID"=:B1 AND "L1"."LOCATION"=:B2 AND "L1"."EFFDT"<=:B3)
      31 - access("C"."COUNTRY"="L"."COUNTRY")The line 18 looks weird, the index PSIJOB should not be used, but, according to the columns used in the query and the indexes definitions it should be PSAJOB instead.
    Here the indexes definition :
    PS_JOB     PSAJOB     EMPLID          1
    PS_JOB     PSAJOB     EMPL_RCD     2
    PS_JOB     PSAJOB     EFFDT          3
    PS_JOB     PSAJOB     EFFSEQ          4
    PS_JOB     PSAJOB     DEPTID          5
    PS_JOB     PSIJOB     EMPL_RCD     1
    PS_JOB     PSIJOB     REG_REGION     2
    PS_JOB     PSIJOB     PAYGROUP     3
    PS_JOB     PSIJOB     COMPANY          4
    PS_JOB     PSIJOB     EMPL_STATUS     5
    PS_JOB     PSIJOB     AB_APPR_STATUS     6
    PS_JOB     PSIJOB     EFFDT          7
    PS_JOB     PSIJOB     EFFSEQ          8
    PS_JOB     PSIJOB     EMPLID          9If I drop the PSIJOB index, PSAJOB is used and query run in few minutes.
    And here the explain plan if I drop this index :
    | Id  | Operation                                      | Name                 | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | UPDATE STATEMENT                               |                      |     1 |    52 |    45   (3)| 00:00:01 |
    |   1 |  UPDATE                                        | PS_AB_PDI_CN_TAO_TMP |       |       |         |             |
    |*  2 |   TABLE ACCESS FULL                            | PS_AB_PDI_CN_TAO_TMP |     1 |    52 |    45   (3)| 00:00:01 |
    |   3 |   NESTED LOOPS                                 |                      |     1 |    80 |     8   (0)| 00:00:01 |
    |   4 |    NESTED LOOPS                                |                      |     1 |    73 |     7   (0)| 00:00:01 |
    |   5 |     NESTED LOOPS                               |                      |     1 |    48 |     5   (0)| 00:00:01 |
    |   6 |      TABLE ACCESS BY INDEX ROWID               | PSOPRDEFN            |     1 |    15 |     2   (0)| 00:00:01 |
    |*  7 |       INDEX UNIQUE SCAN                        | PS_PSOPRDEFN         |     1 |       |     1   (0)| 00:00:01 |
    |   8 |      TABLE ACCESS BY INDEX ROWID               | PS_JOB               |     1 |    33 |     3   (0)| 00:00:01 |
    |*  9 |       INDEX RANGE SCAN                         | PS_JOB               |     1 |       |     2   (0)| 00:00:01 |
    |  10 |        SORT AGGREGATE                          |                      |     1 |    19 |         |             |
    |  11 |         FIRST ROW                              |                      |    14 |   266 |     3   (0)| 00:00:01 |
    |* 12 |          INDEX RANGE SCAN (MIN/MAX)            | PSAJOB               |    14 |   266 |     3   (0)| 00:00:01 |
    |  13 |           SORT AGGREGATE                       |                      |     1 |    22 |         |             |
    |  14 |            FIRST ROW                           |                      |     1 |    22 |     3   (0)| 00:00:01 |
    |* 15 |             INDEX RANGE SCAN (MIN/MAX)         | PSAJOB               |     1 |    22 |     3   (0)| 00:00:01 |
    |  16 |              SORT AGGREGATE                    |                      |     1 |    22 |         |             |
    |  17 |               FIRST ROW                        |                      |     1 |    22 |     7  (58)| 00:00:01 |
    |* 18 |                INDEX RANGE SCAN (MIN/MAX)      | PSAJOB               |     1 |    22 |     7  (58)| 00:00:01 |
    |  19 |                 SORT AGGREGATE                 |                      |     1 |    19 |         |             |
    |  20 |                  FIRST ROW                     |                      |    14 |   266 |     3   (0)| 00:00:01 |
    |* 21 |                   INDEX RANGE SCAN (MIN/MAX)   | PSAJOB               |    14 |   266 |     3   (0)| 00:00:01 |
    |  22 |                    SORT AGGREGATE              |                      |     1 |    22 |         |             |
    |  23 |                     FIRST ROW                  |                      |     1 |    22 |     3   (0)| 00:00:01 |
    |* 24 |                      INDEX RANGE SCAN (MIN/MAX)| PSAJOB               |     1 |    22 |     3   (0)| 00:00:01 |
    |* 25 |     TABLE ACCESS BY INDEX ROWID                | PS_LOCATION_TBL      |     1 |    25 |     2   (0)| 00:00:01 |
    |* 26 |      INDEX RANGE SCAN                          | PS_LOCATION_TBL      |     1 |       |     1   (0)| 00:00:01 |
    |  27 |       SORT AGGREGATE                           |                      |     1 |    19 |         |             |
    |  28 |        FIRST ROW                               |                      |     1 |    19 |     2   (0)| 00:00:01 |
    |* 29 |         INDEX RANGE SCAN (MIN/MAX)             | PS_LOCATION_TBL      |     1 |    19 |     2   (0)| 00:00:01 |
    |  30 |    TABLE ACCESS BY INDEX ROWID                 | PS_COUNTRY_TBL       |     1 |     7 |     1   (0)| 00:00:01 |
    |* 31 |     INDEX UNIQUE SCAN                          | PS_COUNTRY_TBL       |     1 |       |     0   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       2 - filter("COUNTRY_2CHAR"=' ')
       7 - access("O"."OPRID"=:B1)
       9 - access("J"."EMPLID"="O"."EMPLID")
           filter("J"."EFFDT"= (SELECT MAX("J1"."EFFDT") FROM "PS_JOB" "J1" WHERE "J1"."EFFDT"<=SYSDATE@! AND
                  "J1"."EMPL_RCD"=:B1 AND "J1"."EMPLID"=:B2) AND "J"."EFFSEQ"= (SELECT MAX("J2"."EFFSEQ") FROM "PS_JOB" "J2"
                  WHERE "J2"."EFFDT"=:B3 AND "J2"."EMPL_RCD"=:B4 AND "J2"."EMPLID"=:B5) AND "J"."EMPL_RCD"= (SELECT
                  MAX("JS"."EMPL_RCD") FROM "PS_JOB" "SYS_ALIAS_5" WHERE "JS"."EMPLID"=:B6 AND "JS"."EFFDT"= (SELECT
                  MAX("JS1"."EFFDT") FROM "PS_JOB" "JS1" WHERE "JS1"."EFFDT"<=SYSDATE@! AND "JS1"."EMPL_RCD"=:B7 AND
                  "JS1"."EMPLID"=:B8) AND "JS"."EFFSEQ"= (SELECT MAX("JS2"."EFFSEQ") FROM "PS_JOB" "JS2" WHERE "JS2"."EFFDT"=:B9
                  AND "JS2"."EMPL_RCD"=:B10 AND "JS2"."EMPLID"=:B11)))
      12 - access("J1"."EMPLID"=:B1 AND "J1"."EMPL_RCD"=:B2 AND "J1"."EFFDT"<=SYSDATE@!)
      15 - access("J2"."EMPLID"=:B1 AND "J2"."EMPL_RCD"=:B2 AND "J2"."EFFDT"=:B3)
      18 - access("JS"."EMPLID"=:B1)
           filter("JS"."EFFDT"= (SELECT MAX("JS1"."EFFDT") FROM "PS_JOB" "JS1" WHERE "JS1"."EFFDT"<=SYSDATE@! AND
                  "JS1"."EMPL_RCD"=:B1 AND "JS1"."EMPLID"=:B2) AND "JS"."EFFSEQ"= (SELECT MAX("JS2"."EFFSEQ") FROM "PS_JOB"
                  "JS2" WHERE "JS2"."EFFDT"=:B3 AND "JS2"."EMPL_RCD"=:B4 AND "JS2"."EMPLID"=:B5))
      21 - access("JS1"."EMPLID"=:B1 AND "JS1"."EMPL_RCD"=:B2 AND "JS1"."EFFDT"<=SYSDATE@!)
      24 - access("JS2"."EMPLID"=:B1 AND "JS2"."EMPL_RCD"=:B2 AND "JS2"."EFFDT"=:B3)
      25 - filter("L"."EFF_STATUS"='A')
      26 - access("L"."SETID"="J"."SETID_LOCATION" AND "L"."LOCATION"="J"."LOCATION")
           filter("L"."EFFDT"= (SELECT MAX("L1"."EFFDT") FROM "PS_LOCATION_TBL" "L1" WHERE "L1"."EFFDT"<=:B1 AND
                  "L1"."LOCATION"=:B2 AND "L1"."SETID"=:B3))
      29 - access("L1"."SETID"=:B1 AND "L1"."LOCATION"=:B2 AND "L1"."EFFDT"<=:B3)
      31 - access("C"."COUNTRY"="L"."COUNTRY")As you can see, the cost is exactly same for the line 18, however it is using a different index and scan.
    Do you have any explanation why Oracle is using PSIJOB instead of PSAJOB in first case ?
    How Oracle could prefer a INDEX FULL SCAN than INDEX RANGE SCAN (PS_JOB is a 3.3 millions rows table) ?
    Lastly, here an extract of the trace 10053 file when PSIJOB is used :
    QUERY BLOCK TEXT
    SELECT MAX(js.EMPL_RCD)
                      FROM PS_JOB js
                      WHERE js.EMPLID = j.EMPLID
                      AND js.EFFDT = (SELECT MAX(js1.EFFDT)
                                      FROM PS_JOB js1
                                      WHERE js1.EMPLID = js.EMPLID
                                      AND js1.EMPL_RCD = js.EMPL_RCD
                                      AND js1.EFFDT <= sysdate)
                      AND js.EFFSEQ = (SELECT MAX(js2.EFFSEQ)
                                       FROM PS_JOB js2
                                       WHERE js2.EMPLID = js.EMPLID
                                       AND js2.EMPL_RCD = js.EMPL_RCD
                                       AND js2.EFFDT = js.EFFDT)
    Index Stats::
      Index: PSAJOB  Col#: 1 2 3 4 5
        LVLS: 2  #LB: 16434  #DK: 3155830  LB/K: 1.00  DB/K: 1.00  CLUF: 3020072.00
      Index: PSIJOB  Col#: 2 72 23 22 10 229 3 4 1
        LVLS: 2  #LB: 21287  #DK: 3303072  LB/K: 1.00  DB/K: 1.00  CLUF: 3035026.00
    SINGLE TABLE ACCESS PATH
      BEGIN Single Table Cardinality Estimation
      Column (#1): EMPLID(VARCHAR2)
        AvgLen: 8.00 NDV: 116590 Nulls: 0 Density: 8.5771e-06
        Histogram: HtBal  #Bkts: 254  UncompBkts: 254  EndPtVals: 255
      Column (#3): EFFDT(DATE)
        AvgLen: 8.00 NDV: 2085 Nulls: 0 Density: 2.6799e-04 Min: 2415386 Max: 2455585
        Histogram: HtBal  #Bkts: 254  UncompBkts: 254  EndPtVals: 183
      Column (#2): EMPL_RCD(NUMBER)
        AvgLen: 3.00 NDV: 2 Nulls: 0 Density: 0.0026359 Min: 0 Max: 1
        Histogram: Freq  #Bkts: 2  UncompBkts: 5501  EndPtVals: 2
      Column (#4): EFFSEQ(NUMBER)
        AvgLen: 3.00 NDV: 5 Nulls: 0 Density: 9.0893e-05 Min: 0 Max: 4
        Histogram: Freq  #Bkts: 5  UncompBkts: 5501  EndPtVals: 5
      Table: PS_JOB  Alias: SYS_ALIAS_5
        Card: Original: 3282026  Rounded: 28  Computed: 28.15  Non Adjusted: 28.15
      END   Single Table Cardinality Estimation
      Access Path: index (index (FFS))
        Index: PSAJOB
        resc_io: 2848.00  resc_cpu: 653526199
        ix_sel: 0.0000e+00  ix_sel_with_filters: 1
      Access Path: index (FFS)
        Cost:  3306.55  Resp: 3306.55  Degree: 1
          Cost_io: 2848.00  Cost_cpu: 653526199
          Resp_io: 2848.00  Resp_cpu: 653526199
      Access Path: index (index (FFS))
        Index: PSIJOB
        resc_io: 3688.00  resc_cpu: 713117750
        ix_sel: 0.0000e+00  ix_sel_with_filters: 1
      Access Path: index (FFS)
        Cost:  4188.36  Resp: 4188.36  Degree: 1
          Cost_io: 3688.00  Cost_cpu: 713117750
          Resp_io: 3688.00  Resp_cpu: 713117750
      Access Path: index (Min/Max)
        Index: PSAJOB
        resc_io: 3.00  resc_cpu: 21564
        ix_sel: 0.035714  ix_sel_with_filters: 0.035714
        Cost: 7.13  Resp: 7.13  Degree: 1
      Access Path: index (Min/Max)
        Index: PSIJOB
        resc_io: 3.00  resc_cpu: 21564
        ix_sel: 0.035714  ix_sel_with_filters: 0.035714
        Cost: 7.13  Resp: 7.13  Degree: 1
      Best:: AccessPath: IndexRange  Index: PSIJOB
             Cost: 7.13  Degree: 1  Resp: 7.13  Card: 28.15  Bytes: 0
    Card adjusted,  Rounded Card: 1  Computed Card: 0.00
    ...Thanks.

    I don't know if you are interested, but I did the following test, and I get a new explain plan :
    SQL> alter session set optimizer_features_enable='9.2.0';
    Session altered.
    SQL>
    SQL> DECLARE
      2    my_task_name VARCHAR2(30);
      3    my_sqltext   CLOB;
      4  BEGIN
      5     my_sqltext := 'UPDATE ps_AB_PDI_CN_TAO_TMP
      6  SET country_2char = COALESCE((
      7  SELECT c.COUNTRY_2CHAR
      8  FROM PSOPRDEFN o
      9  , PS_JOB j
    10  , PS_LOCATION_TBL l
    11  , PS_COUNTRY_TBL c
    12  WHERE j.EMPLID = o.EMPLID
    13  AND j.EFFDT = (SELECT MAX(j1.EFFDT)
    14                 FROM PS_JOB j1
    15                 WHERE j1.EMPLID = j.EMPLID
    16                 AND j1.EMPL_RCD = j.EMPL_RCD
    17                 AND j1.EFFDT <= sysdate)
    18  AND j.EFFSEQ = (SELECT MAX(j2.EFFSEQ)
    19                  FROM PS_JOB j2
    20                  WHERE j2.EMPLID = j.EMPLID
    21                  AND j2.EMPL_RCD = j.EMPL_RCD
    22                  AND j2.EFFDT = j.EFFDT)
    23  AND j.EMPL_RCD = (SELECT MAX(js.EMPL_RCD)
    24                    FROM PS_JOB js
    25                    WHERE js.EMPLID = j.EMPLID
    26                    AND js.EFFDT = (SELECT MAX(js1.EFFDT)
    27                                    FROM PS_JOB js1
    28                                    WHERE js1.EMPLID = js.EMPLID
    29                                    AND js1.EMPL_RCD = js.EMPL_RCD
    30                                    AND js1.EFFDT <= sysdate)
    31                    AND js.EFFSEQ = (SELECT MAX(js2.EFFSEQ)
    32                                     FROM PS_JOB js2
    33                                     WHERE js2.EMPLID = js.EMPLID
    34                                     AND js2.EMPL_RCD = js.EMPL_RCD
    35                                     AND js2.EFFDT = js.EFFDT))
    36  AND l.SETID = j.SETID_LOCATION
    37  AND l.LOCATION = j.LOCATION
    38  AND l.EFFDT = (SELECT MAX(l1.EFFDT)
    39                 FROM PS_LOCATION_TBL l1
    40                 WHERE l1.SETID = l.SETID
    41                 AND l1.LOCATION = l.LOCATION
    42                 AND l1.EFFDT <= j.EFFDT)
    43  AND l.EFF_STATUS = ''A''
    44  AND c.COUNTRY = l.COUNTRY
    45  AND o.oprid = ps_AB_PDI_CN_TAO_TMP.OPRID),'' '' )
    46  WHERE COUNTRY_2CHAR = '' ''';
    47     my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(
    48             sql_text    => my_sqltext,
    49             user_name   => 'SYSADM',
    50             scope       => 'COMPREHENSIVE',
    51             time_limit  => 3600,
    52             task_name   => 'sysadm_avoid_psijob',
    53             description => 'Task to avoid PSIJOB index on update - PDI');
    54  END;
    55  /
    PL/SQL procedure successfully completed.
    SQL>
    SQL> BEGIN
      2      DBMS_SQLTUNE.EXECUTE_TUNING_TASK( task_name => 'sysadm_avoid_psijob');
      3  end;
      4  /
    PL/SQL procedure successfully completed.
    SQL>
    SQL> SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK( 'sysadm_avoid_psijob') from DUAL;
    GENERAL INFORMATION SECTION
    Tuning Task Name                  : sysadm_avoid_psijob
    Tuning Task Owner                 : SYSADM
    Scope                             : COMPREHENSIVE
    Time Limit(seconds)               : 3600
    Completion Status                 : COMPLETED
    Started at                        : 07/03/2009 20:35:36
    Completed at                      : 07/03/2009 20:38:40
    Number of Statistic Findings      : 1
    Number of SQL Profile Findings    : 1
    Schema Name: SYSADM
    SQL ID     : 7xcbcszgj1znc
    SQL Text   : UPDATE ps_AB_PDI_CN_TAO_TMP
                 SET country_2char = COALESCE((
                 SELECT c.COUNTRY_2CHAR
                 FROM PSOPRDEFN o
                 , PS_JOB j
                 , PS_LOCATION_TBL l
                 , PS_COUNTRY_TBL c
                 WHERE j.EMPLID = o.EMPLID
                 AND j.EFFDT = (SELECT MAX(j1.EFFDT)
                                FROM PS_JOB j1
                                WHERE j1.EMPLID = j.EMPLID
                                AND j1.EMPL_RCD = j.EMPL_RCD
                                AND j1.EFFDT <= sysdate)
                 AND j.EFFSEQ = (SELECT MAX(j2.EFFSEQ)
                                 FROM PS_JOB j2
                                 WHERE j2.EMPLID = j.EMPLID
                                 AND j2.EMPL_RCD = j.EMPL_RCD
                                 AND j2.EFFDT = j.EFFDT)
                 AND j.EMPL_RCD = (SELECT MAX(js.EMPL_RCD)
                                   FROM PS_JOB js
                                   WHERE js.EMPLID = j.EMPLID
                                   AND js.EFFDT = (SELECT MAX(js1.EFFDT)
                                                   FROM PS_JOB js1
                                                   WHERE js1.EMPLID = js.EMPLID
                                                   AND js1.EMPL_RCD = js.EMPL_RCD
                                                   AND js1.EFFDT <= sysdate)
                                   AND js.EFFSEQ = (SELECT MAX(js2.EFFSEQ)
                                                    FROM PS_JOB js2
                                                    WHERE js2.EMPLID = js.EMPLID
                                                    AND js2.EMPL_RCD =
                 js.EMPL_RCD
                                                    AND js2.EFFDT = js.EFFDT))
                 AND l.SETID = j.SETID_LOCATION
                 AND l.LOCATION = j.LOCATION
                 AND l.EFFDT = (SELECT MAX(l1.EFFDT)
                                FROM PS_LOCATION_TBL l1
                                WHERE l1.SETID = l.SETID
                                AND l1.LOCATION = l.LOCATION
                                AND l1.EFFDT <= j.EFFDT)
                 AND l.EFF_STATUS = 'A'
                 AND c.COUNTRY = l.COUNTRY
                 AND o.oprid = ps_AB_PDI_CN_TAO_TMP.OPRID),' ' )
                 WHERE COUNTRY_2CHAR = ' '
    FINDINGS SECTION (2 findings)
    1- Statistics Finding
      Optimizer statistics for table "SYSADM"."PS_AB_PDI_CN_TAO_TMP" and its
      indices are stale.
      Recommendation
      - Consider collecting optimizer statistics for this table.
        execute dbms_stats.gather_table_stats(ownname => 'SYSADM', tabname =>
                'PS_AB_PDI_CN_TAO_TMP', estimate_percent =>
                DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE
                AUTO');
      Rationale
        The optimizer requires up-to-date statistics for the table in order to
        select a good execution plan.
    2- SQL Profile Finding (see explain plans section below)
      A potentially better execution plan was found for this statement.
      Recommendation (estimated benefit<=10%)
      - Consider accepting the recommended SQL profile.
        execute dbms_sqltune.accept_sql_profile(task_name =>
                'sysadm_avoid_psijob', replace => TRUE);
    EXPLAIN PLANS SECTION
    1- Original With Adjusted Cost
    Plan hash value: 4225281431
    | Id  | Operation                                      | Name                 | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | UPDATE STATEMENT                               |                      | 48482 |   284K|    54  (19)| 00:00:01 |
    |   1 |  UPDATE                                        | PS_AB_PDI_CN_TAO_TMP |       |       |         |             |
    |*  2 |   TABLE ACCESS FULL                            | PS_AB_PDI_CN_TAO_TMP | 48482 |   284K|    54  (19)| 00:00:01 |
    |   3 |   NESTED LOOPS                                 |                      |     1 |    80 |     8   (0)| 00:00:01 |
    |   4 |    NESTED LOOPS                                |                      |     1 |    73 |     7   (0)| 00:00:01 |
    |   5 |     NESTED LOOPS                               |                      |     1 |    48 |     5   (0)| 00:00:01 |
    |   6 |      TABLE ACCESS BY INDEX ROWID               | PSOPRDEFN            |     1 |    15 |     2   (0)| 00:00:01 |
    |*  7 |       INDEX UNIQUE SCAN                        | PS_PSOPRDEFN         |     1 |       |     1   (0)| 00:00:01 |
    |   8 |      TABLE ACCESS BY INDEX ROWID               | PS_JOB               |     1 |    33 |     3   (0)| 00:00:01 |
    |*  9 |       INDEX RANGE SCAN                         | PSAJOB               |     1 |       |     2   (0)| 00:00:01 |
    |  10 |        SORT AGGREGATE                          |                      |     1 |    19 |         |             |
    |  11 |         FIRST ROW                              |                      |    10 |   190 |     3   (0)| 00:00:01 |
    |* 12 |          INDEX RANGE SCAN (MIN/MAX)            | PSAJOB               |    10 |   190 |     3   (0)| 00:00:01 |
    |  13 |           SORT AGGREGATE                       |                      |     1 |    22 |         |             |
    |  14 |            FIRST ROW                           |                      |     1 |    22 |     3   (0)| 00:00:01 |
    |* 15 |             INDEX RANGE SCAN (MIN/MAX)         | PSAJOB               |     1 |    22 |     3   (0)| 00:00:01 |
    |  16 |              SORT AGGREGATE                    |                      |     1 |    22 |         |             |
    |  17 |               FIRST ROW                        |                      |     1 |    22 |     9  (67)| 00:00:01 |
    |* 18 |                INDEX RANGE SCAN (MIN/MAX)      | PSAJOB               |     1 |    22 |     9  (67)| 00:00:01 |
    |  19 |                 SORT AGGREGATE                 |                      |     1 |    19 |         |             |
    |  20 |                  FIRST ROW                     |                      |    10 |   190 |     3   (0)| 00:00:01 |
    |* 21 |                   INDEX RANGE SCAN (MIN/MAX)   | PSAJOB               |    10 |   190 |     3   (0)| 00:00:01 |
    |  22 |                    SORT AGGREGATE              |                      |     1 |    22 |         |             |
    |  23 |                     FIRST ROW                  |                      |     1 |    22 |     3   (0)| 00:00:01 |
    |* 24 |                      INDEX RANGE SCAN (MIN/MAX)| PSAJOB               |     1 |    22 |     3   (0)| 00:00:01 |
    |* 25 |     TABLE ACCESS BY INDEX ROWID                | PS_LOCATION_TBL      |     1 |    25 |     2   (0)| 00:00:01 |
    |* 26 |      INDEX RANGE SCAN                          | PS_LOCATION_TBL      |     1 |       |     1   (0)| 00:00:01 |
    |  27 |       SORT AGGREGATE                           |                      |     1 |    19 |         |             |
    |  28 |        FIRST ROW                               |                      |     1 |    19 |     2   (0)| 00:00:01 |
    |* 29 |         INDEX RANGE SCAN (MIN/MAX)             | PS_LOCATION_TBL      |     1 |    19 |     2   (0)| 00:00:01 |
    |  30 |    TABLE ACCESS BY INDEX ROWID                 | PS_COUNTRY_TBL       |     1 |     7 |     1   (0)| 00:00:01 |
    |* 31 |     INDEX UNIQUE SCAN                          | PS_COUNTRY_TBL       |     1 |       |     0   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       2 - filter("COUNTRY_2CHAR"=' ')
       7 - access("O"."OPRID"=:B1)
       9 - access("J"."EMPLID"="O"."EMPLID")
           filter("J"."EFFDT"= (SELECT /*+ INDEX ("J1" "PSAJOB") */ MAX("J1"."EFFDT") FROM "PS_JOB" "J1" WHERE
                  "J1"."EFFDT"<=SYSDATE@! AND "J1"."EMPL_RCD"=:B1 AND "J1"."EMPLID"=:B2) AND "J"."EFFSEQ"= (SELECT /*+ INDEX
                  ("J2" "PSAJOB") */ MAX("J2"."EFFSEQ") FROM "PS_JOB" "J2" WHERE "J2"."EFFDT"=:B3 AND "J2"."EMPL_RCD"=:B4 AND
                  "J2"."EMPLID"=:B5) AND "J"."EMPL_RCD"= (SELECT /*+ INDEX ("SYS_ALIAS_5" "PSAJOB") */ MAX("JS"."EMPL_RCD") FR
                  "PS_JOB" "SYS_ALIAS_5" WHERE "JS"."EMPLID"=:B6 AND "JS"."EFFDT"= (SELECT /*+ INDEX ("JS1" "PSAJOB") */
                  MAX("JS1"."EFFDT") FROM "PS_JOB" "JS1" WHERE "JS1"."EFFDT"<=SYSDATE@! AND "JS1"."EMPL_RCD"=:B7 AND
                  "JS1"."EMPLID"=:B8) AND "JS"."EFFSEQ"= (SELECT /*+ INDEX ("JS2" "PSAJOB") */ MAX("JS2"."EFFSEQ") FROM "PS_JO
                  "JS2" WHERE "JS2"."EFFDT"=:B9 AND "JS2"."EMPL_RCD"=:B10 AND "JS2"."EMPLID"=:B11)))
      12 - access("J1"."EMPLID"=:B1 AND "J1"."EMPL_RCD"=:B2 AND "J1"."EFFDT"<=SYSDATE@!)
      15 - access("J2"."EMPLID"=:B1 AND "J2"."EMPL_RCD"=:B2 AND "J2"."EFFDT"=:B3)
      18 - access("JS"."EMPLID"=:B1)
           filter("JS"."EFFDT"= (SELECT /*+ INDEX ("JS1" "PSAJOB") */ MAX("JS1"."EFFDT") FROM "PS_JOB" "JS1" WHERE
                  "JS1"."EFFDT"<=SYSDATE@! AND "JS1"."EMPL_RCD"=:B1 AND "JS1"."EMPLID"=:B2) AND "JS"."EFFSEQ"= (SELECT /*+ IND
                  ("JS2" "PSAJOB") */ MAX("JS2"."EFFSEQ") FROM "PS_JOB" "JS2" WHERE "JS2"."EFFDT"=:B3 AND "JS2"."EMPL_RCD"=:B4
                  AND "JS2"."EMPLID"=:B5))
      21 - access("JS1"."EMPLID"=:B1 AND "JS1"."EMPL_RCD"=:B2 AND "JS1"."EFFDT"<=SYSDATE@!)
      24 - access("JS2"."EMPLID"=:B1 AND "JS2"."EMPL_RCD"=:B2 AND "JS2"."EFFDT"=:B3)
      25 - filter("L"."EFF_STATUS"='A')
      26 - access("L"."SETID"="J"."SETID_LOCATION" AND "L"."LOCATION"="J"."LOCATION")
           filter("L"."EFFDT"= (SELECT /*+ INDEX ("L1" "PS_LOCATION_TBL") */ MAX("L1"."EFFDT") FROM
                  "PS_LOCATION_TBL" "L1" WHERE "L1"."EFFDT"<=:B1 AND "L1"."LOCATION"=:B2 AND "L1"."SETID"=:B3))
      29 - access("L1"."SETID"=:B1 AND "L1"."LOCATION"=:B2 AND "L1"."EFFDT"<=:B3)
      31 - access("C"."COUNTRY"="L"."COUNTRY")
    2- Using SQL Profile
    Plan hash value: 1175485146
    | Id  | Operation                           | Name                 | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
    |   0 | UPDATE STATEMENT                    |                      | 48482 |   284K|       |    54  (19)| 00:00:01 |
    |   1 |  UPDATE                             | PS_AB_PDI_CN_TAO_TMP |       |       |       |         |     |
    |*  2 |   TABLE ACCESS FULL                 | PS_AB_PDI_CN_TAO_TMP | 48482 |   284K|       |    54  (19)| 00:00:01 |
    |   3 |   NESTED LOOPS                      |                      |     1 |   133 |       | 17470   (4)| 00:03:30 |
    |   4 |    NESTED LOOPS                     |                      |     1 |    80 |       |     8   (0)| 00:00:01 |
    |   5 |     NESTED LOOPS                    |                      |     1 |    73 |       |     7   (0)| 00:00:01 |
    |   6 |      NESTED LOOPS                   |                      |     1 |    48 |       |     5   (0)| 00:00:01 |
    |   7 |       TABLE ACCESS BY INDEX ROWID   | PSOPRDEFN            |     1 |    15 |       |     2   (0)| 00:00:01 |
    |*  8 |        INDEX UNIQUE SCAN            | PS_PSOPRDEFN         |     1 |       |       |     1   (0)| 00:00:01 |
    |   9 |       TABLE ACCESS BY INDEX ROWID   | PS_JOB               |     1 |    33 |       |     3   (0)| 00:00:01 |
    |* 10 |        INDEX RANGE SCAN             | PSAJOB               |     1 |       |       |     2   (0)| 00:00:01 |
    |  11 |         SORT AGGREGATE              |                      |     1 |    19 |       |         |     |
    |  12 |          FIRST ROW                  |                      |    10 |   190 |       |     3   (0)| 00:00:01 |
    |* 13 |           INDEX RANGE SCAN (MIN/MAX)| PSAJOB               |    10 |   190 |       |     3   (0)| 00:00:01 |
    |  14 |            SORT AGGREGATE           |                      |     1 |   115 |       |         |     |
    |* 15 |             HASH JOIN               |                      |     1 |   115 |       |    10  (30)| 00:00:01 |
    |  16 |              NESTED LOOPS           |                      |     1 |    75 |       |     5  (20)| 00:00:01 |
    |  17 |               VIEW                  | VW_SQ_2              |    19 |  1007 |       |     4  (25)| 00:00:01 |
    |  18 |                SORT GROUP BY        |                      |    19 |   779 |       |     4  (25)| 00:00:01 |
    |* 19 |                 INDEX RANGE SCAN    | PSAJOB               |    19 |   779 |       |     3   (0)| 00:00:01 |
    |* 20 |               INDEX UNIQUE SCAN     | PS_JOB               |     1 |    22 |       |     1   (0)| 00:00:01 |
    |  21 |              VIEW                   | VW_SQ_1              |    19 |   760 |       |     4  (25)| 00:00:01 |
    |  22 |               SORT GROUP BY         |                      |    19 |   570 |       |     4  (25)| 00:00:01 |
    |* 23 |                INDEX RANGE SCAN     | PSAJOB               |    19 |   570 |       |     3   (0)| 00:00:01 |
    |* 24 |      TABLE ACCESS BY INDEX ROWID    | PS_LOCATION_TBL      |     1 |    25 |       |     2   (0)| 00:00:01 |
    |* 25 |       INDEX RANGE SCAN              | PS_LOCATION_TBL      |     1 |       |       |     1   (0)| 00:00:01 |
    |  26 |        SORT AGGREGATE               |                      |     1 |    19 |       |         |     |
    |  27 |         FIRST ROW                   |                      |     1 |    19 |       |     2   (0)| 00:00:01 |
    |* 28 |          INDEX RANGE SCAN (MIN/MAX) | PS_LOCATION_TBL      |     1 |    19 |       |     2   (0)| 00:00:01 |
    |  29 |     TABLE ACCESS BY INDEX ROWID     | PS_COUNTRY_TBL       |     1 |     7 |       |     1   (0)| 00:00:01 |
    |* 30 |      INDEX UNIQUE SCAN              | PS_COUNTRY_TBL       |     1 |       |       |     0   (0)| 00:00:01 |
    |* 31 |    VIEW                             | VW_SQ_3              |     1 |    53 |       | 17462   (4)| 00:03:30 |
    |  32 |     SORT GROUP BY                   |                      |  3299K|   129M|   379M| 17462   (4)| 00:03:30 |
    |  33 |      INDEX FULL SCAN                | PSAJOB               |  3299K|   129M|       | 17462   (4)| 00:03:30 |
    Predicate Information (identified by operation id):
       2 - filter("COUNTRY_2CHAR"=' ')
       8 - access("O"."OPRID"=:B1)
      10 - access("J"."EMPLID"="O"."EMPLID")
           filter("J"."EFFDT"= (SELECT MAX("J1"."EFFDT") FROM "PS_JOB" "J1" WHERE "J1"."EFFDT"<=SYSDATE@! AND
                  "J1"."EMPL_RCD"=:B1 AND "J1"."EMPLID"=:B2) AND "J"."EMPL_RCD"= (SELECT MAX("JS"."EMPL_RCD") FROM "PS_JOB"
                  "JS", (SELECT MAX("JS1"."EFFDT") "VW_COL_1","JS1"."EMPLID" "EMPLID","JS1"."EMPL_RCD" "EMPL_RCD" FROM
                  "PS_JOB" "JS1" WHERE "JS1"."EMPLID"=:B3 AND "JS1"."EFFDT"<=SYSDATE@! GROUP BY
                  "JS1"."EMPLID","JS1"."EMPL_RCD") "VW_SQ_1", (SELECT MAX("JS2"."EFFSEQ") "VW_COL_1","JS2"."EMPLID"
                  "EMPLID","JS2"."EMPL_RCD" "EMPL_RCD","JS2"."EFFDT" "EFFDT" FROM "PS_JOB" "JS2" WHERE "JS2"."EMPLID"=:B4
                  GROUP BY "JS2"."EMPLID","JS2"."EMPL_RCD","JS2"."EFFDT") "VW_SQ_2" WHERE "EMPL_RCD"="JS"."EMPL_RCD" AND
                  "EMPLID"="JS"."EMPLID" AND "JS"."EFFDT"="VW_COL_1" AND "JS"."EFFSEQ"="VW_COL_1" AND "EFFDT"="JS"."EFFDT"
                  AND "EMPL_RCD"="JS"."EMPL_RCD" AND "EMPLID"="JS"."EMPLID" AND "JS"."EMPLID"=:B5))
      13 - access("J1"."EMPLID"=:B1 AND "J1"."EMPL_RCD"=:B2 AND "J1"."EFFDT"<=SYSDATE@!)
      15 - access("JS"."EFFDT"="VW_COL_1" AND "EMPLID"="JS"."EMPLID" AND "EMPL_RCD"="JS"."EMPL_RCD")
      19 - access("JS2"."EMPLID"=:B1)
      20 - access("EMPLID"="JS"."EMPLID" AND "EMPL_RCD"="JS"."EMPL_RCD" AND "EFFDT"="JS"."EFFDT" AND
                  "JS"."EFFSEQ"="VW_COL_1")
           filter("JS"."EMPLID"=:B1)
      23 - access("JS1"."EMPLID"=:B1 AND "JS1"."EFFDT"<=SYSDATE@!)
           filter("JS1"."EFFDT"<=SYSDATE@!)
      24 - filter("L"."EFF_STATUS"='A')
      25 - access("L"."SETID"="J"."SETID_LOCATION" AND "L"."LOCATION"="J"."LOCATION")
           filter("L"."EFFDT"= (SELECT MAX("L1"."EFFDT") FROM "PS_LOCATION_TBL" "L1" WHERE "L1"."EFFDT"<=:B1
                  AND "L1"."LOCATION"=:B2 AND "L1"."SETID"=:B3))
      28 - access("L1"."SETID"=:B1 AND "L1"."LOCATION"=:B2 AND "L1"."EFFDT"<=:B3)
      30 - access("C"."COUNTRY"="L"."COUNTRY")
      31 - filter("J"."EFFSEQ"="VW_COL_1" AND "EMPLID"="J"."EMPLID" AND "EMPL_RCD"="J"."EMPL_RCD" AND
                  "EFFDT"="J"."EFFDT")
    -------------------------------------------------------------------------------{code}
    If I accept this new explain plan, the query is not improved, it run longer than expected, especially longer than the previous one (using only PSAJOB).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    

  • Index Issues

    dear friends!
    I am working on 10g and i have very huge tables in my prod database. I have one table which have two indexes (one primary key and other is also unique key based index). I run a query every week for some very important reports. Most of time this query not use my important index. But when i calculate the stats for table and indexes then after that start to use it. I want its always use index without to calculate stats every time. any suggestioon ?
    My query fire from application and which support has obsolete.
    regards
    irfan ahmad

    Here's an example of how to run the tuning advisor manually from sqlplus:
    Let's say you have run a query and the SQL ID for that query is 1bzbd0r02z9qs
    1. Create the tuning task
    -- Tuning task created for specific a statement from the cursor cache.
    DECLARE
    l_sql_tune_task_id VARCHAR2(100);
    BEGIN
    l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task (
    sql_id => '1bzbd0r02z9qs',
    scope => DBMS_SQLTUNE.scope_comprehensive,
    time_limit => 60,
    task_name => '1bzbd0r02z9qs_tuning_task',
    description => 'Tuning task for statement 1bzbd0r02z9qs.');
    DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id);
    END;
    2. Run the tuning task
    EXEC DBMS_SQLTUNE.execute_tuning_task(task_name => '1bzbd0r02z9qs_tuning_task');
    3. View the recommendations
    SET LONG 10000;
    SET PAGESIZE 1000
    SET LINESIZE 200
    SELECT DBMS_SQLTUNE.report_tuning_task('1bzbd0r02z9qs_tuning_task') AS recommendations FROM dual;
    4. Drop the tuning task when you're done
    EXEC DBMS_SQLTUNE.drop_tuning_task (task_name => '1bzbd0r02z9qs_tuning_task');
    Good article and more info here:
    http://www.oracle-base.com/articles/10g/AutomaticSQLTuning10g.php#sql_tuning_advisor
    Hope that helps,
    Andreas

Maybe you are looking for

  • I have a DeskjJet 9650 - When printing my resume button comes on and nothing is printed.

    it goes thru the process but doesn't make it pass the intial phase and the resume light comes on and i have to disconnect the printer. i have tried removing the printer and reinstalling and no luck thus far

  • Empty line handling in sender fileadapter FCC

    Hi Al,   How do we ignore empty lines in the fixed length file by using FCC? In my input file,i would be having emply lines at last and as per my curect FCC configurations,it is reading that emplty line also and due to this,message got failed in mess

  • PL/SQL Library Reinitializes. WHY??

    Forms [32 Bit] Version 6.0.8.16.1 (Production) Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production With the Partitioning option JServer Release 8.1.7.4.0 - Production I have a PL/SQL library that is attached to three forms. Form A and Form B i

  • Identifying Full Font Family Names from Acrobat "Properties"

    I routinely update PDFs where the originator is unavailable to question about typography issues. The problem I'm having currently, and continue to have, is that Acrobat (on V8) identifies font names differently from say...the Adobe Store. For instanc

  • RoboHelp 7 HTML - Captivate Integration

    Hello, I have a problem importing captivate projects into my RoboHelp 7 HTML projects. When I publish used to be able to import the [captivate project]_skin.swf and it would import all relevant swf files into the help files. When I attempt to do this