Oracle® Database Performance Tuning Guide 11g Release 1 (11.1) Part Number B28274-01 |
|
|
View PDF |
This chapter describes Oracle automatic features for performance diagnosing and tuning.
This chapter contains the following topics:
See Also:
Oracle Database 2 Day + Performance Tuning Guide for information about using Oracle Enterprise Manager to diagnose and tune the database with the Automatic Database Diagnostic MonitorWhen problems occur with a system, it is important to perform accurate and timely diagnosis of the problem before making any changes to a system. Oftentimes, a database administrator (DBA) simply looks at the symptoms and immediately starts changing the system to fix those symptoms. However, an accurate diagnosis of the actual problem in the initial stage significantly increases the probability of success in resolving the problem.
With Oracle Database, the statistical data needed for accurate diagnosis of a problem is stored in the Automatic Workload Repository (AWR). The Automatic Database Diagnostic Monitor (ADDM):
Analyzes the AWR data on a regular basis
Diagnoses the root causes of performance problems
Provides recommendations for correcting any problems
Identifies non-problem areas of the system
Because AWR is a repository of historical performance data, ADDM can be used to analyze performance issues after the event, often saving time and resources in reproducing a problem. For information about the AWR, see "Overview of the Automatic Workload Repository".
In most cases, ADDM output should be the first place that a DBA looks when notified of a performance problem. ADDM provides the following benefits:
Automatic performance diagnostic report every hour by default
Problem diagnosis based on decades of tuning expertise
Time-based quantification of problem impacts and recommendation benefits
Identification of root cause, not symptoms
Recommendations for treating the root causes of problems
Identification of non-problem areas of the system
Minimal overhead to the system during the diagnostic process
It is important to realize that tuning is an iterative process, and fixing one problem can cause the bottleneck to shift to another part of the system. Even with the benefit of ADDM analysis, it can take multiple tuning cycles to reach acceptable system performance. ADDM benefits apply beyond production systems; on development and test systems, ADDM can provide an early warning of performance issues.
This section contains the following topics:
An ADDM analysis can be performed on a pair of AWR snapshots and a set of instances from the same database. The pair of AWR snapshots define the time period for analysis, and the set of instances define the target for analysis.
If you are using Oracle Real Application Clusters (RAC), ADDM has three analysis modes:
Database
In Database mode, ADDM analyzes all instances of the database.
Instance
In Instance mode, ADDM analyzes a particular instance of the database.
Partial
In Partial mode, ADDM analyzes a subset of all database instances.
If you not using Oracle RAC, ADDM can only function in Instance mode because there is only one instance of the database.
An ADDM analysis is performed each time an AWR snapshot is taken and the results are saved in the database. The time period analyzed by ADDM is defined by the last two snapshots (the last hour by default). ADDM will always analyze the specified instance in Instance mode. For non-Oracle RAC or single instance environments, the analysis performed in the Instance mode is the same as a database-wide analysis. If you are using Oracle RAC, ADDM will also analyze the entire database in Database mode, as described in "Using ADDM with Oracle Real Application Clusters". After an ADDM completes its analysis, you can view the results using Oracle Enterprise Manager, or by viewing a report in a SQL*Plus session.
ADDM analysis is performed top down, first identifying symptoms, and then refining them to reach the root causes of performance problems. The goal of the analysis is to reduce a single throughput metric called DB
time
. DB
time
is the cumulative time spent by the database in processing user requests. It includes wait time and CPU time of all non-idle user sessions. DB
time
is displayed in the V$SESS_TIME_MODEL
and V$SYS_TIME_MODEL
views.
See Also:
Oracle Database Reference for information about the V$SESS_TIME_MODEL
and V$SYS_TIME_MODEL
views
"Time Model Statistics" for a discussion of time model statistics and DB
time
Oracle Database Concepts for information on server processes
By reducing DB
time
, the database is able to support more user requests using the same resources, which increases throughput. The problems reported by ADDM are sorted by the amount of DB
time
they are responsible for. System areas that are not responsible for a significant portion of DB
time
are reported as non-problem areas.
The types of problems that ADDM considers include the following:
CPU bottlenecks - Is the system CPU bound by Oracle or some other application?
Undersized Memory Structures - Are the Oracle memory structures, such as the SGA, PGA, and buffer cache, adequately sized?
I/O capacity issues - Is the I/O subsystem performing as expected?
High load SQL statements - Are there any SQL statements which are consuming excessive system resources?
High load PL/SQL execution and compilation, as well as high load Java usage
RAC specific issues - What are the global cache hot blocks and objects; are there any interconnect latency issues?
Sub-optimal use of Oracle by the application - Are there problems with poor connection management, excessive parsing, or application level lock contention?
Database configuration issues - Is there evidence of incorrect sizing of log files, archiving issues, excessive checkpoints, or sub-optimal parameter settings?
Concurrency issues - Are there buffer busy problems?
Hot objects and top SQL for various problem areas
Note:
This is not a comprehensive list of all problem types that ADDM considers in its analysis.ADDM also documents the non-problem areas of the system. For example, wait event classes that are not significantly impacting the performance of the system are identified and removed from the tuning consideration at an early stage, saving time and effort that would be spent on items that do not impact overall system performance.
If you are using Oracle Real Application Clusters (RAC), you can run ADDM in Database analysis mode to analyze the throughput performance of all instances of the database. In Database mode, ADDM considers DB time as the sum of the database time for all database instances. Using the Database analysis mode enables you to view all findings that are significant to the entire database in a single report, instead of reviewing a separate report for each instance.
The Database mode report includes findings about database resources (such as I/O and interconnect). The report also aggregates findings from the various instances if they are significant to the entire database. For example, if the CPU load on a single instance is high enough to affect the entire database, the finding will appear in the Database mode analysis, which will point to the particular instance responsible for the problem.
See Also:
Oracle Database 2 Day + Real Application Clusters Guide for information about using ADDM with Oracle RACIn addition to problem diagnostics, ADDM recommends possible solutions. ADDM analysis results are represented as a set of findings. See Example 6-1 for an example of ADDM analysis result. Each ADDM finding can belong to one of three types:
Problem findings describe the root cause of a database performance problem.
Symptom findings contain information that often lead to one or more problem findings.
Information findings are used for reporting information that are relevant to understanding the performance of the database, but do not constitute a performance problem (such as non-problem areas of the database and the activity of automatic database maintenance).
Warning findings contain information about problems that may affect the completeness or accuracy of the ADDM analysis (such as missing data in the AWR)
Each problem finding is quantified by an impact that is an estimate of the portion of DB
time
caused by the finding's performance issue. A problem finding can be associated with a list of recommendations for reducing the impact of the performance problem. The types of recommendations include:
Hardware changes - Adding CPUs or changing the I/O subsystem configuration
Database configuration - Changing initialization parameter settings
Schema changes - Hash partitioning a table or index, or using automatic segment-space management (ASSM)
Application changes - Using the cache option for sequences or using bind variables
Using other advisors - Running the SQL Tuning Advisor on high load SQL or running the Segment Advisor on hot objects
A list of recommendations can contain various alternatives for solving the same problem; you do not have to apply all the recommendations to solve a specific problem. Each recommendation has a benefit which is an estimate of the portion of DB
time
that can be saved if the recommendation is implemented. Recommendations are composed of actions and rationales. You need to apply all the actions of a recommendation in order to gain the estimated benefit. The rationales are used for explaining why the set of actions were recommended and to provide additional information to implement the suggested recommendation.
Consider the following section of an ADDM report in Example 6-1.
Example 6-1 Example ADDM Report
FINDING 1: 31% impact (7798 seconds) ------------------------------------ SQL statements were not shared due to the usage of literals. This resulted in additional hard parses which were consuming significant database time. RECOMMENDATION 1: Application Analysis, 31% benefit (7798 seconds) ACTION: Investigate application logic for possible use of bind variables instead of literals. Alternatively, you may set the parameter "cursor_sharing" to "force". RATIONALE: SQL statements with PLAN_HASH_VALUE 3106087033 were found to be using literals. Look in V$SQL for examples of such SQL statements.
In this example, the finding points to a particular root cause, the usage of literals in SQL statements, which is estimated to have an impact of about 31% of total DB
time
in the analysis period.
The finding has a recommendation associated with it, composed of one action and one rationale. The action specifies a solution to the problem found and is estimated to have a maximum benefit of up to 31% DB
time
in the analysis period. Note that the benefit is given as a portion of the total DB
time
and not as a portion of the finding's impact. The rationale provides additional information on tracking potential SQL statements that were using literals and causing this performance issue. Using the specified plan hash value of SQL statements that could be a problem, a DBA could quickly examine a few sample statements.
When a specific problem has multiple causes, the ADDM may report multiple problem and symptom findings. In this case, the impacts of these multiple findings can contain the same portion of DB
time
. Because the performance issues of findings can overlap, summing all the impacts of the reported findings can yield a number higher than 100% of DB
time
. For example, if a system performs many read I/Os the ADDM might report a SQL statement responsible for 50% of DB
time
due to I/O activity as one finding, and an undersized buffer cache responsible for 75% of DB
time
as another finding.
When multiple recommendations are associated with a problem finding, the recommendations may contain alternatives for solving the problem. In this case, the sum of the recommendations' benefits may be higher than the finding's impact.
When appropriate, an ADDM action many haves multiple solutions for you to choose from. In the example, the most effective solution is to use bind variables. However, it is often difficult to modify the application. Changing the value of the CURSOR_SHARING
initialization parameter is much easier to implement and can provide significant improvement.
Automatic database diagnostic monitoring is enabled by default and is controlled by the CONTROL_MANAGEMENT_PACK_ACCESS
and the STATISTICS_LEVEL
initialization parameters.
The CONTROL_MANAGEMENT_PACK_ACCESS
parameter should be set to DIAGNOSTIC
or DIAGNOSTIC+TUNING
to enable automatic database diagnostic monitoring. The default setting is DIAGNOSTIC+TUNING
. Setting CONTROL_MANAGEMENT_PACK_ACCESS
to NONE
disables ADDM.
The STATISTICS_LEVEL
parameter should be set to the TYPICAL
or ALL
to enable automatic database diagnostic monitoring. The default setting is TYPICAL
. Setting STATISTICS_LEVEL
to BASIC
disables many Oracle Database features, including ADDM, and is strongly discouraged.
See Also:
Oracle Database Reference for information about theCONTROL_MANAGEMENT_PACK_ACCESS
and STATISTICS_LEVEL
initialization parametersADDM analysis of I/O performance partially depends on a single argument, DBIO_EXPECTED
, that describes the expected performance of the I/O subsystem. The value of DBIO_EXPECTED
is the average time it takes to read a single database block in microseconds. Oracle uses the default value of 10 milliseconds, which is an appropriate value for most modern hard drives. If your hardware is significantly different, such as very old hardware or very fast RAM disks, consider using a different value.
To determine the correct setting for DBIO_EXPECTED
parameter:
Measure the average read time of a single database block read for your hardware. Note that this measurement is for random I/O, which includes seek time if you use standard hard drives. Typical values for hard drives are between 5000 and 20000 microseconds.
Set the value one time for all subsequent ADDM executions. For example, if the measured value if 8000 microseconds, you should execute the following command as SYS user:
EXECUTE DBMS_ADVISOR.SET_DEFAULT_TASK_PARAMETER( 'ADDM', 'DBIO_EXPECTED', 8000);
To diagnose database performance problems, first review the ADDM analysis results that are automatically created each time an AWR snapshot is taken. If a different analysis is required (such as a longer analysis period, using a different DBIO_EXPECTED
setting, or changing the analysis mode), you can run ADDM manually as described in this section.
ADDM can analyze any two AWR snapshots (on the same database), as long as both snapshots are still stored in the AWR (have not been purged). ADDM can only analyze instances that are started before the beginning snapshot and remain running until the ending snapshot. Additionally, ADDM will not analyze instances that experience significant errors when generating the AWR snapshots. In such cases, ADDM will analyze the largest subset of instances that did not experience these problems.
The primary interface for diagnostic monitoring is Oracle Enterprise Manager. Whenever possible, you should run ADDM using Oracle Enterprise Manager, as described in Oracle Database 2 Day + Performance Tuning Guide. If Oracle Enterprise Manager is unavailable, you can run ADDM using the DBMS_ADDM
package. In order to run the DBMS_ADDM
APIs, the user must be granted the ADVISOR
privilege.
This section contains the following topics:
See Also:
Oracle Database PL/SQL Packages and Types Reference for information about theDBMS_ADDM
packageFor Oracle RAC configurations, you can run ADDM in Database mode to analyze all instances of the databases. For single-instance configurations, you can still run ADDM in Database mode; ADDM will simply behave as if running in Instance mode.
To run ADDM in Database mode, use the DBMS_ADDM
.ANALYZE_DB
procedure:
BEGIN DBMS_ADDM.ANALYZE_DB ( task_name IN OUT VARCHAR2, begin_snapshot IN NUMBER, end_snapshot IN NUMBER, db_id IN NUMBER := NULL); END; /
The task_name
parameter specifies the name of the analysis task that will be created. The begin_snapshot
parameter specifies the snapshot number of the beginning snapshot in the analysis period. The end_snapshot
parameter specifies the snapshot number of the ending snapshot in the analysis period. The db_id
parameter specifies the database identifier of the database that will be analyzed. If unspecified, this parameter defaults to the database identifier of the database to which you are currently connected.
The following example creates an ADDM task in database analysis mode, and executes it to diagnose the performance of the entire database during the time period defined by snapshots 137 and 145:
VAR tname VARCHAR2(30); BEGIN :tname := 'ADDM for 7PM to 9PM'; DBMS_ADDM.ANALYZE_DB(:tname, 137, 145); END; /
To analyze a particular instance of the database, you can run ADDM in Instance mode. To run ADDM in Instance mode, use the DBMS_ADDM
.ANALYZE_INST
procedure:
BEGIN DBMS_ADDM.ANALYZE_INST ( task_name IN OUT VARCHAR2, begin_snapshot IN NUMBER, end_snapshot IN NUMBER, instance_number IN NUMBER := NULL, db_id IN NUMBER := NULL); END; /
The task_name
parameter specifies the name of the analysis task that will be created. The begin_snapshot
parameter specifies the snapshot number of the beginning snapshot in the analysis period. The end_snapshot
parameter specifies the snapshot number of the ending snapshot in the analysis period. The instance_number
parameter specifies the instance number of the instance that will be analyzed. If unspecified, this parameter defaults to the instance number of the instance to which you are currently connected. The db_id
parameter specifies the database identifier of the database that will be analyzed. If unspecified, this parameter defaults to the database identifier of the database to which you are currently connected.
The following example creates an ADDM task in instance analysis mode, and executes it to diagnose the performance of instance number 1 during the time period defined by snapshots 137 and 145:
VAR tname VARCHAR2(30); BEGIN :tname := 'my ADDM for 7PM to 9PM'; DBMS_ADDM.ANALYZE_INST(:tname, 137, 145, 1); END; /
To analyze a subset of all database instances, you can run ADDM in Partial mode. To run ADDM in Partial mode, use the DBMS_ADDM
.ANALYZE_PARTIAL
procedure:
BEGIN DBMS_ADDM.ANALYZE_PARTIAL ( task_name IN OUT VARCHAR2, instance_numbers IN VARCHAR2, begin_snapshot IN NUMBER, end_snapshot IN NUMBER, db_id IN NUMBER := NULL); END; /
The task_name
parameter specifies the name of the analysis task that will be created. The instance_numbers
parameter specifies a comma-delimited list of instance numbers of instances that will be analyzed. The begin_snapshot
parameter specifies the snapshot number of the beginning snapshot in the analysis period. The end_snapshot
parameter specifies the snapshot number of the ending snapshot in the analysis period. The db_id
parameter specifies the database identifier of the database that will be analyzed. If unspecified, this parameter defaults to the database identifier of the database to which you are currently connected.
The following example creates an ADDM task in partial analysis mode, and executes it to diagnose the performance of instance numbers 1, 2, and 4, during the time period defined by snapshots 137 and 145:
VAR tname VARCHAR2(30); BEGIN :tname := 'my ADDM for 7PM to 9PM'; DBMS_ADDM.ANALYZE_PARTIAL(:tname, '1,2,4', 137, 145); END; /
To display a text report of an executed ADDM task, use the DBMS_ADDM
.GET_REPORT
function:
DBMS_ADDM.GET_REPORT ( task_name IN VARCHAR2 RETURN CLOB);
The following example displays a text report of the ADDM task specified by its task name using the tname
variable:
SET LONG 1000000 PAGESIZE 0; SELECT DBMS_ADDM.GET_REPORT(:tname) FROM DUAL;
Note that the return type of a report is a CLOB
, formatted to fit line size of 80. For information about reviewing the ADDM analysis results in an ADDM report, see "ADDM Analysis Results".
Typically, you should view output and information from ADDM using Oracle Enterprise Manager or ADDM reports.
However, you can display ADDM information through the DBA_ADVISOR
views. This group of views includes:
DBA_ADVISOR_FINDINGS
This view displays all the findings discovered by all advisors. Each finding is displayed with an associated finding Id, name, and type. For tasks with multiple executions, the name of each task execution associated with each finding is also listed.
DBA_ADDM_FINDINGS
This view contains a subset of the findings displayed in the related DBA_ADVISOR_FINDINGS
view. This view only displays the ADDM findings discovered by all advisors. Each ADDM finding is displayed with an associated finding Id, name, and type.
DBA_ADVISOR_FINDING_NAMES
List of all finding names registered with the advisor framework.
DBA_ADVISOR_RECOMMENDATIONS
This view displays the results of completed diagnostic tasks with recommendations for the problems identified in each execution. The recommendations should be reviewed in the order of the RANK
column, as this relays the magnitude of the problem for the recommendation. The BENEFIT
column displays the benefit to the system you can expect after the recommendation is performed. For tasks with multiple executions, the name of each task execution associated with each advisor task is also listed.
DBA_ADVISOR_TASKS
This view provides basic information about existing tasks, such as the task Id, task name, and when the task was created. For tasks with multiple executions, the name and type of the last or current execution associated with each advisor task is also listed.
See Also:
Oracle Database Reference for information on static data dictionary views