Influencing the optimizer

Can anyone please tell me what are the objects are there which actually influcenes the optimizer.
Thanks
rajat

Technically, even white space can influence the optimizer... Different amounts of white space for the "same" query result in different sql_id's which result in separate parse events which may get different statistics (particularly if dynamic sampling is involved) or which may generate different plans because it peeked at the bind variable and there was a different value than had been used with the prior query).
SQL> conn scott/tiger
Connected.
SQL> create table a( col1 number );
Table created.
SQL> select * from a;
no rows selected
SQL> select  *  from a;
no rows selected
SQL> select sql_id, sql_text from v$sql where sql_text like '%from a';
SQL_ID
SQL_TEXT
am8q8kudm02v9
select * from a
59m99ygm47quf
select  *  from aJustin

Similar Messages

  • Constant declaration and the optimizer

    Assume there is a Plsql package A with a defined constant 'constA'
    Assume we have an sql query in PLSQL package B that references A.constA.
    Will the optimizer always give the same plan for the query whether I used the literal constant or the reference A.constA?
    I assume that replacement of references to A.constA would have to be don't before the optimizer begins it's evaluation. I assume that does not happen; therefore, using A.constA has prevented the optimizer from using the statistics on the table.
    Ie. It is true that use of literals may provide better performance than references to declared constants.

    Hi,
    Will the optimizer always give the same plan for the query whether I used the literal constant or the reference A.constA?Assuming bind peeking is not turned off and all other parameters influencing CBO are the same - yes.
    "The same plan" in this context means not "the same piece of memory in library cache", but "the same execution path", because query with literal and a constant will result in different SQL queries, hence different shareable parent cursors.
    It is true that use of literals may provide better performance than references to declared constants.Yes. If you have a constant to use in SQL, then it's better to use it as a literal rather than bind (using a PL/SQL constant in a query results in using bind variable - but maybe that behavior will be changed sometime).
    The main issue with using binds for constant is a case you use several constants for exactly the same query and there's data skew. CBO is not doing well with that until 11g (which introduced adaptive cursor sharing).

  • Is it possible to force 16/32-bit stack alignment without using the optimizer?

    The compiler emits code targeted at the classic Pentium architecture for the -m32 memory model.  I'm running into problems mixing Sun Studio compiled code with code built with other compilers because the other compiler builds under the assumption that the stack is 16-byte aligned.
    The only way I've found to force Sun Studio to comply with that restriction is with -xarch={sse2a,sse3,...}, but this causes the code to pass through the optimizer.  As noted in the documentation, if you want to avoid optimizations you must remove all flags that imply optimizations -- that is to say, there's no way to disable optimizations once enabled.  This should not, however, be treated as an optimization because it's an ABI requirement.
    I've scoured the documentation, spent many hours googling, digging through forums, and asking questions.
    The best I've come up with is the -xarch option which is sub-optimal because it has side effects.  I tried -xchip=pentium4 (this is what my other compilers have set as their default target), but the generated code doesn't force 16-byte stack alignment.
    Is there a way to force the compiler to emit code conforming to a different ABI without using the optimizer?
    -Brian

    Thank you for your response.
    I hope you won't mind my asking: do you have a way to prove that it's not possible to force 16-byte alignment without using the optimizer?  I ask because your username / profile don't give the impression you work for Oracle, so while I think you're probably right it's at least possible that we're both mistaken.  I haven't been able to find any documentation on either stack alignment or altering the targeted ABI short of using the -xarch flag, and even there the details are fairly sketchy.
    -Brian

  • Exchange rate diff. influencing the available cost of WBS-element

    Hi all,
    here is a intricate problem I need help to solve. I am not so very experienced withon CO/PS, my main competence is within PM. This issue involves PM/MM/PS and CO so I am not sure if this is the correct group to post to, but I give it a try..
    In PM (Plant Maintenance) workorders the u201DPlanned Costu201D is calculated.  Exchange rate type for the u201DPlanned costu201D is picked from the CO Cost Version u201D0u201D that uses exchange rate type u201DPu201D. This is a exchange rate type that have one yearly fixed exchange rate. The actual costs are posted with exchange rate type M, which is daily updated.
    The Planned cost in the workorder is a part of the u201DAssigned Costu201D that are influencing the available budget on the WBS-element. u201DRemaining/Residual order planu201D.
    In cases where the PRQ/PO are created in other currency than the Company code currency we have a problem:
    The difference in exchange rate are causing the u201DAvailable budgetu201D to be too low u2013 and the only workaround I have found is to decrease the planned cost in the WO to release the available cost for the Budget. (make the available cost higher )
    Does anyone have an idea how to solve this?
    - I have thought of setting the exchange rate type for the planned cost to be the same as for the actual costs u2013 but it is not recommended to change the exchange rate type in CO for cost version u201D0u201D and not a good ide to change the exchange rate type for actual cost eather. This will also not solve the problem of exchange rate difference caused by PRQ/PO beeing created for a whole year for varying exchange rates.
    - Is there a way to exclude the u201D Remaining/Residual order planu201D from the u201DAssigned Costu201D? And what consequences will this have? Only cost from PRQ/PO will appear? (Since internal material (reservations) and internal hours not triggers a PRQ/PO)? I see there is a transaction CJE5 where you can exclude the u201D Remaining/Residual order planu201D from the u201DAssigned costu201D u2013 but I think this will only exclude it from beeing shown in the report S_ALR_87013558?- not from the calculation of available cost at the WBS-element?  which is what I need. (see Note 668240)
    -Is there any u201DExchange rate differenceu201D setting in the customizing u2013 how exchange rate difference are treated for PM orders? And will this help my problem?
    Best regards
    Ellen

    Hi ,
    try this way...
    Go to T-code>CJE0>Enter CO Area-->and execute the report 12KST1A  ->in the selection screen -->
    go to menu -->system -->status check the program name and ...copy
    next go to se38 and copy yhe above program name and execute and use submit report with selections,,,,
    Prabhudsa

  • Can I trust the optimizer to do the right thing every time?

    Hello,
    I have a Business Objects report that is performing poorly, I kind of found something akin to a solution but I'd like a second (and third, and...) opinion about is suitability. I don't know much about BO, so I'll stick to the SQL part.
    So, the query looks something like that:
    SELECT ..... FROM
    -- this is the generic part of the report
    < long list of ANSI joins here>
    RIGHT JOIN some_table ON (conditions - non parametrizable from the report - not allowed by BO)
    <some more joins for good measure>
    -- end of the generic part, up to here nothing can take user parameters
    WHERE
    -- this is the specific part, from here on, the conditions can take user parameters
    some_column = @some_param
    ....So far so simple. Now, I'm trying to find a way to push some user defined parameters in the generic part.
    I can to this using package variables, something like that (very simplified form) :
    CREATE OR REPLACE PACKAGE vars AS
    my_filter VARCHAR2(100);
    FUNCTION set_filter(filter_val IN VARCHAR2) return number;
    END vars;
    CREATE OR REPLACE PACKAGE BODY vars AS
    FUNCTION set_filter(filter_val IN VARCHAR2) return number DETERMINISTIC IS
          my_filter := filter_val;
          return 1;
    END set_filter;
    END vars;And ask the developers to rewrite the report like that:
    SELECT ..... FROM
    -- this is the generic part of the report
    < long list of ANSI joins here>
    RIGHT JOIN some_table ON (conditions  - as above
                                                    *AND my_varchar_column = vars.my_filter*)
    <some more joins for good measure>
    -- end of the generic part, up to here nothing can take user parameters
    WHERE
    -- this is the specific part, from here on, the conditions can take user parameters
    some_column = @some_param
    *AND vars.set_filter('some text here') = 1*
    ....The question is, can I trust the optimizer to evaluate my where clause (thus executing set_filter) before trying to enter the joins?
    I know that this works nicely with conditions like "1=0", in this case it doesn't even bother to read the tables involved. But can I assume it will do the same with a pl/sql function? Always?
    In my tests it seems to work but obviously they are not exhaustive. So I guess what I'm asking is, can anyone imagine a scenario where the above would fail?
    Thanks,
    Iulian
    Edited by: Iulian J. Dragan on Feb 27, 2013 2:57 AM

    Iulian J. Dragan wrote:
    Even though I tell the optimizer, "look, this function is ridiculously expensive, plus it won't filter any rows" it keeps evaluating it first.
    So it looks like not only can I rely on Oracle to evaluate a literal expression first, much as I try I can't make it behave otherwise.
    Still, this is only empirical, I wouldn't use it in a production environment. Probably...Iulian,
    I think I understand what you are trying to do here. Something like using cost to drive the optimizer to process the SQL statement "procedurely"...
    But I believe SQL, by definition, is a set-based language and this means one can not rely on the way an SQL statement is executed by the oracle engine.
    I believe this is good in most of the situations. However, I understand that it is possible that one may want to use his/her knowledge of the data to write
    SQL so that it is more efficient. CBO, being a software, has its limitations and may not always make the right decision, depending upon complexity of rewrite.
    I don't know enough about your original problem, which involves a third-party product i.e. Business Objects, but there is a way in your example to enforce
    the sequence in which he functions are called.
    Here is your code, as it is, producing the results that you have demonstrated:
    SQL> select * from v$version ;
    BANNER
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
    PL/SQL Release 11.2.0.1.0 - Production
    CORE     11.2.0.1.0     Production
    TNS for Linux: Version 11.2.0.1.0 - Production
    NLSRTL Version 11.2.0.1.0 - Production
    SQL> create table testtab(n number) cache;
    Table created.
    SQL> insert into testtab values(1);
    1 row created.
    SQL> commit;
    Commit complete.
    SQL> exec dbms_stats.gather_table_stats(user, 'TESTTAB', METHOD_OPT=>'FOR ALL COLUMNS SIZE 1');
    PL/SQL procedure successfully completed.
    SQL> create or replace function testfunc(p in varchar2)
      2  return number
      3  as
      4  begin
      5    dbms_application_info.set_client_info('executed with argument ' || p);
      6    return 1;
      7  end testfunc;
      8  /
    Function created.
    SQL> select * from testtab where n=5 and testfunc('no worries')=1;
    no rows selected
    SQL> select sys_context('USERENV', 'CLIENT_INFO') from dual;
    SYS_CONTEXT('USERENV','CLIENT_INFO')
    executed with argument no worries
    SQL> create or replace function testfunc(p in varchar2)
      2  return number
      3  as
      4  begin
      5    dbms_application_info.set_client_info(sys_context('USERENV', 'CLIENT_INFO') || '|testfunc with argument ' || p);
      6    return 1;
      7  end testfunc ;
      8  /
    Function created.
    SQL> create or replace function testfunc2(p in varchar2)
      2  return number
      3  as
      4  begin
      5    dbms_application_info.set_client_info(sys_context('USERENV', 'CLIENT_INFO') || '|testfunc2 with argument ' || p);
      6    return p;
      7  end testfunc2;
      8  /
    Function created.
    SQL> EXEC dbms_application_info.set_client_info('');
    PL/SQL procedure successfully completed.
    SQL> select * from testtab where testfunc2(n)=5   and testfunc('am I first?')=1;
    no rows selected
    SQL> select sys_context('USERENV', 'CLIENT_INFO') from dual;
    SYS_CONTEXT('USERENV','CLIENT_INFO')
    |testfunc with argument am I first?|testfunc2 with argument 1
    SQL> EXEC dbms_application_info.set_client_info('');
    PL/SQL procedure successfully completed.
    SQL> select * from testtab where testfunc2(n)=1 and testfunc('so lonely...') = 0;
    no rows selected
    SQL> select sys_context('USERENV', 'CLIENT_INFO') from dual;
    SYS_CONTEXT('USERENV','CLIENT_INFO')
    |testfunc with argument so lonely...I have left out the statistics association part above as I believe it does not affect.
    And below is the rewritten queries that result in functions being called in specific order
    SQL> EXEC dbms_application_info.set_client_info('');
    PL/SQL procedure successfully completed.
    SQL> select * from testtab where decode(testfunc2(n),5,testfunc('am I first?'))=1;
    no rows selected
    SQL> select sys_context('USERENV', 'CLIENT_INFO') from dual;
    SYS_CONTEXT('USERENV','CLIENT_INFO')
    |testfunc2 with argument 1
    SQL> EXEC dbms_application_info.set_client_info('');
    PL/SQL procedure successfully completed.
    SQL> select * from testtab where decode(testfunc2(n), 1, testfunc('so lonely...')) = 0;
    no rows selected
    SQL> select sys_context('USERENV', 'CLIENT_INFO') from dual;
    SYS_CONTEXT('USERENV','CLIENT_INFO')
    |testfunc2 with argument 1|testfunc with argument so lonely...One can also use the more flexible CASE expressions in place of DECODE.
    Hope this helps.

  • How can I influence the JAX-RPC response message from a void method

    Hello,
    I used WSDL2Java to create a web service. This service seems to work but the xsi:type="somename" attributes are not included in the response. I want to get them in. Or, otherwise, I want the push webservice just to send an acknowledge message. Because, our client that's pushing the webservice message to us gets error messages.
    But, while the webservice is a push service I don't know how to influence the returning soap envelope. This is the webservice method I mean:
    public void putDatex2Data(eu.datex2.schema._1_0._1_0.holders.D2LogicalModelHolder body) throws java.rmi.RemoteException {
    //the code
    Furthermore, has someone good examples of implementations that help to get the real incoming XML message data in a easy way.
    Thanks.

    No, that's not a feature of the phone.
    You can submit feedback to Apple requesting such a feature here:
    http://www.apple.com/feedback

  • Change in AUOM not influencing the SOP Disaggregation

    We are doing SOP flexible planning at Product group level . Once we generate the online forecast we are disaggregating to the member level from the product group . This disaggregate based on AUOM maintained in the material master. It was working fine. We changed the AUOM in the material master. the change in AUOM is not reflecting in the disaggregation factor of SOP. Still it is considering old value .
    Any input will be highly appreciated .
    Thanks
    JJ

    Hello,
    not really sure that I understood problem correctly, but try the next:
    - analyse optimizer log file, it lists all pegging relationships that have been broken if any. Check orders/products and try to undertand why it was happen, i.e. resource unavalability, Maximum Earliness of a Receipt is too short or there are too many orders with priority 1.
    - check planning results: if there are already orders in the past, i.e. pegging is already broken. If the pegging is already broken, optimizer will NOT re-establish it.
    - set "Ignore upstream orders" and "validity period of orders as soft constraint " in the optimizer profile
    kind regards
    Alla

  • Hiding the Optimizer button from the DS planning board

    Hi
    How to hide the optimizer button from the DS planning board ..
    Thanks

    Hi Chak
    I think the problem may be with a livecache inconsistency. The Planning Board should be reading it's information from the livecache, whereby the Product View may be getting it's situation from the database. Try running the livecache consistency checks if it occurs again.
    Regards

  • Influence the RRI

    Hello together,
    i've defined 2 queries in 2 different webtemplates.
    In Webtemplate A the user can select a year and the
    query A uses the year as a variable. THe Query shows
    data for the selected year and the previous year.
    Now i've defined a RRI from Query A to jump to Webtemplate B.
    The Problem is, webtemplate has to be opend with the selected year. If the user uses the RRI on a chart-bar for the last year, webtemplate B is opened with last year.
    Is there a chance, to influence the RRI to open Webtemplate B
    with the selected year from Webtemplate A?
    Best regards,
    Lars

    Hi together,
    i think I'm a little bit clother to a solution but now I've got no idea,
    how to proceed:
    I used the following command:
    SAPBWOpenWindow(SAP_BW_URL_Get() + "&CMD=RRI" + "&RRI_RECEIVER="Template_B","CustDetails",600,400);
    But the Webtemplate is not opend, only a grey screen.
    Hope one has a hint for me.
    Best regards
    Lars

  • Rest.items would not influence the payment days ,how to config?

    Hello,everyone!
    I have a question,you know the Rest.items would influence the payment days,how to config can avoid the influence?
    Thank you!
    Best regards
    Doris

    Dear Gladys,
    Than you very much,i get it !
    I can config "payment term from invoice" to realize!
    Best regards
    Doris
    Edited by: doris feng on Apr 6, 2010 3:20 PM
    Edited by: doris feng on Apr 6, 2010 3:22 PM

  • Planning Workflow (9.3.1): how to influence the view of an enduser?

    Hi all,
    In Planning (9.3.1) Workflow the administrator and planner views are quite different. Where the administrator sees a nice top-down approach when opening Workflow (in other words: an administrator can navigate from generation 0 down into the entity dimension) a planner always sees the level 0 members. All of them… which is not very handy.
    How can we influence the way a planner (=account with role “planner”) sees his part of the Workflow? Now, if a planner has to see multiple departments, he can see 100s of cost centers in Planning, while just viewing and influencing the highest level depending on a person’s actual security (for instance a department as a whole) would be enough already.
    There must be some place where this can be influenced within Planning, but we can’t find it in the documentation or in the standard interfaces of the Planning administration site.
    Thanks in advance!
    Gr.
    Ivo

    Hi,
    some FM elements always need special treatment. This is true for graphics (objects), cross links and tables especially.
    The EDD can do lots of things, but is also limited in doing others.
    There are also different ways to reach a goal, depending on your preferences.
    Some things have to be done in the template, some things need to be done in the EDD, others need to be done in the RWR.
    It always depends on what you have as given input, how good your skills at certain things are, how consistent your input is or how the general workflow is laid out.
    The best way to learn structured FM is to take a look on existing EDDs, DTDs, RWR and templates.
    Check out how other people solved those problems. See if the same way works for you.
    In your special case, my solution was the quick and dirty one. But there could have been another solution.
    You could have wrapped your reference within a font formatting tag (such as <b> or <i> in DITA/HTML) and add the font properties there.
    But introducing a font tag usually has influence on your XML input/output.
    This means you would need to either get this information already within the XMl source, add it with XSLT on import (remove on export), redefine your structure or use FM scripting.
    As you see, there are many ways leading to the desired output - it just depends on your special case, what is best for you.
    -Alex

  • [svn] 1418: Remove the optimization that was added as part of the fix for BLZ-133.

    Revision: 1418
    Author: [email protected]
    Date: 2008-04-25 11:16:16 -0700 (Fri, 25 Apr 2008)
    Log Message:
    Remove the optimization that was added as part of the fix for BLZ-133. We cannot depend on isRequestedSessionIdFromCookie reliably, instead we should rely on the fact that encodeURL returns the same url when cookies are enabled.
    Ticket Links:
    http://bugs.adobe.com/jira/browse/BLZ-133
    Modified Paths:
    blazeds/branches/3.0.x/modules/core/src/java/flex/messaging/endpoints/amf/SessionFilter.j ava

    This indicates corrupt files.  A restore should resolve.

  • Locking down the Optimize Scanned PDF checkbox

    Hello,
    Is there a way to grey out or lockdown the "Optimize Scanned PDF" option when Creating a pdf from a scanner? I can't seem to find if there is a registry key or location for this option.
    Also where does Acrobat store the "Defaults" for these presets? Also this is Adobe Acrobat 11.

    I have this same EXACT problem.  Why doesnt adobe address this issue right away?  Why are things getting worst and worst as adobe releases versions of adobe acrobat pro.  I did not have this problem for Adobe acrobat pro 8.
    Since deskewing is a very prominent feature in acrobat and used alot, adobe should fix this problem asap.

  • What are the Optimization Techniques?

    What are the Optimization Techniques? Can any one send the one sample program which is having Good Optimization Techniques.
    Phani

    Hi phani kumarDurusoju  ,
    ABAP/4 programs can take a very long time to execute, and can make other processes have to wait before executing. Here are
    some tips to speed up your programs and reduce the load your programs put on the system:
    Use the GET RUN TIME command to help evaluate performance. It's hard to know whether that optimization technique REALLY helps
    unless you test it out. Using this tool can help you know what is effective, under what kinds of conditions. The GET RUN TIME
    has problems under multiple CPUs, so you should use it to test small pieces of your program, rather than the whole program.
    Generally, try to reduce I/O first, then memory, then CPU activity. I/O operations that read/write to hard disk are always the
    most expensive operations. Memory, if not controlled, may have to be written to swap space on the hard disk, which therefore
    increases your I/O read/writes to disk. CPU activity can be reduced by careful program design, and by using commands such as
    SUM (SQL) and COLLECT (ABAP/4).
    Avoid 'SELECT *', especially in tables that have a lot of fields. Use SELECT A B C INTO instead, so that fields are only read
    if they are used. This can make a very big difference.
    Field-groups can be useful for multi-level sorting and displaying. However, they write their data to the system's paging
    space, rather than to memory (internal tables use memory). For this reason, field-groups are only appropriate for processing
    large lists (e.g. over 50,000 records). If you have large lists, you should work with the systems administrator to decide the
    maximum amount of RAM your program should use, and from that, calculate how much space your lists will use. Then you can
    decide whether to write the data to memory or swap space. See the Fieldgroups ABAP example.
    Use as many table keys as possible in the WHERE part of your select statements.
    Whenever possible, design the program to access a relatively constant number of records (for instance, if you only access the
    transactions for one month, then there probably will be a reasonable range, like 1200-1800, for the number of transactions
    inputted within that month). Then use a SELECT A B C INTO TABLE ITAB statement.
    Get a good idea of how many records you will be accessing. Log into your productive system, and use SE80 -> Dictionary Objects
    (press Edit), enter the table name you want to see, and press Display. Go To Utilities -> Table Contents to query the table
    contents and see the number of records. This is extremely useful in optimizing a program's memory allocation.
    Try to make the user interface such that the program gradually unfolds more information to the user, rather than giving a huge
    list of information all at once to the user.
    Declare your internal tables using OCCURS NUM_RECS, where NUM_RECS is the number of records you expect to be accessing. If the
    number of records exceeds NUM_RECS, the data will be kept in swap space (not memory).
    Use SELECT A B C INTO TABLE ITAB whenever possible. This will read all of the records into the itab in one operation, rather
    than repeated operations that result from a SELECT A B C INTO ITAB... ENDSELECT statement. Make sure that ITAB is declared
    with OCCURS NUM_RECS, where NUM_RECS is the number of records you expect to access.
    If the number of records you are reading is constantly growing, you may be able to break it into chunks of relatively constant
    size. For instance, if you have to read all records from 1991 to present, you can break it into quarters, and read all records
    one quarter at a time. This will reduce I/O operations. Test extensively with GET RUN TIME when using this method.
    Know how to use the 'collect' command. It can be very efficient.
    Use the SELECT SINGLE command whenever possible.
    Many tables contain totals fields (such as monthly expense totals). Use these avoid wasting resources by calculating a total
    that has already been calculated and stored.
    These r good websites which wil help u :
    Performance tuning
    http://www.sapbrainsonline.com/ARTICLES/TECHNICAL/optimization/optimization.html
    http://www.geocities.com/SiliconValley/Grid/4858/sap/ABAPCode/Optimize.htm
    http://www.abapmaster.com/cgi-bin/SAP-ABAP-performance-tuning.cgi
    http://abapcode.blogspot.com/2007/05/abap-performance-factor.html
    cheers!
    gyanaraj
    ****Pls reward points if u find this helpful

  • WHERE is the Optimization Pop-up menu go in Energy Saver?

    I'm completely confused. My Energy Saver Pref Panel shows only the two sliders in the SLEEP tab, with Screen Saver buttons; in the OPTIONS tab, it offers only one Wake checkbox and three other Options. What's happened to the Optimization section? Why don't I find it? I've read several references to the Optimization menu from the Help pages, but none of them shows how to access it. I'm completely confused.
    Yes, I'm sober.
    Anyone care to point out what probably ridiculously simple detail I'm overlooking? Thanks.

    did you not have an answer to this yet? its march now. whats that all about? I have the same problem, did you sort it out yourself?

Maybe you are looking for

  • Upgraded to 4.0 now my Tiscali email does not work but it does with Internet Explorer?

    I uploaded the new Firefox version 4 and when I access my Tiscali email account and open the mailbox it states 'you have undefined email' and will not let me into the 'inbox'. I can access my extra mail account which is TalkTalk. If I open Internet E

  • Sign in to Icloud keeps popping up

    The email address I have registered for Icloud is no longer in use and therefore I cannot remember / retrieve the password. Recently a message 'Sign into Icloud is popping up every 30 secs to 2 minutes? I cannot seem to be able to use FaceTime either

  • Invalid Number Error for Decimal Field While Loading Data

    I am loading a delimited text file using the SQL* loader however I am reciving an error in my decimal fields. When a decimal field only has leading zeros before the decimal point I receive invalid number error. Below will clarify: i.e.) 00000000.30 [

  • Facebook log in opens after I clear my search history

    When I click on tab of the browser homepage to clear history, Facebook log in page opens.

  • MM functional Help

    experts, I need a help in MM functional area. I have a requirement to display in report for differnt movement types like transfers, issues and receipts. The movement types for tranfers 411 412 , but I observed in MB51 that 411 text(+ sloc to sloc) an