Execute to Parse的意义

网友的提问:
AWR 中的"Execute to Parse"指标有何意义?

Execute to Parse 指标反映了执行解析比
其公式为 1-(parse/execute) , 目标为100% 及接近于只 执行而不解析
在oracle中解析往往是执行的先提工作,但是通过游标共享 可以解析一次 执行多次, 执行解析可能分成多种场景:
1.hard coding => 硬编码代码 硬解析一次 ,执行一次, 则理论上其执行解析比 为 1:1 ,则理论上Execute to Parse =0 极差,且soft parse比例也为0%
2.绑定变量但是仍软解析=》 软解析一次,执行一次 , 这种情况虽然比前一种好 但是执行解析比(这里的parse,包含了软解析和硬解析)仍是1:1, 理论上Execute to Parse =0 极差, 但是soft parse比例可能很高
3. 使用 静态SQL、动态绑定、session_cached_cursor、open cursors等技术实现的 解析一次,执行多次, 执行解析比为N:1, 则 Execute to Parse= 1- (1/N) 执行次数越多 Execute to Parse越接近100% ,这种是我们在OLTP环境中喜闻乐见的!
通俗地说 soft parse反映了软解析率, 而软解析在oracle中仍是较昂贵的操作, 我们希望的是解析1次执行N次,如果每次执行均需要软解析,那么虽然soft parse%=100% 但是parse time仍可能是消耗DB TIME的大头。
Execute to Parse反映了 执行解析比,Execute to Parse和soft parse% 都很低 那么说明却是没有绑定变量 , 而如果 soft parse% 接近99% 而Execute to Parse 不足90% 则说明没有执行解析比低, 需要通过 静态SQL、动态绑定、session_cached_cursor、open cursors等技术减少软解析。
Edited by: Maclean Liu on 2012-8-22 下午7:35
Edited by: Maclean Liu on 2012-8-22 下午7:38

Similar Messages

  • Performance Issue: Wait event "log file sync" and "Execute to Parse %"

    In one of our test environments users are complaining about slow response.
    In statspack report folowing are the top-5 wait events
    Event Waits Time (cs) Wt Time
    log file parallel write 1,046 988 37.71
    log file sync 775 774 29.54
    db file scattered read 4,946 248 9.47
    db file parallel write 66 248 9.47
    control file parallel write 188 152 5.80
    And after runing the same application 4 times, we are geting Execute to Parse % = 0.10. Cursor sharing is forced and query rewrite is enabled
    When I view v$sql, following command is parsed frequently
    EXECUTIONS PARSE_CALLS
    SQL_TEXT
    93380 93380
    select SEQ_ORDO_PRC.nextval from DUAL
    Please suggest what should be the method to troubleshoot this and if I need to check some more information
    Regards,
    Sudhanshu Bhandari

    Well, of course, you probably can't eliminate this sort of thing entirely: a setup such as yours is inevitably a compromise. What you can do is make sure your log buffer is a good size (say 10MB or so); that your redo logs are large (at least 100MB each, and preferably large enough to hold one hour or so of redo produced at the busiest time for your database without filling up); and finally set ARCHIVE_LAG_TARGET to something like 1800 seconds or more to ensure a regular, routine, predictable log switch.
    It won't cure every ill, but that sort of setup often means the redo subsystem ceases to be a regular driver of foreground waits.

  • Execute to Parse % is very low!!..need assistance

    HI,
    While looking in the statspack report, I found that under Instance efficiency area
    the percentage for 'Execute to parse' is 10.35% and rest of the percentage are as following:
    Buffer Nowait %: 99.89 Redo NoWait %: 100.00
    Buffer Hit %: 92.57 In-memory Sort %: 99.98
    Library Hit %: 99.86 Soft Parse %: 99.74
    Execute to Parse %: 10.35 Latch Hit %: 99.88
    Parse CPU to Parse Elapsd %: 81.74 % Non-Parse CPU: 96.19
    12040171 parses (31500 hard parses), 13430267 executions
    As per me, it is due to the high number of parsing compares to execution. Could anyone tell me that having a percentage for 'Exection to Parse" as above is considered ok? Is there any standard percentage for this parameter that a database should achieve?
    Thanks
    Ratheesh

    I am not sure lack of binding is the problem here
    Library Hit %: 99.86 Soft Parse %: 99.74
    Execute to Parse %: 10.35 Latch Hit %: 99.88
    12040171 parses (31500 hard parses), 13430267 executionsLibrary hit is 99.86 which shows the SQL is being shared and reused, hard parses that you would get if binds are not being used is low, soft parse however is high.
    Could be just ref cursor usage
    http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:904605517791
    http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:865497961356
    Or an application is forcing a parse
    http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:4032595293314
    Whatever the reason, it means you should leave cursor_sharing set to exact, as it will not positively affect the parse ratio, but can still have all the drawbacks already mentioned.

  • Statspack report, execute to parse %

    Hi guys,
    I am finding the Execute to Parse ratio very low in a database. What is the desired percentage for this. And its significance.
    Instance Efficiency Percentages (Target 100%)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Buffer Nowait %: 100.00 Redo NoWait %: 99.99
    Buffer Hit %: 99.92 In-memory Sort %: 99.95
    Library Hit %: 97.68 Soft Parse %: 95.13
    Execute to Parse %: 9.38 Latch Hit %: 99.99
    Parse CPU to Parse Elapsd %: 95.38 % Non-Parse CPU: 96.90
    Thanks
    KHAL

    What is the desired percentage for this ?Depends a lot on your database usage. For an OLTP database, this should be generally speaking much higher. For a datawarehouse, it is less important.
    But what really matters is the general database performance evaluated by its users: it is OK or slow or very slow ?
    See http://asktom.oracle.com/pls/ask/f?p=4950:8:2765691383260886028::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:4032595293314 to see what you can get and what you cannot get with these numbers.

  • Low Execute to Parse % and high soft parse %

    Hello Folks
    I am working on oracle 10g release2 on HP-UX
    After going through awr reports observed it have low Execute to Parse % but high soft parse % (Instance Efficiency Percentages)
    so cannot say issue with less use of bind variables,then what is cause of Execute to Parse %
    searched sites like ask.tom,burselon counsulting etc as usual they had given generic/diplomatic(escaping) replies on this
    like due to problem in application code,ineffecient sharing ,due to problem in database parameters etc
    without any clear indication for cause and solution like if some database parameters not set properly then should say which database parameters can be checked,cause due to more parsing and less execution
    please share if you had faced such issue and any suggestions to solve this
    examples why this could happen ,like possibilities in application code
    Thanks

      Load Profile
                                              Per Second       Per Transaction
                   Redo size:             11,685.79              3,660.98
                   Logical reads:             71,445.74             22,382.86
                   Block changes:                 70.89                 22.21
                   Physical reads:                 58.63                 18.37
                   Physical writes:                  2.80                  0.88
                   User calls:                652.93                204.55
                   Parses:                 48.39                 15.16
                   Hard parses:                  0.33                  0.10
                   Sorts:                  6.90                  2.16
                   Logons:                  0.23                  0.07
                   Executes:                 52.71                 16.51
                   Transactions:                  3.19
                % Blocks changed per Read:    0.10    Recursive Call %:    30.48
                Rollback per transaction %:    2.57       Rows per Sort:    29.66
        Instance Efficiency Percentages (Target 100%)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                 Buffer Nowait %:  100.00       Redo NoWait %:  100.00
                 Buffer  Hit   %:   99.92    In-memory Sort %:  100.00
                 Library Hit   %:   98.47        Soft Parse %:   99.32
                 Execute to Parse %:    8.19         Latch Hit %:   99.63
                 Parse CPU to Parse Elapsd %:   89.90     % Non-Parse CPU:   99.62There rdbms performs approximately 48 soft parse per second ,Soft Parse % and Library Hit very close to 99 it means there main part of sql are shared.Also here user calls similar high per second but executions less,however you should be try minimizing soft parsing.I do not know exactly for which interval you get this report but Execute to Parse % indicate that when executing query oracle can not find early cursor handles(open or closed) but it can find sql text and plan information from shared pool according hash values,in this case oracle perform soft parse again.In your case you also investigate shared pool size/fragmentation.To avoid little Execute to Parse % you can increase SESSION_CACHED_CURSORS or implement CURSOR_SPACE_FOR_TIME.So refer documentation and find how to use these parameters.

  • Execute to Parse % in AWR

    dear all
    I'm getting Execute to Parse % : -18.02 in my AWR report (with minus)
    Is it a bad thing and why it is below 0 ?
    thanks
    john

    user8779435 wrote:
    dear all
    I'm getting Execute to Parse % : -18.02 in my AWR report (with minus)
    Is it a bad thing and why it is below 0 ?
    As a general rule, ratios are a waste of space - they can't give you any quantitative information unless you are prepared to examine the underlying statistics.
    The best you can say is that a negative ratio (in an AWR) report is unexpected - you could argue that a negative ratio is either "bad" or the result of a reporting bug, but "bad" and "worth worrying about" aren't necessarily the same thing.
    This value is simply pointing out that the number of parse calls that are being counted is roughly 18% than the number of execute calls, and normally you might expect to do at least one execution of every statement you parse.
    Check the "Instance Activity" for 'parse count' and 'execute count' to get a better idea of how much activity you are looking at.
    Check "SQL ordered by parse count" to see if you can find statements which (for example) are parse twice for each execute, and if these statements come close to accounting for the difference you see in the numbers in the "instance activity". (There used to be some front-end environment that managed to send two parse calls per execute - but I can't remember the details off-hand, though I recall it was a simple configuration change to fix it.)
    There are other parts of the report that will tell you whether the extrac parse calls are worth pursuing at present: e.g. the "time model" statistics allow you to compare time spent in parsing with total DB time; the "instance activity" statistics show you the CPU time spent parsing - one of the numbers used to generate the ratio "% Non-Parse CPU:"
    Regards
    Jonathan Lewis

  • What is Execute to Parse % and how to tune it when it lower?

    What is Execute to Parse % and how to tune it when it is lower?

    Gjohn wrote:
    What is Execute to Parse % and how to tune it when it is lower?If you don't know what it is, how are you going to decide that you need to tune it.
    Here's a little information on how pointless it can be to get too worried about that particular "Instance Efficiency" percentage in Statspack and the AWR: http://jonathanlewis.wordpress.com/2006/12/27/analysing-statspack-2/
    Regards
    Jonathan Lewis
    http://jonathanlewis.wordpress.com
    http://www.jlcomp.demon.co.uk
    To post code, statspack/AWR report, execution plans or trace files, start and end the section with the tag {noformat}{noformat} (lowercase, curly brackets, no spaces) so that the text appears in fixed format.
    "There's no sense in being precise when you don't even know what you're talking about"
    John von Neumann                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

  • Execute to parse ratio is 49 any problem

    Hi ,
    execute to parse ratio is 49 any problem ?

    I assume you're looking at a Statspack or AWR report?
    First, it's important to understand what the Parse to Execute ratio is.
    It's calculated as:
    round(100*(1-:prse/:exe),2)So, the idea is, for a given SQL statement, in the ideal world, you parse it once, and execute it many times. If you do that, your Parse to Execute ratio will tend towards 100%. 100% is a "perfect score".
    As you parse more and more, relative to executions, the ratio will fall. If you parse once per execution, your Parse to Execute ratio will go to 0%. That's not good, but, it could actually be even worse than that. Some brain dead applications actually do more parses than executions. If that happens, your Parse to Execute ratio will go negative.
    So, is 49 "bad"? What is bad? Well, that depends. While it's true that any Parse to Execute ratio that's less than the high 90s could potentially be improved, the question really is how much will that benefit your system?
    So, you need to ask yourself some questions. First, do you even have a performance probem? If not, then any effort spent tuning the system is almost certainly a waste of time. If you do have a performance problem, you should be profiling the critical business processes, to analyze and understand where they are spending their time. If one or more, poor performing, critical business processes is spending excessive time on parsing, then it may be worth looking at what's going on.
    In general, ratios such as Parse to Execute, buffer cache hit, etc, are almost never useful in isolation. However, if all you have is an AWR or Statspack report, and you're trying to understand if the Parse to Execute ratio needs attention, then you should look at a few other numbers in the report. Look at the Top 5 Timed events; do any of them have anything to do with parsing? If not, then parsing is probably not an issue. Look at % Non-Parse CPU; if it's very high, say in the 90s, then almost certainly parsing is not a significant issue, so who cares about the Parse to Execute ratio?
    Finally, if you do think that, in your case, Parse to Execute ratio is a problem, it's important to know that the only way to improve it is by reducing the number of parses or increase the numbers of executions. And, the only way to change number of parses or number of executions, is by changing the client program. There is no instance level adjustment or parameter that will have any effect on that statistic.
    Hope that helps you understand how to interpret that statistic,
    -Mark

  • Execute to Parse %

    Hi All,
    while i am checking AWR Report i am getting Execute to Parse %: -0.79
    When i check cursor_sharing parameter it is set to EXACT
    In my view shall i switch it to force or not

    Vikas Kohli wrote:
    Load Profile
         Per Second     Per Transaction
    Redo size:     175,185.67     252,714.86
    Logical reads:     11,961.83     17,255.59
    Block changes:     183.62     264.89
    Physical reads:     333.09     480.50
    Physical writes:     18.18     26.22
    User calls:     4.53     6.54
    Parses:     21.03     30.34
    Hard parses:     0.01     0.01
    Sorts:     0.66     0.95
    Logons:     0.07     0.11
    Executes:     20.87     30.10
    Transactions:     0.69     
    % Blocks changed per Read:     1.54     Recursive Call %:     92.84
    Rollback per transaction %:     2.30     Rows per Sort:     ########I beleive you have shared it for 1hr time. Looking at this Hard parsing is not an issue. So more then half of your problem is solved here. Next you can check how about the soft parsing.
    Have you looked at thead : execute to parse ratio is 49 any problem ?
    Also please check whats the ration for % Non-Parse CPU ? If its high, near to 90 then parsing is not a problem for you. HOPE This Help

  • Need to find sql/users that is parsing but NEVER executing

    hello all,
    I have been trying to figure out how to find sql or user who are pharse sql but not executing them. thats becoz my execute to prase % in my AWR report is negative. meaning someone is parsing statements and NEVER executing them. They are just chewing up your CPU, latching the shared pool, killing your performance.
    which is not a good thing and i want to find out what user is doing that or what SID or what sql is diong whats its doing. How can i find that out. Any querys out there to do that or ?? THANKS
    this is 10.2.0.3 on AIX. and here is part of AWR
    Instance Efficiency Percentages (Target 100%)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                Buffer Nowait %:  100.00       Redo NoWait %:  100.00
                Buffer  Hit   %:   80.74    In-memory Sort %:   99.10
                Library Hit   %:   92.95        Soft Parse %:   91.24
             Execute to Parse %:  -31.89         Latch Hit %:   99.99
    Parse CPU to Parse Elapsd %:   87.32     % Non-Parse CPU:   99.92
    Edited by: user630084 on Mar 13, 2009 7:51 AM

    true i can use that, I am getting about 8 rows out of it and there are about 100+ connections as of now. But here is the thing. As the app use only one schema(lets call it scott). Everybody login thru that schema (scott/tiger)...so that 87 rows that i am getting..all of them are parsing_schema_name=scott and parsing_user_id=55 ..........but i need those 8 users SID...so i can pin point...hey u are the one who is just prasing and not executing...if you know what i mean...so i need that SID...i got the parsing_schema_name and parsing_user_id...but need the SID...so how can i get that ???

  • Parse RSS feed -System.out

    Hi,
    As below i have been reading RSS feeds.
    When i execute the parser.parse(url) method i get a dump of the xml bones from the feed onto System.out, which in my case is a catalina log file.
    Is there any way/method that im not aware of that can prevent this going to System.out?
    public void readRSSDocument() throws Exception {
            //Create the parser
            RssParser parser = RssParserFactory.createDefault();
            //Parse our url
            Rss rss = parser.parse(
                    new URL("http://rss.cnn.com/rss/cnn_world.rss"));
        }output:
    <rss>
    <channel>
    <title>
    </title>
    <link>
    </link>
    <description>
    </description>
    <language>
    </language>
    <copyright>
    </copyright>
    <pubDate>
    </pubDate>
    <ttl>
    </ttl>
    <image>
    <title>
    </title>
    <link>
    </link>
    <url>
    </url>
    <width>
    </width>
    <height>
    </height>
    <description>
    </description>
    </image>
    <atom10:link>
    </atom10:link>
    <atom10:link>
    </atom10:link>
    <item>
    <title>
    </title>
    <guid>
    </guid>
    <link>
    </link>
    <description>
    </description>
    <pubDate>
    </pubDate>
    <feedburner:origLink>
    </feedburner:origLink>
    </item>
    <item>
    <title>
    </title>
    <guid>
    </guid>
    <link>
    </link>
    <description>
    </description>
    <pubDate>
    ..

    I am presuming that you picked up the code from [this tutorial|http://java.sun.com/developer/technicalArticles/javaserverpages/rss_utilities/]
    Looks like the library was compiled with System.out.println() statements in it.
    There is always the handy little method "System.setOut()" to redirect it.
    Alternatively, decompile the code, delete/comment the System.out.println statements and then recompile it.
    Its not that hard. Here's the offending class:
    // Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
    // Jad home page: http://www.kpdus.com/jad.html
    // Decompiler options: packimports(3)
    // Source File Name:   DocumentHandler.java
    package com.sun.cnpi.rss.handlers;
    import com.sun.cnpi.rss.elements.Element;
    import com.sun.cnpi.rss.elements.Rss;
    import java.io.PrintStream;
    import java.util.*;
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    // Referenced classes of package com.sun.cnpi.rss.handlers:
    //            NullElementHandler, ElementHandler, HandlerException
    public class DocumentHandler extends DefaultHandler
        public DocumentHandler()
            handlers = new HashMap();
            handlerStack = new Stack();
            parentStack = new Stack();
            rss = new Rss("rss");
            handlers.put(null, new NullElementHandler());
            parentStack.add(rss);
        public void registerHandler(String key, ElementHandler handler)
            handlers.put(key.toLowerCase(), handler);
        public void addToParentStack(Element parent)
            parentStack.add(parent);
        public Element popFromParentStack()
            return (Element)parentStack.pop();
        public Element peekParentStack()
            return (Element)parentStack.peek();
        public void startElement(String uri, String localName, String qName, Attributes attributes)
            throws SAXException
            //System.out.println("<" + qName + ">");
            try
                ElementHandler currentHandler = (ElementHandler)handlers.get(qName.toLowerCase());
                handlerStack.add(currentHandler);
                if(currentHandler != null)
                    Element parent = (Element)parentStack.peek();
                    currentHandler.startElement(this, parent, uri, localName, qName, attributes);
            catch(HandlerException e)
                e.printStackTrace();
            super.startElement(uri, localName, qName, attributes);
        public void characters(char ch[], int start, int length)
            throws SAXException
            StringBuffer buffer = new StringBuffer();
            Element element = (Element)parentStack.peek();
            if(element.getText() != null)
                buffer.append(element.getText());
            buffer.append(ch, start, length);
            element.setText(buffer.toString());
            super.characters(ch, start, length);
        public void endElement(String uri, String localName, String qName)
            throws SAXException
            //System.out.println("</" + qName + ">");
            if(!handlerStack.isEmpty())
                try
                    ElementHandler currentHandler = (ElementHandler)handlerStack.pop();
                    if(currentHandler != null)
                        Element parent = (Element)parentStack.peek();
                        currentHandler.endElement(this, parent, uri, localName, qName);
                catch(HandlerException e)
                    e.printStackTrace();
            super.endElement(uri, localName, qName);
        public Rss getRss()
            return rss;
        private Map handlers;
        private Stack handlerStack;
        private Stack parentStack;
        private Rss rss;
    }

  • Running DBMS_SQL.EXECUTE in Oracle Select Statment

    HI i have table Emp which has 3 column namely name,st_date and end_date. table has 3 records as below:
    name st_date end_date
    X sysdate+10 sysdate+50
    Y sysdate+12 sysdate+30
    Z sysdate+15 sysdate+35
    Now if i run the run select statment select * from emp, it will show above values. but i need the values in the columns to be executed and shown in the select statemtn with alias column i.e. assign sysdate is : 01-jan-2013
    so i need the o/p to be:
    X 20-Jan-2013 19-Feb-2013
    Y 22-Jan-2013 30-Jan-2013
    Z 15-Jan-2013 04-feb-2013
    i dont want to create a function in plsql and pass the values to it. if u use select name,dbms_sql.execute(dbms_sql.parse(dbms_sql.open(),'select st_date from emp'))) is ok for me.
    Advance Thanks for your help!!
    i have restriction not able to create function, so i need to try in the sql statment only!!

    997199 wrote:
    HI i have table Emp which has 3 column namely name,st_date and end_date. table has 3 records as below:
    name st_date end_date
    X sysdate+10 sysdate+50
    Y sysdate+12 sysdate+30
    Z sysdate+15 sysdate+35
    Now if i run the run select statment select * from emp, it will show above values. but i need the values in the columns to be executed and shown in the select statemtn with alias column i.e. assign sysdate is : 01-jan-2013
    so i need the o/p to be:
    X 20-Jan-2013 19-Feb-2013
    Y 22-Jan-2013 30-Jan-2013
    Z 15-Jan-2013 04-feb-2013
    i dont want to create a function in plsql and pass the values to it. if u use select name,dbms_sql.execute(dbms_sql.parse(dbms_sql.open(),'select st_date from emp'))) is ok for me.
    Advance Thanks for your help!!
    i have restriction not able to create function, so i need to try in the sql statment only!!How do I ask a question on the forums?
    SQL and PL/SQL FAQ
    what datatype are st_date & end_date?

  • Oracle parsing SQL with Hibernate

    Hi,
    I build an J2EE application using framework Hibernate. After auditing DBA on any scenario from my soft, I note all request SQL executed are parsed. Same request, using "bind variable", so identical, is parse as many time it execute (ratio 1/1)... Not really powerful, isn't it?
    Did somebody already encounter the problem?
    Thanks

    This sort of technical question needs to be addressed to one of the technical forums. Products | Database | SQL and PL/SQL would seem to be appropriate here.
    Have you tried applying the latest patchset for your database? Seems to work for me on 9.2.0.5
    SCOTT @ HP92 Local> select * from (
      2  select dept.*,emp.ename from dept
      3  left outer join emp on (emp.deptno=dept.deptno)
      4  )
      5  where (deptno) in
      6  (
      7  select deptno a from
      8  (
      9  select deptno,dname from dept where deptno=10
    10  UNION ALL
    11  select deptno,dname from dept where deptno=20
    12  )
    13  )
    14  /
        DEPTNO DNAME          LOC           ENAME
            10 ACCOUNTING     NEW YORK      CLARK
            10 ACCOUNTING     NEW YORK      KING
            10 ACCOUNTING     NEW YORK      MILLER
            20 RESEARCH       DALLAS        SMITH
            20 RESEARCH       DALLAS        JONES
            20 RESEARCH       DALLAS        SCOTT
            20 RESEARCH       DALLAS        ADAMS
            20 RESEARCH       DALLAS        FORD
    8 rows selected.
    SCOTT @ HP92 Local> select * from v$version;
    BANNER
    Oracle9i Enterprise Edition Release 9.2.0.5.0 - Production
    PL/SQL Release 9.2.0.5.0 - Production
    CORE    9.2.0.6.0       Production
    TNS for 32-bit Windows: Version 9.2.0.5.0 - Production
    NLSRTL Version 9.2.0.5.0 - ProductionJustin
    Distributed Database Consulting, Inc.
    http://www.ddbcinc.com/askDDBC

  • Parse CPU to Parse Elapsd %:  = 0.01

    Hello;
    my database 11.1.0.7 the AWR report shows me the following measures and I need your advices in how to increase the DB performance.
    Instance Efficiency Percentages (Target 100%)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Buffer Nowait %: 99.99 Redo NoWait %: 98.26
    Buffer Hit %: 99.96 In-memory Sort %: 100.00
    Library Hit %: 85.72 Soft Parse %: 77.76
    Execute to Parse %: 49.00 Latch Hit %: 99.87
    Parse CPU to Parse Elapsd %: 0.01 % Non-Parse CPU: 93.44
    Top 5 Timed Foreground Events
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Avg
    wait % DB
    Event Waits Time(s) (ms) time Wait Class
    DB CPU 13,602 51.9
    knpc_anq_AwaitNonemptyQueue 957 4,641 4849 17.7 Other
    direct path read 1,698,099 1,053 1 4.0 User I/O
    log file switch (checkpoint in 5,171 466 90 1.8 Configurat
    Replication Dequeue 146,059 395 3 1.5 Other
    Memory Statistics
    ~~~~~~~~~~~~~~~~~ Begin End
    Host Mem (MB): 63,841.0 63,841.0
    SGA use (MB): 16,960.0 16,960.0
    PGA use (MB): 542.1 475.7
    % Host Mem used for SGA+PGA: 27.42 27.42
    Thanks and best regards
    Ali

    801294 wrote:
    my database 11.1.0.7 the AWR report shows me the following measures and I need your advices in how to increase the DB performance.
    Instance Efficiency Percentages (Target 100%)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Buffer Nowait %:   99.99                                Redo NoWait %:   98.26
    Buffer  Hit   %:      99.96                                In-memory Sort %:  100.00
    Library Hit   %:      85.72                                Soft Parse %:   77.76
    Execute to Parse %:   49.00                            Latch Hit %:   99.87
    Parse CPU to Parse Elapsd %:    0.01              % Non-Parse CPU:   93.44
    Top 5 Timed Foreground Events
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Avg                 
    wait         % DB          
    Event                                               Waits            Time(s)       (ms)        time       Wait Class
    DB CPU                                                                13,602                        51.9          
    knpc_anq_AwaitNonemptyQueue         957              4,641          4849        17.7        Other    
    direct path read                                 1,698,099     1,053          1             4.0          User I/O 
    log file switch (checkpoint in               5,171            466             90           1.8          Configurat
    Replication Dequeue                          146,059         395             3             1.5          Other 
    Memory Statistics
    ~~~~~~~~~~~~~~~~~                       Begin          End
    Host Mem (MB):                   63,841.0     63,841.0
    SGA use (MB):                    16,960.0     16,960.0
    PGA use (MB):                     542.1         475.7
    % Host Mem used for SGA+PGA:         27.42          27.42
    Your title points us at one of the Instance Efficiency ratios - don't bother looking at them, they're basically a waste of time and source of confusion.
    a) How many CPUs in your machine
    b) What's the snapshot interval (we could assume it's the default 1 hour, but it's best to be sure)
    c) Is there any other application or database running on the same machine
    d) Since you seem to have the licence to run AWR, why haven't you checked the ADDM report that goes with this AWR report
    Observations
    A very large fraction of your time is spent on CPU - what is that CPU time doing, and can you do less of it (e.g. check SQL ordered by CPU).
    You are doing a very large number of direct path reads, that means you are using a large amount of CPU to examine a large number of blocks - what process is doing this, and is it necessary at this point. Check SQL ordered by reads, check segments by physical reads and (if it's in 11.1.0.7) segments by direct reads. Those reads are very fast (1ms) so there's a reasonabl chance they're coming from a file-system cache - why do you have a database with a 16GB SGA when the machine has 64GB of RAM ?
    You're spending some time "checkpoint incomplete" - the ADDM would probably tell you to increase the size or number of your log files. This won't make things much faster, but it's very easy to do and a low risk change so you might as well do it/
    I've never seen: "knpc_anq_AwaitNonemptyQueue", so I'd have to check the manuals, MOS, and google for it, but my first though is that an average wait time of 4849 ms might mean that it's a "mostly idle" event with a timeout of 5 seconds, so I'd check v$system event to see how many timeouts have happened compared to number of waits. Since its name includes the word queue, and you also have waits on "Replication Dequeue" (which is another I've not come across before) I'd be inclined to guess that the two waits are some how linked, and that you're doing some sort of replication into this database - and that might explain pressure of the redo log which could be why your log files are too small (or too few).
    If I combine your "% Non-Parse CPU: 93.44" with your CPU time 13,602 seconds, that's about 900 seconds - significant, but not worth pursuing until you've dealt with the direct path reads and more of the 93.44%. (Bear in mind that the CPU spent by Oracle is not the only CPU used by the machine, and those direct path reads may be causing a lot of O/S CPU to be used as well.) (Note: what's the point of a ratio if the first thing you have to do with it to make it useful is to multiply it by something else ?
    http://jonathanlewis.wordpress.com/2006/12/27/analysing-statspack-2/ )
    Strategy
    Find out what's causing the direct path reads - that's probably going to change the whole profile if you can eliminate most of that work.
    Regards
    Jonathan Lewis
    http://jonathanlewis.wordpress.com
    Author: <b><em>Oracle Core</em></b>

  • STATSPACK & parse

    Hi,
    I don't understand into statsreport the difference betwwen two indicators :
    Execute to Parse %: 70.11
    and
    Soft Parse %: 45.17
    Anybody can explain me, please ?
    Nicolas.

    Nicolas,
    Read metalink Note:228913.1, its a good reference for reading and understanding statspack report.
    soft parse means, your statement already exists in the library cache and doesn't required hard parse.
    exec to parse: a typical recommend is that parse once and execute no. of times. Please do read the above mentioned metalink note where you can clearly understand of them.
    SJH
    OCP DBA

Maybe you are looking for