Cost Based Optimization Guide for Siebel

23
Performance Tuning Guide for Siebel CRM Application on Oracle Part I - Cost-Based Optimization Guide An Oracle Technical White Paper March 2010 Authors: James Qiu, Paul Blokhin, Mehdi Gerami

description

Analytic CNT574696

Transcript of Cost Based Optimization Guide for Siebel

  • Performance Tuning Guide for Siebel CRM

    Application on Oracle

    Part I - Cost-Based Optimization Guide

    An Oracle Technical White Paper

    March 2010

    Authors: James Qiu, Paul Blokhin, Mehdi Gerami

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    2

    Table of Contents

    Document Overview .......................................................................................................... 3

    Siebel CRM Versions and Supported Oracle Database Versions...................... 4

    Transitioning from RBO to CBO ............................................................................ 5

    Transitioning from Oracle CBO 9i to Oracle CBO 10g.................................. 5

    Cost Based Optimizer Statistics.................................................................................... 6

    Collecting Optimizer Statistics .............................................................................. 6

    Deleting Optimizer Statistics ................................................................................. 7

    Locking Optimizer Statistics................................................................................... 7

    System Optimizer Statistics ................................................................................... 8

    Know When to Create a Stored Outline .................................................................... 8

    Fix the root cause, not the symptom! ............................................................... 8

    Dropping Outlines ...................................................................................................... 9

    Peeking of User Binds in Siebel CRM.......................................................................... 9

    Double Hard Parse in Siebel 7.7/7.8 ................................................................ 10

    No Bind Peeking in Siebel 8.0/8.1 ..................................................................... 10

    Single Hard Parse in Siebel 8.1.1 ...................................................................... 10

    Environment Variable SIEBEL_ORA_BIND_PEEK ........................................ 11

    Recommendations for Customers Affected by Issues Related to Peeking of User Binds ........................................................................................................................... 11

    Hidden parameter _optim_peek_user_binds ................................................ 12

    Preparing and Administrating the Siebel Database for CBO ........................... 13

    Default Database Parameters for Oracle 9i and 10g ................................. 13

    Recommended Database Parameters for Oracle 9i and 10g .................. 13

    Hidden Parameters in Oracle 10G ..................................................................... 16

    Parameter OPTIMIZER_INDEX_COST_ADJ .................................................... 17

    Recommended Database Parameters for Oracle 11g ................................ 18

    Hard-coded Session Parameters for Siebel OM Sessions ......................... 18

    Bibliography and Useful References ......................................................................... 19

    Oracle Corporation Documentation................................................................... 19

    Siebel Product Defects Affecting Performance on Oracle RDBMS................. 20

    Oracle Product Defects Affecting Siebel .................................................................. 21

    Oracle 9i Product Defects...................................................................................... 21

    Oracle 10g Product Defects.................................................................................. 22

    Oracle 11g Product Defects.................................................................................. 22

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    3

    Document Overview The purpose of this document is to publish a formal recommendation for Siebel CRM

    configuration and performance tuning on the Oracle database platform.

    Siebel CRM performance tuning is a complex area. There is no one size fits all

    solution. A well-tuned out-of-box Siebel CRM configuration may need to be further

    enhanced for most implementations given the different data volume, the data shape, the

    transaction mix, and the customizations, etc. Multiple documents and recommendations

    exist on this subject from different sources, which are either too general or too specific.

    Many times those documents contradict each other, and even deviate from what Siebel

    CRM performance experts recommend.

    This document is an attempt to reconcile all documents published in the past. It provides

    concise guidelines on key areas that affect performance of Siebel CRM application

    deployed on the Oracle database platform. It defines a set of basic rules to implement

    for Siebel CRM configuration and performance tuning on the Oracle database platform. If

    such rules are meticulously deployed, it should lay down a solid foundation for further

    performance tuning.

    This document should be used in conjunction with Siebel CRM Troubleshooting Guide,

    which is currently being developed.

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    4

    Siebel CRM Versions and Supported Oracle

    Database Versions

    The table below represents supported combinations of Siebel CRM and Oracle RDBMS

    versions.

    Siebel CRM

    Version

    Oracle RDBMS

    Product

    Oracle RDBMS

    Version

    Optimizer

    Type

    INIT.ORA

    parameter

    OPTIMIZER_MODE

    Siebel 7.7 Oracle 8i

    Enterprise Server

    8.1.7.4 + p1744093

    or above for Unix

    8.1.7.4.6 or above

    for Windows

    RBO RULE

    Siebel 7.7 Oracle 9i

    Enterprise Server

    9.2.0.4 or above and

    within the 9.2.0.x

    series

    CBO CHOOSE

    Siebel 7.7 Oracle 10g

    Enterprise/Standard

    Server

    10.1.0.3 or above,

    Including 10gR2

    CBO ALL_ROWS

    Siebel 7.7 Oracle 11g

    Enterprise/Standard

    Server

    10.1.0.3 or above,

    Including 10gR2

    CBO ALL_ROWS

    Siebel 7.8 Oracle 9i

    Enterprise Server

    9.2.0.4 or above and

    within the 9.2.0.x

    series

    CBO CHOOSE

    Siebel 7.8 Oracle 10g

    Enterprise/Standard

    Server

    10.1.0.3 or above,

    Including 10gR2

    CBO ALL_ROWS

    Siebel 7.8 Oracle 11g

    Enterprise/Standard

    Server

    11.1.0.6 or above CBO ALL_ROWS

    Siebel 8.0 Oracle 10g

    Enterprise/Standard

    Server

    10.2.0.2 or above

    CBO ALL_ROWS

    Siebel 8.0 Oracle 11g

    Enterprise/Standard

    Server

    11.1.0.6 or above CBO ALL_ROWS

    Siebel 8.1 Oracle 10g

    Enterprise/Standard

    Server

    10.2.0.2 or above

    (with Oracle 11g

    client)

    CBO ALL_ROWS

    Siebel 8.1 Oracle 11g

    Enterprise/Standard

    Server

    11.1.0.6 or above

    CBO ALL_ROWS

    With the exception of Siebel CRM version 7.7 on Oracle 8i Enterprise Server, all the

    above listed Siebel CRM versions can only be configured to use the Cost Based Optimizer

    (CBO). This differs from the recommended configuration for pre-Siebel 7.7 CRM

    versions, which utilized the Rule Based Optimizer (RBO) on Oracle 8i Enterprise Server.

    In the vast majority of cases, performance of the Siebel application with properly

    implemented and configured CBO will meet or exceed RBO performance, ceteris paribus

    (i.e. under similar architecture/network topologies, hardware configurations, data

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    5

    volumes/distributions, storage characteristics, etc.). Detailed discussion of the Rule-

    Based Optimizer (RBO) is beyond the scope of this document. The following provides

    general guidelines for RBO to CBO migration.

    Transitioning from RBO to CBO

    At the time of transitioning from RBO to CBO a few problems must be addressed to

    avoid Siebel CRM application performance degradation. This primarily pertains to specific

    tuning due to customizations implemented in addition to Siebel OOTB configuration and

    tuning:

    RBO-specific tuning must be withdrawn. The list below shows some examples of

    such RBO-specific tuning:

    o Customized single-column indices that worked best for the RBO need to

    be dropped for CBO to avoid generation of sub-optimal query plans in CBO

    context

    o Hard-coded predicates embedded into the SQL for the purpose of forcing

    RBO to use a certain index need to be removed

    Environment needs to be re-configured with the parameters and settings

    recommended for CBO (More information about recommendation on environment

    configuration and methods of statistics collection can be found below in this

    document)

    CBO-specific tuning may need to be put into place as necessary. Primary focus

    should be on the customer extensions and a limited number of cases when Siebel

    CRM default configuration may require additional tuning with respect to customer

    environment specifics.

    Transition from RBO to CBO is a one-time effort that may take from few days to few

    weeks, depending on the level of application customization, data volume, data shape,

    etc.

    Transitioning from Oracle CBO 9i to Oracle CBO 10g

    Under normal circumstances, migration from Oracle CBO version 9i to later versions of

    Oracle CBO (i.e. 10g or 11g) should not cause Siebel CRM application performance

    degradation if the following recommendations are deployed. There is a possibility of

    encountering some isolated cases of performance regression, but all such occurrences

    must be studied and resolved on a case-by-case basis.

    Otherwise, almost any major degradation caused by migration from Oracle 9i CBO to

    later versions falls in one or more of the following categories:

    Siebel CRM application has not been tuned to work well with Oracle 9i CBO in the

    first place.

    Level of Siebel CRM application customization is very high, and additional tuning

    may be required to address customer-specific configurations

    In general, transition from Oracle CBO version 9i to later versions of Oracle CBO is a

    one-time effort of much lesser scope than the migration from Oracle RBO to the CBO.

    However, customers who upgrade from Oracle 9i CBO to a later version of Oracle CBO in

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    6

    parallel with deployment of a customer application release may need to allocate some

    additional development time for performance tuning.

    Cost Based Optimizer Statistics It is important to understand that Oracle CBO bases its decision on data statistics, and if

    statistics have not been collected for a given data object, Oracle CBO reverts to rule-

    based logic to determine the best path for access. Proper collection of statistics for the

    data objects is a key element in generation of optimal query execution plans.

    Collecting Optimizer Statistics

    Although Oracle provides alternative ways for collecting optimizer statistics, the

    recommended approach is to use a PL/SQL package DBMS_STATS to collect the

    optimizer statistics for each Siebel CRM data table, including indexed columns, indexes,

    and histograms for all indexed columns:

    EXECUTE DBMS_STATS.GATHER_TABLE_STATS ( ownname => '' , tabname => '' , method_opt => 'FOR ALL INDEXED COLUMNS SIZE 254' , granularity => 'ALL' , cascade => TRUE , degree => DBMS_STATS.DEFAULT_DEGREE );

    It is critical to note that we do not recommend collecting histograms statistics for all

    columns. Such histograms statistics can be created only for tables with highly skewed

    data where some values have a disproportional number of rows. Unnecessary

    introduction of histograms in the statistics collection is one of the most common

    mistakes. We strongly recommend that the optimizer statistics histograms be created

    using 'for all indexed columns size 254' method (please see the syntax in the above

    example).

    However, there are a few exceptions to this rule. Some tables in Siebel CRM schema are

    known to have skewed data, and collection of all column statistics histograms may lead

    to generation of better query plans. Below is the list of such tables, along with the

    recommended method and syntax to create the optimizer statistics:

    Siebel Table Name Oracle Optimizer Statistics Collection Method

    S_POSTN_CON FOR ALL COLUMNS SIZE 254

    S_ORG_BU FOR ALL COLUMNS SIZE 254

    S_ORG_GROUP FOR ALL COLUMNS SIZE 254

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    7

    One needs to benchmark the application performance to make sure that full column

    statistics histograms do help in their environment.

    Deleting Optimizer Statistics

    PL/SQL package DBMS_STATS provides functionality to delete the optimizer statistics

    collected for a given index, or a table (including statistics and histograms for all columns

    and indexes associated with the table).

    The following example illustrates how to delete the optimizer statistics collected for

    tables: EXECUTE DBMS_STATS.DELETE_TABLE_STATS ( ownname => '' , tabname => '' );

    There are a few cases when we recommend deleting optimizer statistics collected for Siebel CRM data tables:

    We recommend using 'for all indexed columns size 254' to generate statistics

    before any query tuning. If the statistics were created differently, it is necessary

    to delete them1 and recreate a new set of the optimizer statistics using 'for all indexed columns size 254' method before starting the query tuning.

    Locking Optimizer Statistics

    Beginning with Oracle 10gR2, PL/SQL package DBMS_STATS is providing functionality to

    lock statistics on a table or schema. Once statistics are locked, no modifications can be

    made to those statistics until the statistics have been unlocked.

    We only recommend locking statistics for tables with 15 rows or less, and only after

    statistics for such tables have been dropped. Thus, the DBA will not have to explicitly

    drop statistics for such tables every time they do statistics collection. (Note that on

    Oracle 9i statistics for tables that have only 15 rows or less must be dropped explicitly

    every time).

    1 Regenerating statistics using 'for all indexed columns size 254' may not clean-up entirely the previous statistics. Therefore, the statistics must be deleted first to make sure there are no residuals.

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    8

    System Optimizer Statistics

    In 9i, Oracle introduced cpu_costing, a mechanism that allows the CPU cost of an

    operation to be included as part of the overall estimate. This feature is enabled in 9i only

    if you collect system statistics. This feature in 10g is enabled by default. Oracle

    Database 10g gathers two types of system statistics - statistics captured without a

    workload (noworkload) and statistics captured with a workload. In addition to CPU cost,

    disk I/O and memory utilization are also captured, to ensure that CBO picks the plan

    with the lowest estimated cost relative to other plans.

    Many Oracle DBAs attempt to leverage system optimizer statistics for further tuning of

    Siebel CRM application. Such actions may cause unpredictable degradation in

    performance of certain Siebel CRM application views and queries, and are strongly

    discouraged. We recommend that DBAs refrain from collecting system optimizer

    statistics, or altering any Oracle default settings pertaining to systems statistics.

    Know When to Create a Stored Outline A Stored Outline allows preserving and maintaining an execution plan (captured with

    certain conditions/hints) for a query performing slower than expected without such an

    outline. At runtime, CBO is forced to use this plan2, regardless of changes in the

    environment configuration, or associated statistics.

    Detailed discussion on usage of a Stored Outline is beyond the scope of this document.

    Our main goal is to provide guidance on when to use a Stored Outline while tuning

    Siebel CRM application performance.

    Fix the root cause, not the symptom!

    As a general rule, we do not consider Stored Outlines to be a viable solution for Siebel

    CRM application performance issues. We insist that Stored Outlines not to be used

    during Siebel CRM application development and performance testing o tuning. If such

    Stored Outlines exist, they should be dropped to expose all performance problems that

    need to be properly fixed.

    In rare cases, when a product defect is confirmed or implementing a configuration fix to

    address a performance problem in a production system is not feasible, Oracle/Siebel

    Tech Support Engineer may instruct you to use a Stored Outline. However, such a

    Stored Outline is temporary and must be dropped as soon as a permanent fix is

    available.

    2 In certain cases, CBO ignores the Outline if it cannot use it. For example, if an index that the Outline is

    supposed to use is dropped the CBO will ignore the Outline and generates a new query plan.

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    9

    Stored Outlines may cause performance degradations after the Oracle database upgrade

    since each database version may retire a set of database parameters that affect the

    query plan preserved by the Stored Outlines.

    It is also important to understand that although in Oracle 11g release the Stored

    Outlines continue to function as in past releases, support for Stored Outlines will be

    deprecated in future releases of Oracle database. Oracle strongly recommends that you

    use SQL plan management for new applications. SQL plan management creates SQL

    plan baselines, which offer superior SQL performance and stability compared with stored

    outlines. However, the recommendation remains the same no matter what tool is used:

    Fix the root cause, not the symptom!

    Dropping Outlines

    To comply with the above recommendation, it may be necessary to identify the Stored

    Outlines that exist in the environment, check if the outlines have been used, and

    understand their intended usage. [USER|ALL|DBA]_OUTLINES view should be used to

    display information about existing outlines:

    SELECT name, category, used FROM user_outlines;

    Stored Outlines that were not created upon instruction from Oracle/Siebel Tech Support

    must be removed through meticulous implementation of guidelines in this document.

    However, there are complex cases that might need assistance from Oracle/Siebel

    Application Expert Services (ES) for more advanced CBO tuning.

    The Stored Outlines can be dropped by using a PL/SQL package DBMS_OUTLN.

    For example:

    BEGIN DBMS_OUTLN.drop_by_cat (cat => '< category >'); END /

    Peeking of User Binds in Siebel CRM In Siebel CRM application, Siebel Object Manager (OM) may generate a SQL statement

    with the syntax of :n in the WHERE clause. The :n is placeholder for values to be

    replaced at run-time. At run-time, Siebel OM substitutes the real values for the

    placeholder(s) to seek a better query plan. This process is called peeking of user binds

    or simply bind peek.

    select LAST_NAME from S_CONTACT where TIMEZONE_ID=:n;

    On a hard parse, Oracle will peek the value provided for :n, and optimize the query as if

    the same query was submitted with this particular literal value. This allows the CBO to

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    10

    leverage optimizer statistics and generate the most efficient query plan for given value.

    Disabling of bind peeking, or inaccurate statistics, or excessive histogram statistics may

    equally result in generation of suboptimal query execution plans, and noticeable

    degradation in Siebel CRM application views response times.

    Double Hard Parse in Siebel 7.7/7.8

    In Siebel CRM application server prior to version 8.0, bind peeking was implemented

    through a hard-coded call to Oracle Call Interface (OCI), issued by Siebel Object

    Manager (OM). However, it was discovered that such implementation was causing

    double hard parsing, both during describe (expected behavior), and during execute (un-

    expected behavior).

    No Bind Peeking in Siebel 8.0/8.1

    Double hard parsing caused long cold time in Oracle CBO. To address the issue, bind

    peeking has been removed completely in Siebel CRM version 8.0. This implementation

    was back ported to Siebel 7.7/7.8 via QuickFix and FixPack delivery vehicles, as shown

    in the matrix below:

    Siebel CRM

    Version

    Bind Peek with Double Hard

    Parse

    No Bind Peek

    Siebel 7.7 All 7.7.x versions prior to

    7.7.2.4 QF

    7.7.2.4 QF and after, prior to

    7.7.2.12 FP

    Siebel 7.8 All 7.8.x versions prior to

    7.8.2.3 QF

    7.8.2.3 QF and after, prior to

    7.8.2.12 FP

    Siebel 8.0 None All versions prior to 8.0.0.6 FP

    Siebel 8.1 None All versions

    However, no-bind-peek implementation caused performance degradation in some Siebel

    CRM application views for customers who already tuned their application using bind

    peeking with double hard parse.

    Single Hard Parse in Siebel 8.1.1

    In Siebel 8.1.1 a solution was devised to enable bind variable peeking using single hard

    parse. This solution was intended to resolve all issues related to peeking of user binds in

    Siebel CRM application, and it was ported to earlier versions of Siebel as part of 8.0.0.6

    FP, 7.8.2.12 FP, and 7.7.2.12 FP. But after this solution was released, it has been

    established that it tends to cause query execution issues, which resulted in severe

    performance regression for some customers.

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    11

    Environment Variable SIEBEL_ORA_BIND_PEEK

    As mentioned earlier, removal of bind peeking in Siebel 8.0 caused application

    performance issues for customers who tuned their application using bind peeking with

    double hard parse. To address such issues, a switch was implemented by the means of

    OS environment variable SIEBEL_ORA_BIND_PEEK. This variable allows enabling or

    disabling bind peeking at customer discretion. 3

    Default value for SIEBEL_ORA_BIND_PEEK is FALSE, and must be set to TRUE to turn on

    the bind peeking.

    Recommendations for Customers Affected by

    Issues Related to Peeking of User Binds

    Prior to the release of this document, our recommendation was to install a

    corresponding FP or QF (depending on the base Siebel CRM version), which implements

    bind peeking using single hard parse. However, due to recent findings of performance

    regression issues in this implementation, this recommendation has been withdrawn.

    Our current recommendation for Siebel CRM customers affected by issues related to

    peeking of user binds is to deploy a generally available FixPack or QuickFix which

    corresponds to their base application version, and leverage the environment variable

    SIEBEL_ORA_BIND_PEEK to enable/disable bind peeking.

    Customers who tuned their Siebel CRM application with double hard parse and

    bind peeking should set SIEBEL_ORA_BIND_PEEK to TRUE.

    Customers who tuned their Siebel CRM application without bind peeking must

    verify that SIEBEL_ORA_BIND_PEEK variable is set to FALSE.

    Below table contains the list of Siebel versions that support SIEBEL_ORA_BIND_PEEK

    functionality:

    3 It is important to understand that variable SIEBEL_ORA_BIND_PEEK does not address the original issue of double hard parse with bind peeking. It is designed to eliminate performance issues for Siebel CRM customers

    who have already tuned their application with the double hard parse.

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    12

    Base Siebel CRM

    Version Siebel CRM Versions with SIEBEL_ORA_BIND_PEEK support

    Siebel 7.7 7.7.2.12 Fix Pack Build2 [18391]

    Siebel 7.8 7.8.2.10[19241]QF0A52

    7.8.2.11[19244]QF0B09

    7.8.2.13 Fix Pack

    Siebel 8.0 8.0.0.6 [20423]QF0637

    8.0.0.6 Quick Fix 26xx Branch

    8.0.0.7 [20426]QF0707

    8.0.0.7 [20426]QF1703

    8.0.0.7 Quick Fix 17xx Branch

    8.0.0.8 Fix Pack Build2[20428]

    8.0.0.9 Fix Pack

    Siebel 8.1 8.1.1 [21112] QF0023

    8.1.1.2 Fix Pack

    Siebel 8.2 BLD_DEN_11_APPS_SIA

    Hidden parameter _optim_peek_user_binds

    This parameter was introduced in Oracle 9.2.0, and is maintained in all consequent

    versions of Oracle 9i, 10g and 11g Enterprise/Standard server. As name suggests, this

    parameter enables peeking of user binds. This is an internal Oracle parameter; it is not

    documented, and should not be used unless instructed to do so.

    There are some articles in the knowledge base (e.g., Doc ID 532787.1), which suggest

    that setting _optim_peek_user_binds to FALSE may improve performance of Siebel CRM

    upgrade process. We do not have enough data either to prove or to disapprove this

    recommendation. However, it is certain that setting of _optim_peek_user_binds

    parameter has no effect on Siebel CRM application server runtime. Internal OCI calls

    issued by Siebel application server cannot be altered, and are not governed by the

    _optim_peek_user_binds parameter settings.

    Our recommendation regarding _optim_peek_user_binds is NOT to alter the default

    settings for this parameter in environments running Siebel CRM applications.

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    13

    Preparing and Administrating the Siebel

    Database for CBO

    For Oracle 10g and 11g, OPTIMIZER_MODE should be set to ALL_ROWS which is the

    default value. For Oracle 9i, OPTIMIZER_MODE should be set to CHOOSE unless you are

    performing an upgrade.

    Besides setting the OPTIMIZER_MODE to CHOOSE or ALL_ROWS, about 60 other

    parameters affect the generation of the query plan. The most important ones are listed

    and explained below. The others, including hidden parameters that are not documented,

    should not be modified unless instructed by Oracle/Siebel Tech Support or Engineering.

    Default Database Parameters for Oracle 9i and 10g

    The following visible parameters must be set to their default values where applicable:

    Oracle Parameter

    9i Default Value 10g Default Value

    HASH_JOIN_ENABLED True ** Obsolete

    OPTIMIZER_FEATURES_ENABLE 9.2.0 10.1.0 *

    OPTIMIZER_INDEX_CACHING 0 0

    OPTIMIZER_MODE CHOOSE ALL_ROWS

    PARTITION_VIEW_ENABLED False ** Obsolete

    QUERY_REWRITE_INTEGRITY Enforced Enforced

    STAR_TRANSFORMATION_ENABLED False False

    It is always a good idea to set the OPTIMIZER_FEATURES_ENABLE = to get full benefit of a series of optimizer feature

    supported by Oracle DB version. Hence, if your db version is already 10.2.x, then

    you can set the OPTIMIZER_FEATURES_ENABLE=10.2.x.

    Recommended Database Parameters for Oracle 9i and 10g

    In addition, for the Siebel application to work effectively and efficiently, the following

    parameters need to be set to the recommended values other than default values.

    Oracle Parameter Description 9i

    Default

    Value

    10g

    Default

    Value

    Recomm

    ended

    Value

    OPTIMIZER_DYNAMIC_SAMPLING This parameter controls the

    level of dynamic sampling

    performed by the optimizer.

    1 2 1

    OPTIMIZER_MAX_PERMUTATIONS This parameter restricts the

    number of permutations of

    the tables the optimizer will

    consider in queries with joins.

    A higher value result in

    2000 **

    Obsolete

    100

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    14

    higher parse time, a lower

    value carries the risk of

    overlooking a good plan.

    NOTE: Starting with Oracle

    Database 10g, this parameter

    has been made obsolete.

    Refer to the Oracle

    documentation for further

    information.

    OPTIMIZER_INDEX_COST_ADJ Controls the access path

    selection to be more or less

    index friendly.

    100 100 1

    QUERY_REWRITE_ENABLED Enable or disable query

    rewriting globally for the

    database

    False True False

    (**) Do not automatically alter the values of these parameters, which have been

    deprecated to hidden parameters in 10g, based on the recommendations for visible

    parameters in version 9i.

    The parameters below should be set according to the information documented in the

    following Siebel Bookshelf references:

    Siebel Installation Guide for Microsoft Windows Version 8.0 > Configuring the

    RDBMS > Configuring an Oracle Database for Siebel Applications > Guidelines for

    Configuring Settings in the init.ora File.

    Siebel Installation Guide for UNIX Version 8.0 > Configuring the RDBMS >

    Configuring an Oracle Database for Siebel Applications > Guidelines for

    Configuring Settings in the init.ora File.

    Siebel Installation Guide for Microsoft Windows: Servers, Mobile Web Clients,

    Tools Version 7.8 > Configuring the RDBMS > Configuring Oracle for Siebel

    Applications > Guidelines for Configuring Settings in the init.ora File.

    Siebel Installation Guide for UNIX: Servers, Mobile Web Clients, Tools Version 7.8

    > Configuring the RDBMS > Configuring Oracle for Siebel Applications >

    Guidelines for Configuring Settings in the init.ora File.

    Siebel Installation Guide for Microsoft Windows: Servers, Mobile Web Clients,

    Tools Version 7.7 > Guidelines for Configuring the RDBMS > Configuring Oracle

    for Siebel Applications.

    Siebel Installation Guide for UNIX: Servers, Mobile Web Clients, Tools Version 7.7

    > Guidelines for Configuring the RDBMS > Configuring Oracle for Siebel

    Applications.

    Oracle Parameter Description Recommended

    Value

    DB_FILE_MULTIBLOCK_READ_COUNT The database buffer cache

    parameter dictates the

    number of data blocks read

    in a single Oracle I/O

    operation during a table

    scan.

    For most implementations,

    this value should be set

    between 16 and 32 blocks

    and adjusted as necessary.

    You may want to set an

    initial value of 32.

    SORT_AREA_SIZE This value is specified in

    bytes, and may be adjusted

    according to the number of

    users, the amount of RAM

    available, and the size of

    Set

    PGA_AGGREGATE_TARGET

    instead. When not setting

    PGA_AGGREGATE_TARGET

    - You should start with an

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    15

    sorted queries. initial value of 1,000,000 (1

    MB). Optimal performance

    can be achieved for the

    Dictionary Managed TEMP

    tablespaces if the extents

    are uniform and a multiple

    of the SORT_AREA_SIZE.

    SORT_AREA_RETAINED_SIZE Specifies (in bytes) the

    maximum amount of the

    user global area (UGA)

    memory retained after a

    sort run completes. The

    retained size controls the

    size of the read buffer,

    which Oracle uses to

    maintain a portion of the

    sort in memory.

    Set

    PGA_AGGREGATE_TARGET

    instead. When not setting

    PGA_AGGREGATE_TARGET

    - Derived from

    SORT_AREA_SIZE.

    The following related parameters should be set by a trained DBA and according to the

    information in the applicable Oracle database documentation and requirements for your

    implementation. General guidance on these related settings is provided below:

    Oracle Parameter Description General Guidance

    PGA_AGGREGATE_TARGET Specifies the target

    aggregate PGA memory

    available to all server

    processes attached to the

    instance.

    For most production

    implementations with a

    substantial number of

    users, this value should be

    set to 1 GB or greater.

    Monitor PGA target advisory

    views for additional

    guidance.

    STATISTICS_LEVEL All the advisories in Oracle9i

    Release 2 including the

    Buffer Cache Advisor are

    controlled by a newly

    introduced parameter

    STATISTICS_LEVEL.

    TYPICAL in production and

    ALL in TEST environments.

    HASH_AREA_SIZE Relevant to parallel

    execution operations and to

    the query portion of DML or

    DDL statements. It specifies

    the maximum amount of

    memory, in bytes, to be

    used for hash joins.

    Set

    PGA_AGGREGATE_TARGET

    instead. When not setting

    PGA_AGGREGATE_TARGET

    - Derived: 2 *

    SORT_AREA_SIZE

    WORKAREA_SIZE_POLICY Specifies the policy for

    sizing work areas. This

    parameter controls the

    mode in which working

    areas are tuned.

    If

    PGA_AGGREGATE_TARGET

    is set, then AUTO. If

    PGA_AGGREGATE_TARGET

    is not set, then MANUAL.

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    16

    Hidden Parameters in Oracle 10G

    Hidden parameters are internal Oracle database parameters, which should not be

    modified unless instructed to do so by Oracle Support. Below table represents the list of

    hidden Oracle database parameters which need to be set to benefit Siebel CRM

    application performance

    Oracle Parameter Description Recommended

    Value

    _always_semi_join Always use this

    method for semi-

    join when possible

    OFF

    In some cases, setting _always_semi_join to OFF

    renders better performance. This is due to Siebel

    OMs FIRST_ROWS_10 optimization strategy.

    However, it is recommended that a customer run

    a thorough performance testing to verify whether

    this setting improves performance in the Siebel

    environment

    _b_tree_bitmap_plans Enable the use of

    bitmap plans for

    tables with only B-

    tree indexes

    FALSE

    For Siebel OLTP environment, it is recommended

    to set _b_tree_bitmap_plans to FALSE and

    _partition_view_enabled to FALSE

    _gc_defer_time Determine how

    long to defer down

    converts for hot

    buffers

    0

    For a Siebel RAC implementation, it is

    recommended to set _gc_defer_time to 0. This is

    applicable to Oracle 9i and 10g environments

    _no_or_expansion OR expansion

    during optimization

    is disabled

    FALSE

    Some customers report setting this parameter to

    TRUE is providing better performance. However,

    Siebel does not perform better consistently with

    this setting. It is recommended to set this

    parameter to FALSE

    _optimizer_max_permuta

    tions

    Limit the optimizer

    maximum join

    permutations per

    query block

    100

    Starting with Oracle Database 10g,

    optimizer_max_permutations is an obsolete

    parameter. It is recommended to leave this

    hidden parameter setting to its default value

    _partition_view_enabled Enable/disable

    partitioned views

    FALSE

    For Siebel OLTP environment, it is recommended

    to set _partition_view_enabled to FALSE and

    _b_tree_bitmap_plans to FALSE

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    17

    Parameter OPTIMIZER_INDEX_COST_ADJ

    This parameter is of critical importance for Siebel CRM application performance.

    Incorrect setting may result in severe performance degradation of Siebel CRM

    application.

    For Oracle 9i CBO setting OPTIMIZER_INDEX_COST_ADJ = 1 is imperative.

    This will set the optimizer goal for best response time (versus best throughput).

    Incorrect setting may cause the optimizer to favor full-table scans instead of

    index access.

    For Oracle 10g/11g CBO setting OPTIMIZER_INDEX_COST_ADJ = 1 is also

    recommended, although the default setting of 100 will deliver good results in

    most cases.

    It is important to understand that in-house tuning of Siebel CRM application was

    performed with OPTIMIZER_INDEX_COST_ADJ = 1 setting. This means that customers

    who want to implement OPTIMIZER_INDEX_COST_ADJ = 100 on Oracle 10g/11g will

    need to allocate extra development time for additional tuning that may be necessary.

    The need for such tuning is not considered to be an optimizer defect or a regression

    issue. Oracle Engineering will only review cases when it is confirmed that a specific

    query performance is equally unacceptable both under OPTIMIZER_INDEX_COST_ADJ =

    1 and OPTIMIZER_INDEX_COST_ADJ = 100 settings. In all other cases, additional

    tuning should be provided on-site, or OPTIMIZER_INDEX_COST_ADJ setting should be

    reverted to 1.

    Under no circumstances OPTIMIZER_INDEX_COST_ADJ parameter should be set to

    values other than 1 (Siebel recommended) or 100 (Oracle default on 10g/11g).

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    18

    Recommended Database Parameters for Oracle 11g

    Oracle 11g introduces Automatic Memory Management (AMM) feature, which allows

    managing both the SGA memory and the instance PGA memory completely automatically.

    Detailed discussion on the AMM feature is beyond the scope of this document. We will only

    provide our generic guideline to Siebel CRM customers on Oracle 11g.

    Our recommendation to Siebel CRM customers on Oracle 11g is to switch to the Automatic

    Memory Management. There are two new initialization parameters introduced in Oracle 11g:

    MEMORY_TARGET and MEMORY_MAX_TARGET. We recommend setting the

    MEMORY_TARGET parameter to the value which equals 60% of total physical memory on

    the database server. We do not recommend explicitly setting MEMORY_MAX_TARGET.

    This parameter is optional, and if not set, Oracle will automatically set it to the value of

    MEMORY_TARGET.

    In addition to switching to the Automatic Memory Management, Siebel CRM customers on

    Oracle 11g should follow all recommendations provided in this document for Oracle 10g.

    Hard-coded Session Parameters for Siebel OM Sessions

    In Siebel 7.7/7.8 on Oracle 9i platform, Siebel database connector has been modified to

    make a few alter session statements for OLTP operations. Same functionality has later

    been built into Siebel database connectors for Oracle 10g and 11g. Thus, in all current

    Siebel CRM versions (7.7, 7.8, 8.0, 8.1 and 8.1.1) each Siebel OM session will

    automatically set up the following session parameters:

    ALTER SESSION SET OPTIMIZER_MODE = FIRST_ROWS_10

    When optimizer_mode is set to first_rows_n, the optimizer will in all cases use

    cost-based optimization, and set the optimizer goal for best response time

    (versus best throughput).

    ALTER SESSION SET HASH_JOIN_ENABLED = FALSE

    (In Oracle 10g, this parameter is deprecated, Siebel uses _hash_join_enabled

    instead)

    ALTER SESSION SET _OPTIMIZER_SORTMERGE_JOIN_ENABLED = FALSE

    ALTER SESSION SET _OPTIMIZER_JOIN_SEL_SANITY_CHECK = TRUE

    This is done to enable sanity checks for join using two columns.

    The above session parameters should not be altered to other values by any means.

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    19

    Bibliography and Useful References

    This document is partially based on Siebel/Oracle bulletins and white papers published in

    the past, with our special thanks to the authors and contributors:

    Oracle CBO and Siebel Business Applications (Doc ID 478028.1) by

    Selma Takara, Principal Technical Support Engineer, Oracle Corp

    Siebel CRM with Oracle Cost-Based Optimizer (CBO) by

    Dillip Kumar Praharaj, CMTS, Oracle Corp

    Anna Leyderman, Development Manager, Oracle Corp

    Kavitha Raghunathan, SMTS, Oracle Corp

    Tuning Oracle Cost Based Optimizer (CBO) for Siebel OLTP CRM Applications by

    Dominic Stewart Principal Sales Consultant, Oracle Corp

    Troubleshooting Guide for Siebel Performance after Upgrade to Oracle 10G, by

    Caroline Wanyonyi, Principal Architecture Specialist, Oracle Corp

    However, it is important to mention that the current document should be considered as

    the ultimate reference. The recommendations in this document take precedence over all

    other documents on this subject if any other document is advising otherwise.

    Oracle Corporation Documentation

    Oracle 9i Database Performance Tuning Guide and Reference, Release 2 (9.2).

    Oracle9i Supplied PL/SQL Packages and Types Reference.

    Oracle 10g Database Performance Tuning Guide and Reference, Release 2 (10.2)

    Oracle10g Supplied PL/SQL Packages and Types Reference

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    20

    Siebel Product Defects Affecting Performance on

    Oracle RDBMS

    Siebel CR Description Resolution/FR Targets

    12-R5WXCB Siebel 8.0 client sets session parameter

    HASH_JOIN_ENABLED, which is deprecated in

    Oracle 11g.

    Note: This problem was corrected for the

    Siebel 8.0 client on the Oracle 10g platform.

    Note: This problem does not exist for the

    Siebel 8.1.1 client on Oracle 11g platform.

    Fixed in:

    8008 FixPack

    8005 QuickFix

    12-1TK6KQ9

    There is a bug in the DBConn, which does not

    recognize Oracle 11g banner and will cause

    performance problem.

    12-1TK6KQU (Aspen)

    12-1TK9A1L (8.0.0.8 FP)

    12-1UI7Y8T (7.7.2.10 QF)

    12-1UIA88O (7.7.2.12 FP)

    12-1UIA89R (7.8.2.x FP)

    12-1UIA8AQ (8.1.1.2 FP)

    12-1V14HVD (7.7.2.8 QF)

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    21

    Oracle Product Defects Affecting Siebel

    Oracle 9i Product Defects

    Oracle

    Bug/Note

    Description Resolution

    Bug 3756797 High CPU may be used during parse of certain

    query forms

    Bug 3239873 High CPU during parse of statements with

    many identical predicates

    Bug 3737955 Long parse times for long inlists / many

    AND/OR terms.

    Fixed in 9.2.0.7

    (or patch)

    Bug 3406977 HIGH VERSION COUNT DUE TO BINDS

    MARKED AS NONDATA WITH

    CURSOR_SHARING=FORCE.

    Fixed in 9.2.0.6

    Bug 3321724 EXCESSIVE HIGH VERSION COUNT WHEN

    CURSOR_SHARING=SIMILAR.

    Not fixed

    Bug 3898338 HIGH PARSE TIME WITH USE_CONCAT AND

    INLISTS AT EMPTY TABLE.

    Fixed in 10.2

    Bug 3075139 CBO may produce a suboptimal plan in

    FIRST_ROWS_N mode due to incorrect

    cardinalities being used.

    Fixed in 9.2.0.5

    Bug 2991526 Incorrect cardinality estimates may occur for

    LIKE predicates resulting in poor execution

    plans.

    Fixed in 9.2.0.5

    Bug 4275247 Statistics on empty tables (probably in

    conjunction with FIRST_ROWS_N). Source of

    Alert 1162.

    Internal only.

    Bug 3380026 Suboptimal plan possible for FIRST_ROWS for

    SQL with ORDER BY and indexes.

    Fixed in 9.2.0.6

    Bug 3220073 ORDER BY sort may not be eliminated in

    First_rows_NNN.

    Fixed in 9.2.0.5

    Bug 3075139 Suboptimal plan possible in FIRST_ROWS_N

    mode.

    Fixed in 9.2.0.5.

    Bug 3018146 Long parse times for many ORed predicates

    with FIRST_ROW_XX optimization.

    Fixed in 9.2.0.5

    Bug 3566843 Optimizer may not choose best index. Fixed in 9.2.0.7

    Bug 4335559 Ora-00600 [Kkojcio] on a query Fixed in 9.2.0.6

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    22

    Oracle 10g Product Defects

    Oracle

    Bug/Note

    Description Resolution

    4878299 Bad plan from join with FIRST_ROWS_N or a

    ROWNUM predicate ORDER BY elimination may

    not find best plan

    Patch in 10.2.0.4

    (Server Patch)

    Fixed in 11.1.0.6

    (Base Release)

    7430474 FIRST_ROWS_K recost for ORDER BY

    elimination may not find best plan

    Fixed in 11.1.0.8

    Related to Bug

    5288623

    6990305

    Suboptimal plan possible as bind peeking not

    used during CBQT

    Fixed in 11.1.0.8

    7236148

    CBO does not prorates chained_cnt under

    first_rows_k

    Fixed in 11.1.0.8

    Note 406966.1

    INTERMITENT WRONG RESULTS ON

    9iR2,10gR1 and 10gR2

    Fixed in 10.2.0.4

    Note

    4724074.8

    Increased Parse Time Fixed in 10.2.0.4

    Bug 6455161

    Higher "cache buffer chains" latch gets / higher

    "consistent gets" after truncate/Rebuild

    Fixed in 10.2.0.4

    Bug 5240607

    FIRST_K_ROWS may choose inefficient

    NESTED LOOPS join

    Fixed in 10.2.0.4

    Note

    4878299.8

    Bad plan from join with FIRST_ROWS_N or a

    ROWNUM predicate

    Fixed in 10.2.0.4

    Bug 7891471 Query with ORDER BY has a bad plan with

    FIRST_ROWS_10 optimization in

    10.2.0.4

    Fixed in 10.2.0.5

    Bug 4742607

    "cache buffer chains" latch contention from

    concurrent index range scans in extreme

    situations, excessive CPU consumption without

    any user-SQL activity.

    Fixed in 10.2.0.3

    Oracle 11g Product Defects

    Oracle

    Bug/Note

    Description Resolution

    8839301 On Oracle 11.2.0.0.2 only: ALTER TABLE

    command to add a CHAR (1 char) column

    creates such column with length 4.

    To be fixed in the

    next distributed

    version

  • Performance Tuning Guide for Siebel CRM Application on Oracle

    Part I - Cost-Based Optimization Guide

    23

    Performance Tuning Guide for Siebel CRM Application on Oracle Part I - Cost-Based Optimization Guide December 2008 Authors: James Qiu, Paul Blokhin, Mehdi Gerami Oracle Corporation World Headquarters 500 Oracle Parkway Redwood Shores, CA 94065 U.S.A. Worldwide Inquiries: Phone: +1.650.506.7000 Fax: +1.650.506.7200 oracle.com Copyright 2008, Oracle. All rights reserved. This document is provided for information purposes only and the contents hereof are subject to change without notice. This document is not warranted to be error-free, nor subject to any other warranties or conditions, whether expressed orally or implied in law, including implied warranties and conditions of merchantability or fitness for a particular purpose. We specifically disclaim any liability with respect to this document and no contractual obligations are formed either directly or indirectly by this document. This document may not be reproduced or transmitted in any form or by any means, electronic or mechanical, for any purpose, without our prior written permission. Oracle, JD Edwards, PeopleSoft, and Siebel are registered trademarks of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.