Stored Outlines in SAP

Hi,
is anyone using stored outlines within SAP?
Would you pleas share your experience with it's implementation.
Thanks
Volker

Volker Borowski wrote:>
> >
YukonKid wrote:
> > If you go for outlines you would need to
> >
> > a) capture the query exactly as it is executed by the application, hints and all
> > yk
> http://forums.sdn.sap.com/post!reply.jspa?messageID=8458029
> Hi YK,
>
> this would be a major "gotcha".
> My statement has bind variables and I am not able to force the plan
> to the correct one by invalidating an index.
> I either need a hint (which will not be in the generated code) or
> change the sequence of the tables in the from clause.
>
> So in both ways the stored outline would refer to a statement,
> that is literally diffrent.
>
> So if I got you correctly, I will not be able to like the plan of a statement to a diffrent one?
no - it works the other way round:
Statement A -> worse plan
you would make it to use the more efficient plan (i.e. using session parameters and such)
capture that plan and use it on Statement A.
>
>
> The change I'd have to do would be
>
> :
> FROM
>   table1  T_00,
>   table2  T_01,
>   table3  T_02,
>   table4  T_03,
>   table5  T_04,
>   table6  T_05,
>   table7  T_06,
>   table8  T_07,
> WHERE
> :
>
> to
>
> :
> FROM
>   table2  T_01,
>   table3  T_02,
>   table1  T_00,
>   table4  T_03,
>   table5  T_04,
>   table6  T_05,
>   table7  T_06,
>   table8  T_07,
> WHERE
> :
>
> Now as for the SQL Syntax, this make absolutely no diffrence.
> But the plan changes to effectively 50% less consistent gets (~12000 -> ~6500)
> and the total optimizer costs for both plans are identical.
>
> So I would like to link the plan for statement 2 to the literal statement 1.
If you have control over the statement check out the ORDERED hint and forget stored outlines
SELECT /*+ ORDERED */ ....FROM ....WHERE
tables get joined in the order of the from clause.
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements006.htm#SQLRF50601
But same applies: Don't try to be more clever than the CBO (99% of the time he is smarter than you)....
>
> Volker

Similar Messages

  • Working with Word Templates and signed Word macros storing documents in SAP

    HI,
    we are storing word documents in the SAP BDS. The documents contain macros. The security settings for word macros cannot be reduced in our environment.
    So the documents / macros were signed. They work well. but as soon as they have been stored in the SAP BDS, we get the error message "You have modified a signed project.You do not have the correct key to sign this project. The signature will be discarded"
    After that the word macros do not run.
    Does anybody know this problem and the solution?
    Regards
    Harald

    And this is related to workflow in what way?
    Regards,
    Martin

  • PDF files are stored to /usr/sap/ SID SYS/global

    True or False --> When a PDF file is generated from within SAP the spool file is stored in /usr/sap/<SID>SYS/global
    After a recent upgrade to ECC 6 I'm noticing that a large number of SPOOL* files are in the global directory.  Each spool file has 3 components a SPOOL.cfg, SPOOL.xfd and a SPOOL*.ps file .When I examine the spool number using SP01 I see that these jobs all have an output type of PDF. Only files of type PDF appear in the global directory. It does not matter which output device is used. No output device in my system is defined to write to the global directory. Everything is set up to store files to the database.  
    My assumption is that the generation of a PDF format requires a temporary storage area to convert the data from the "Device Type" setting for the printer (such as Postscript or HPGL) to the PDF format and that the /usr/sap/<SID>SYS/global directory is used for this purpose.
    Is there a parameter setting that allows me to modifiy this "conversion" location?

    Assumptions:
    ---> You are running on Unix - I don't have instructions for Windows, but they would be analogous
    ---> Your System ID is TX1
    ---> 2Gb is big enough to hold your Adobe files
    1.) Create a 2Gb file system named /AdobeFiles
    2.) Create the required directories under this new file system
    - For example: /AdobeFiles/300ADSP 
    3.) Verify that the user <sid>adm can write to the directory created in step 2
    4.) Apply SAP note 1327372
    5.) Rename the filesystems that SAP note 1327372 creates
    - For example: mv  /usr/sap/TX1/SYS/global/300ADSP   /usr/sap/TX1/SYS/global/300ADSP-ORG
    6.) Create a symbolic link for the required directory to the directory created in step 2
    - For example: ln   -s   /AdobeFiles/300ADSP  /usr/sap/TX1/SYS/global/300ADSP
    7.) Test your link
    cd /usr/sap/TX1/SYS/global/300ADSP
    touch TestFile
    cd /AdobeFiles/300ADSP/TestFile
    Your file should have been created in /AdobeFiles/300ADSP

  • Where are BW Datasources physically/actually stored in the SAP system

    Hi,
    We are making some changes which are to be moved to the BI production system.
    There are a couple of concerns which have arised.
    So we need to know where all the changes including CMOD changes, SAP notes and BW Datasources are physically stored in the SAP systems.
    As far as I understand these changes should be part of the SAP database.
    Is that right or is any part of this stored in any filesystem?
    Regards,
    Rohan.

    Hi,
    Thanks for your response, that clears it up for the ABAP stack.
    Would that be the same for both ABAP as well as Java?
    As we are having a ABAP+Java stack.
    Regards,
    Rohan.

  • How much performance is impacted if the Stored outline is used globally?

    Hi,
    One of the queries that we are having problem with and we are trying to use the Stored outline so that we freeze the execution plan. The vendor is telling us that it should set globally (ALTER SYSTEM not SESSION) , but we disagreed because this would have negative effect on our db performance. We ask to enable session only iusing LOGON trigger filtered by program/username nstead of system like below
    Vendor preference: ALTER SYSTEM SET CREATE_STORED_OUTLINES=TRUE
    We prefer: ALTER SESSION SET CREATE_STORED_OUTLINES=TRUE
    BTW, we are on HP UX 10.2.0.3. Any recommendations or suggestions would be greatly appreciated. Thank you so much.
    Rich.

    No Oracle version number.
    No information as to the vendor or the product.
    No information indicating why a stored outline might be of value in one or many cases.
    And most importantly ... no evidence of testing to see if it really makes things better or worse.
    Throw this into a test environment and validate your prejudices. There is no way we can possibly
    know and there are no general rules when it comes to tuning other than the fact that only testing
    on your hardware with your system has value.

  • Do stored outlines work in Oracle 10.2.0.3?

    I am using 10.2.0.3 on HP UNIX 11i. I set cursor_sharing=force.
    I created a stored outline using:
    alter session set create_stored_outlines='CUSTOM';
    my sql_statement;
    When I run the sql statement and verify in v$sql whether outline was used by looking at outline_category and yes outline is used.
    But then I run dbms_stat on an underlying table and run my sql again, my plan has changed which means outline was not used. This is really baffling, if outline was used,
    Plan should be same as what was produced when creating outline. Something is
    Definitely wrong.

    After spending whole day, I narrowed down the proble. Stored outlines in 10.2.0.3
    do not work anymore whith cursor_sharing=force. They, however, they work with
    cusror_sharing=similar and cirsor_sahring=exact.

  • Oracle not using the stored outline

    SQL> create table emp as select * from sys.emp;
    Table created.
    SQL> alter session set create_stored_outlines = TRUE;
    Session altered.
    SQL> create outline emp_dept for category scott_outlines on select empno from emp where ename = 'SCOTT';
    Outline created.
    SQL> set autot on exp
    SQL> select empno from emp where ename = 'SCOTT';
    EMPNO
    7788
    Execution Plan
    Plan hash value: 3956160932
    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
    | 0 | SELECT STATEMENT | | 1 | 20 | 2 (0)| 00:00:01 |
    |* 1 | TABLE ACCESS FULL| EMP | 1 | 20 | 2 (0)| 00:00:01 |
    Predicate Information (identified by operation id):
    1 - filter("ENAME"='SCOTT')
    Note
    - dynamic sampling used for this statement (level=2)
    SQL> create unique index i on emp(ename);
    Index created.
    SQL> select empno from emp where ename = 'SCOTT';
    EMPNO
    7788
    Execution Plan
    Plan hash value: 3262377121
    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
    |
    | 0 | SELECT STATEMENT | | 1 | 20 | 1 (0)| 00:00:
    01 |
    | 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 20 | 1 (0)| 00:00:
    01 |
    |* 2 | INDEX UNIQUE SCAN | I | 1 | | 0 (0)| 00:00:
    01 |
    Predicate Information (identified by operation id):
    2 - access("ENAME"='SCOTT')
    SQL> alter session set use_stored_outlines = SCOTT_OUTLIN
    2 ;
    Session altered.
    SQL> alter session set use_stored_outlines = SCOTT_OUTLINS
    2 ;
    Session altered.
    SQL> select empno from emp where ename = 'SCOTT';
    EMPNO
    7788
    Execution Plan
    Plan hash value: 3262377121
    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
    |
    | 0 | SELECT STATEMENT | | 1 | 20 | 1 (0)| 00:00:
    01 |
    | 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 20 | 1 (0)| 00:00:
    01 |
    |* 2 | INDEX UNIQUE SCAN | I | 1 | | 0 (0)| 00:00:
    01 |
    Predicate Information (identified by operation id):
    2 - access("ENAME"='SCOTT')
    Note
    - outline "SYS_OUTLINE_11050409142489113" used for this statement
    SQL> SELECT name, category, used FROM user_outlines;
    NAME CATEGORY USED
    EMP_DEPT SCOTT_OUTLINES UNUSED
    SYS_OUTLINE_11050408594412502 DEFAULT USED
    SYS_OUTLINE_11050408591781301 DEFAULT UNUSED
    SYS_OUTLINE_11050408594415603 DEFAULT UNUSED
    SYS_OUTLINE_11050408595648404 DEFAULT UNUSED
    SYS_OUTLINE_11050409003554705 DEFAULT UNUSED
    SYS_OUTLINE_11050409030340606 DEFAULT UNUSED
    7 rows selected.
    Execution Plan
    Plan hash value: 1195863419
    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Ti
    me |
    | 0 | SELECT STATEMENT | | 1 | 81 | 2 (0)| 00
    :00:01 |
    | 1 | NESTED LOOPS | | | | |
    |
    | 2 | NESTED LOOPS | | 1 | 81 | 2 (0)| 00
    :00:01 |
    | 3 | TABLE ACCESS FULL | OL$ | 1 | 64 | 2 (0)| 00
    :00:01 |
    |* 4 | INDEX UNIQUE SCAN | I_USER1 | 1 | | 0 (0)| 00
    :00:01 |
    |* 5 | TABLE ACCESS BY INDEX ROWID| USER$ | 1 | 17 | 0 (0)| 00
    :00:01 |
    Predicate Information (identified by operation id):
    4 - access("CREATOR"="U"."NAME")
    5 - filter("U"."USER#"=USERENV('SCHEMAID'))
    Note
    - outline "SYS_OUTLINE_11050409030340606" used for this statement
    SQL>
    Note : I have dropped all default outlines in dba_outlines but they are being created automatically.(Why)
    Please give me good article to understand more on stored outlines.

    Please post your 4 digits Oracle version.
    It looks like that Oracle has only 1 stored outline for the SQL statement and that the second execution plan with the index has replaced the first outline (execution plan with full table scan).
    Here is a good article on stored outlines http://www.oracle-base.com/articles/misc/Outlines.php (except that the used Oracle version is also missing).
    Here is a short demo based on your demo that I have modified (note that I disabled stored outlines just after creating the first one):
    SQL> select * from v$version;
    BANNER
    Oracle Database 10g Express Edition Release 10.2.0.1.0 - Product
    PL/SQL Release 10.2.0.1.0 - Production
    CORE    10.2.0.1.0      Production
    TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
    NLSRTL Version 10.2.0.1.0 - Production
    SQL> drop table emp purge;
    Table dropped.
    SQL> drop outline emp_dept;
    Outline dropped.
    SQL> whenever sqlerror exit failure;
    SQL> --
    SQL> create table emp as
      2  select object_name ename, object_id empno
      3  from all_objects
      4  where object_id < 5000;
    Table created.
    SQL> --
    SQL> alter session set create_stored_outlines = TRUE;
    Session altered.
    SQL> create outline emp_dept for category scott_outlines on
    select empno from emp where ename = 'SCOTT';
    Outline created.
    SQL> set autot on exp
    SQL> select empno from emp where ename = 'SCOTT';
    no rows selected
    Execution Plan
    Plan hash value: 3956160932
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT  |      |     1 |    30 |     5   (0)| 00:00:01 |
    |*  1 |  TABLE ACCESS FULL| EMP  |     1 |    30 |     5   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       1 - filter("ENAME"='SCOTT')
    Note
       - dynamic sampling used for this statement
    SQL> -- disable stored outline creation
    SQL> alter session set create_stored_outlines = FALSE;
    Session altered.
    SQL> create index i on emp(ename);
    Index created.
    SQL> select empno from emp where ename = 'SCOTT';
    no rows selected
    Execution Plan
    Plan hash value: 4079916893
    | Id  | Operation                   | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT            |      |     1 |    30 |     1   (0)| 00:00:01 |
    |   1 |  TABLE ACCESS BY INDEX ROWID| EMP  |     1 |    30 |     1   (0)| 00:00:01 |
    |*  2 |   INDEX RANGE SCAN          | I    |     1 |       |     1   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       2 - access("ENAME"='SCOTT')
    Note
       - dynamic sampling used for this statement
    SQL> -- use stored outlines
    SQL> alter session set use_stored_outlines = SCOTT_OUTLINES;
    Session altered.
    SQL> select empno from emp where ename = 'SCOTT';
    no rows selected
    Execution Plan
    Plan hash value: 3956160932
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT  |      |    10 |   300 |     5   (0)| 00:00:01 |
    |*  1 |  TABLE ACCESS FULL| EMP  |    10 |   300 |     5   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       1 - filter("ENAME"='SCOTT')
    Note
       - outline "EMP_DEPT" used for this statement
    SQL> -- do not use stored outlines
    SQL> alter session set use_stored_outlines=false;
    Session altered.
    SQL> select empno from emp where ename = 'SCOTT';
    no rows selected
    Execution Plan
    Plan hash value: 4079916893
    | Id  | Operation                   | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT            |      |     1 |    30 |     1   (0)| 00:00:01 |
    |   1 |  TABLE ACCESS BY INDEX ROWID| EMP  |     1 |    30 |     1   (0)| 00:00:01 |
    |*  2 |   INDEX RANGE SCAN          | I    |     1 |       |     1   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       2 - access("ENAME"='SCOTT')
    Note
       - dynamic sampling used for this statementEdited by: P. Forstmann on 4 mai 2011 13:34

  • Performance Tuning Issues: UNION and Stored Outlines

    Hi,
    I have two questions,
    Firstly I have read this:
    http://download-east.oracle.com/docs/cd/B19306_01/server.102/b14211/sql_1016.htm#i35699
    What I can understand is using UNION ALL is better than UNION.
    The ALL in UNION ALL is logically valid because of this exclusivity. It allows the plan to be carried out without an expensive sort to rule out duplicate rows for the two halves of the query.
    Can someone explain me the following sentences.
    Secondly my Oracle Database 10g is on FIRST_ROWS_1, how can stored outlines help in reducing I/O cost and response time in general?Please explain.
    Thank you,
    Adith

    Union ALL and Union
    SQL> select 1, 2 from dual
    union
    select 1, 2 from dual;
    | Id | Operation | Name | Rows | Cost (%CPU)| Time |
    | 0 | SELECT STATEMENT | | 2 | 6 (67)| 00:00:01 |
    | 1 | SORT UNIQUE | | 2 | 6 (67)| 00:00:01 |
    | 2 | UNION-ALL | | | | |
    | 3 | FAST DUAL | | 1 | 2 (0)| 00:00:01 |
    | 4 | FAST DUAL | | 1 | 2 (0)| 00:00:01 |
    11 rows selected.
    SQL>select 1, 2 from dual
    union all
    select 1, 2 from dual;
    | Id | Operation | Name | Rows | Cost (%CPU)| Time |
    | 0 | SELECT STATEMENT | | 2 | 4 (50)| 00:00:01 |
    | 1 | UNION-ALL | | | | |
    | 2 | FAST DUAL | | 1 | 2 (0)| 00:00:01 |
    | 3 | FAST DUAL | | 1 | 2 (0)| 00:00:01 |
    10 rows selected.
    Adith

  • Stored outline issue

    Hi experts,
    i have an issues with stored outlines.i am on oracle 9.2.0.1
    i created and outline as
    CREATE OR REPLACE OUTLINE JOB1 FOR CATEGORY JOB_TBL2 ON
    SELECT EMPLID FROM PS_JOB WHERE ACTION LIKE :1
    then
    ALTER SESSION SET use_stored_outlines=JOB_TBL2;
    after that if i run the query SELECT EMPLID FROM PS_JOB WHERE ACTION LIKE :1 then my stored outline is used
    but if i run as SELECT EMPLID FROM PS_JOB WHERE ACTION LIKE 'HIR' it doesnot use stored outline.
    i test with both cursor sharing =similar\exact
    Please help.

    Loading at non lev0 members and aggregating with SET AGGMISSIG OFF may protect the data at non lev0 combinatioons that time.
    It will not protect the data permanantly as future calc operations has always a chance to overwrite that data.
    Follow the below prctices
    1) Load high at the non lev0 combination
    2) Run the push down calculation to allocate this data to lev0 combinations.
    3) Aggregate the data.
    Second approch is
    If you dont like to tie this data to the any available lev0 members for any reasons.Consider the below hierarchy
    ---PG
    -------PG1
    -------PG2
    -------PG3
    You want to load data at PG member level and dont like to tie for any of the members PG1, PG2 and PG3.
    Then add a place holder member PG_I as a sibling to PG3 and load the data to that PG_I.
    Then you can see the expected data at PG with out loading high and applying conditions.

  • Stored outlines hints in diff query...

    hello all,
    I am on 10.2.0.3 i had a question on stored outline....i create the below stored outline in our dummy env....but my question is how can i use the hints used by stored outline in my query that i was use in my other env ....just use all the hints from this stroed outlines in other env...
    CREATE OUTLINE emp_dept FOR CATEGORY scott_outlines
    ON SELECT e.empno, e.ename, d.dname FROM emp e, dept d WHERE e.deptno = d.deptno;
    -- Check the outline as been created correctly.
    COLUMN name FORMAT A30
    SELECT name, category, sql_text FROM user_outlines WHERE category = 'SCOTT_OUTLINES';
    NAME                           CATEGORY
    SQL_TEXT
    EMP_DEPT                       SCOTT_OUTLINES
    SELECT e.empno, e.ename, d.dname FROM emp e, dept d WHERE e.deptno = d.deptno
    1 row selected.
    -- List the hints associated with the outline.
    COLUMN hint FORMAT A50
    SELECT node, stage, join_pos, hint FROM user_outline_hints WHERE name = 'EMP_DEPT';
          NODE      STAGE   JOIN_POS HINT
             1          1          0 NO_EXPAND(@"SEL$1" )
             1          1          0 PQ_DISTRIBUTE(@"SEL$1" "E"@"SEL$1" NONE NONE)
             1          1          0 USE_MERGE(@"SEL$1" "E"@"SEL$1")
             1          1          0 LEADING(@"SEL$1"  "D"@"SEL$1" "E"@"SEL$1")
             1          1          0 NO_STAR_TRANSFORMATION(@"SEL$1" )
             1          1          0 NO_FACT(@"SEL$1" "E"@"SEL$1")
             1          1          0 NO_FACT(@"SEL$1" "D"@"SEL$1")
             1          1          2 FULL(@"SEL$1" "E"@"SEL$1")
             1          1          1 INDEX(@"SEL$1" "D"@"SEL$1" ("DEPT"."DEPTNO"))
             1          1          0 NO_REWRITE(@"SEL$1" )
             1          1          0 NO_REWRITE(@"SEL$1" )
    11 rows selected.so how would i use the 11 hints that i got from this hint...in my other DB....so now in my other DB i was a query like
    SELECT /* hints hints hints */ e.empno, e.ename, d.dname FROM emp e, dept d WHERE e.deptno = d.deptno;
    where hints are below ...
    NO_EXPAND(@"SEL$1" )
    PQ_DISTRIBUTE(@"SEL$1" "E"@"SEL$1" NONE NONE)
    USE_MERGE(@"SEL$1" "E"@"SEL$1")
    LEADING(@"SEL$1" "D"@"SEL$1" "E"@"SEL$1")
    NO_STAR_TRANSFORMATION(@"SEL$1" )
    NO_FACT(@"SEL$1" "E"@"SEL$1")
    NO_FACT(@"SEL$1" "D"@"SEL$1")
    FULL(@"SEL$1" "E"@"SEL$1")
    INDEX(@"SEL$1" "D"@"SEL$1" ("DEPT"."DEPTNO"))
    NO_REWRITE(@"SEL$1" )
    NO_REWRITE(@"SEL$1" )
    is that even do-able if so, how would my new query look like with all the hints ??

    yes i understand i need to hand code that into the sql...thats exactly what i want....
    how would i use the below hints from stored outline in my query ???
    NO_EXPAND(@"SEL$1" )
    PQ_DISTRIBUTE(@"SEL$1" "E"@"SEL$1" NONE NONE)
    USE_MERGE(@"SEL$1" "E"@"SEL$1")
    LEADING(@"SEL$1" "D"@"SEL$1" "E"@"SEL$1")
    NO_STAR_TRANSFORMATION(@"SEL$1" )
    NO_FACT(@"SEL$1" "E"@"SEL$1")
    NO_FACT(@"SEL$1" "D"@"SEL$1")
    FULL(@"SEL$1" "E"@"SEL$1")
    INDEX(@"SEL$1" "D"@"SEL$1" ("DEPT"."DEPTNO"))
    NO_REWRITE(@"SEL$1" )
    NO_REWRITE(@"SEL$1" )

  • Stored outlines & plan stability

    I am trying to use stored outlines, for plan stability (Oracle 8i).
    Oracle documents says that; the query from my
    application must literally match to the one
    in stored outline (OL$ table). Does that mean
    that the parameter value(s) also should
    match ??
    Example: The following query was stored
    in OL$ table, thru stored outlines procedure.
    select cust_name, sum(revenue)
    from accounts
    where country_code = '225'
    and account_type = 'C'
    group by cust_name;
    Now my question: Is it necessary that my application should throw exact same query,
    including parameter values (i.e.country_code)
    to take advantage of the store outline ?
    If I pass country_code = '436', does it make use of the stored outline or not ?
    Any input is highly appreciated, since this option is very useful in my application
    context.
    thanks and regards
    subbu

    The stored outline need not take the same parameter values .we can give different parameter values.In your case if country_code = '436', it makes use of stored outline.

  • Parallel query hint with stored outlines

    Hi,
    Can I use parallel query hint with stored outlines.
    Regards
    MMU

    I'm not quite sure what you're asking, since stored outlines themselves implement hints to try to maintain plan stability.
    If you're asking if stored outlines will utililze the parallel query hints I'd have to assume "yes" but would test the idea anyway.
    Message was edited by:
    riedelme

  • Stored Outlines on 10g as was on 9i

    Hi everyone,
    I built lots of stored outlines in 9i for our production database. The interface to do that by then was the java client/server enterprise manager.
    When I upgraded to 10g the only outlines I could find was the sql advisor from the web enterprise manager, but it do not let me customize the plans the way I did on 9i.
    I found out to be a packaged called dbms_sqltune, I wasn't able to do much with that package its kinda a way complex and less pratical.
    How do I create a stored outlines on 10g?
    Many will ask why to force a execution plan as the optimizer is very good? Well, in my experience sometimes the optimizer just don't know "business rules" enought to find the best execution plan for a report, he can guess on the cardinality of the columns but he can't guess that if a report is build to sales dept. then they will only use the 1000 and 1005 contracts on 99% of the cases that will represent a very small part of a huge table. To complete the scenario, many vendors do not open the code for us to "hint" their queries, so stored outlines was the way to go on those (many on my case) cases.
    Thanks in advance for comments!
    Ricardo Rodriguez

    Ricardo,
    Allow me to say a few words as I read your question just now.
    Stored outlines will do exactly what you mentioned.Stored outlines are used to make sure that optimizer wont go for another plan from what you had opted.That's the basic goal in making and conceptulating outlines.The same concept is also there in 11g with Sql Plan Baselines.Therefore, stored outlines and SQL plan baselines are used to:
    - ensure that a given execution plan is always used
    - do SQL tuning without changing the code of the application
    Stored outlines are indeed there in 10g.Please see this line here for 10gR2,
    http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/outlines.htm#sthref1341
    Now in the EM,there is no option(atleast I havenot seen one) to create them as the idea to use stored outlines never really got so popular.I agree those who use it,they like it very much but on a generic part, they were actualy a problem.Too many restrictions are there to implement and use them.
    In 10g, this funcionality seems to be missing, you cannot 'hand made' a exection plan for the query anymore, you could just click on the advice of the sql advisor and pray to him find an solution.
    In 10g the concept is enhanced a step further.Its always a bad idea to "hard-code" a plan for optimizer taking away its decision making sense.So Oracle is promoting for the same reasons which were there for outlines i.e. the query is a part of vendor application,you don't want to chance n number of parameters to tune one query only,they formulated stored profiles to do the job which does the same job but doesn't hard code the plan.SQL profiles are designed to provide to the query optimizer the information like:
    - execution environment (e.g. optimizer mode)
    - object statistics
    - corrections related to the estimations performed by the query optimizer
    As you can see, the aim of a SQL profile is "only" to change the environment in which the query optimizer works. The idea is that by changing the environment the query optimizer should be able to generated a more efficient execution plan.
    I guess you would be clear with the part now.I wont even sya that outlines store the plan itself.Stored outlines, SQL plan baselines and SQL profile do not plans. They store hints which can be used to make up a plan.Yes the option in 10g from GUI is to just create Stored Profiles but not Stored Outlines which stands as a manualy done task.
    Just my 2 cents on the topic.
    Aman....

  • Use of Stored Outlines

    I would like to know if the following workaround is possible thru' stored outlines...
    Can I create a stored outline for the following statement?
    SELECT TRIM(EMPNAME) FROM EMP WHERE EMPID=:B1 FOR UPDATE OF EMPNAME;
    Can I create a stored outline for the following statement?
    SELECT TRIM(EMPNAME) FROM EMP WHERE EMPID=:B1 FOR UPDATE;
    If the outlines could be created for both of the above sql statements, then I want to replace the outline for 1st sql with the outline of the 2nd sql...
    Let me know, if someone could help me on that as soon as possible...
    Thanks
    Siva

    ...and how exactly are the two SQLs different?There is a pretty big difference in terms of locking. When a 'select .... for update' statement doesn't have a 'of columnname' clause, the rows in ALL the select statement tables are locked. If the 'of columnname' clause is appended to the 'select .... for update' statement, only the rows in the table that have that column are locked. E.g.
    Session 1 SQL> select d.dname, e.empno from scott.dept d, scott.emp e where e.deptno = d.deptno for update;
    DNAME               EMPNO
    RESEARCH             7369
    SALES                7499
    SALES                7521
    RESEARCH             7566
    SALES                7654
    SALES                7698
    ACCOUNTING           7782
    RESEARCH             7788
    ACCOUNTING           7839
    SALES                7844
    RESEARCH             7876
    SALES                7900
    RESEARCH             7902
    ACCOUNTING           7934
    Session 2 SQL> update scott.dept set dname = 'Research' where dname = 'RESEARCH' ; .................Session 2 locks since session 1 holds exclusive locks on rows from emp and dept.
    Session 1 SQL> commit;
    Commit complete........going back to the locked session 2.....
    Session 2 SQL> update scott.dept set dname = 'Research' where dname = 'RESEARCH' ;
    1 row updated.
    Session 2 SQL> rollback;
    Rollback complete.Now lets try the select for update clause with the 'of columname' clause.
    Session 1 SQL> select d.dname, e.empno from scott.dept d, scott.emp e where e.deptno = d.deptno for update of empno;
    DNAME               EMPNO
    RESEARCH             7369
    SALES                7499
    SALES                7521
    RESEARCH             7566
    SALES                7654
    SALES                7698
    ACCOUNTING           7782
    RESEARCH             7788
    ACCOUNTING           7839
    SALES                7844
    RESEARCH             7876
    SALES                7900
    RESEARCH             7902
    ACCOUNTING           7934
    Session 2 SQL> update scott.dept set dname = 'Research' where dname = 'RESEARCH';
    1 row updated.As you can see, Session 2 does not lock.
    -Raj

  • Use Stored Outlines to replace ANALYZE  with "do nothing" ?

    Has anyone used Stored Outlines to replace statements like "ANALYZE TABLE abc COMPUTE STATISTICS" ?
    Say you have an application that issues a number of 'ANALYZE TABLE' statements at different times during a batch run and you want some of the ANALYZE calls to succeed (eg for tables 'stu' and 'xyz') but others to "do nothing" (eg for table 'abc').
    Could you replace "ANALYZE TABLE abc COMPUTE STATISTICS" with a (for example) "select 'x' from dual" call ?

    Hemant K Chitale wrote:
    Has anyone used Stored Outlines to replace statements like "ANALYZE TABLE abc COMPUTE STATISTICS" ?
    Say you have an application that issues a number of 'ANALYZE TABLE' statements at different times during a batch run and you want some of the ANALYZE calls to succeed (eg for tables 'stu' and 'xyz') but others to "do nothing" (eg for table 'abc').
    Could you replace "ANALYZE TABLE abc COMPUTE STATISTICS" with a (for example) "select 'x' from dual" call ?
    If i understood it right, you seem to mean query rewrite.
    As you know already, stored outline is a series of hints to guide optimizer to emulate previous plan.
    It cannot be used to replace query text itself.
    Advanced query rewrite(10g) seems to be promising, but it can only be used for select statement.
    Dion Cho
    PS) Rewriting query is very powerful, but very dangerous both for performance and security.
    That is maybe the reason why Oracle does not provide those kinds of functionality.

Maybe you are looking for

  • G50 won't switch to external display

    I've updated the Intel video driver to the latest, 6.14.10.4277, but I still can't get my external display to work with my G40 through the external VGA connector.  The display works with my R40, but not with my G40.  It doesn't even show anything dur

  • Make x64 default with "open with" menu

         Ive seen several threads to make x32 the default but not to many to make x64 the defualt. It appears that once the install is made I cannot only uninstall the 32 bit photoshop, only both at the same time. I have recently moved from cs4 to cs5. E

  • Which the best adapter vga to plug a data show on a macbook pro, mini displayport or thunderbolt?

    which the best adapter vga to plug a data show on a macbook pro, mini displayport or thunderbolt? Why? Thanks pals.

  • The USB is not Working any more

    Hello I have Ideapad Z510 laptop and suddenly the USB port is refusing to identify any thing, and at the device manager it says (Windows cannot verify the digital signature for the drivers required for this device. A recent hardware or software chang

  • Updating non-persistent fields in an Entity Object

    Hi, I wanted to add a non-persistent field to an Entity Object to use as a temporary aggregate field for a detail entity. It appears that storing data in the field makes it look like the master entity has been updated even though the value cannot be