Oracle7 Server Tuning

Contents Index Home Previous Next

What is Optimization?

Optimization is the process of choosing the most efficient way to execute a SQL statement. This is an important step in the processing of any Data Manipulation Language statement (SELECT, INSERT, UPDATE or DELETE). There may be many different ways for Oracle to execute such a statement, varying, for example, which tables or indexes are accessed in which order. The procedure used to execute a statement can greatly affect how quickly the statement executes. A part of Oracle called the optimizer chooses the way that it believes to be the most efficient.

The optimizer considers a number of factors to make what is usually the best choice among its alternatives. However, an application designer usually knows more about a particular application's data than the optimizer could know. Despite the best efforts of the optimizer, in some situations a developer can choose a more effective way to execute a SQL statement than the optimizer can.

Note: The optimizer may not make the same decisions from one version of Oracle to the next. In future versions of Oracle, the optimizer may make different decisions based on better, more sophisticated information available to it.

Execution Plans

To execute a Data Manipulation Language statement, Oracle may have to perform many steps. Each of these steps either physically retrieves rows of data from the database or prepares them in some way for the user issuing the statement. The combination of the steps Oracle uses to execute a statement is called an execution plan.

Example

This example shows an execution plan for this SQL statement:

SELECT ename, job, sal, dname 
	FROM emp, dept 
  WHERE emp.deptno = dept.deptno 
	AND NOT EXISTS 
		(SELECT * 
			FROM salgrade
		  WHERE emp.sal BETWEEN losal AND hisal);

This statement selects the name, job, salary, and department name for all employees whose salaries do not fall into any recommended salary range.

Figure 5 - 1 shows a graphical representation of the execution plan.

Figure 5 - 1. An Execution Plan

Steps of Execution Plan

Each step of the execution plan returns a set of rows that either are used by the next step or, in the last step, returned to the user or application issuing the SQL statement. A set of rows returned by a step is called a row source. Figure 5 - 1 is a hierarchical diagram showing the flow of rows from one step to another. The numbering of the steps reflects the order in which they are shown when you view the execution plan (how you view the execution will be explained shortly). This generally is not the order in which the steps are executed.

Each step of the execution plan either retrieves rows from the database or accepts rows from one or more row sources as input:

Access paths are discussed in the section "Choosing Access Paths" [*]. Methods by which Oracle joins row sources are discussed in the section "Join Operations" [*].

Order of Performing Execution Plan Steps

The steps of the execution plan are not performed in the order in which they are numbered. Oracle first performs the steps that appear as leaf nodes (for example, steps 3, 5, and 6) in the tree-structured graphical representation in Figure 5 - 1. The rows returned by each step become the row sources of its parent step. Then Oracle performs the parent steps.

To execute the statement for Figure 5 - 1, for example, Oracle performs the steps in this order:

Note that Oracle performs Steps 5, 4, 2, 6, and 1 once for each row returned by Step 3. Many parent steps require only a single row from their child steps before they can be executed. For such a parent step, Oracle performs the parent step (and possibly the rest of the execution plan) as soon as a single row has been returned from the child step. If the parent of that parent step also can be activated by the return of a single row, then it is executed as well. Thus the execution can cascade up the tree, possibly to encompass the rest of the execution plan.

Oracle performs the parent step and all cascaded steps once for each row in turn retrieved by the child step. The parent steps that are triggered for each row returned by a child step include table accesses, index accesses, nested loops joins, and filters.

Some parent steps require all rows from their child steps before they can be performed. For such a parent step, Oracle cannot perform the parent step until all rows have been returned from the child step. Such parent steps include sorts, sort-merge joins, group functions, and aggregates.

The EXPLAIN PLAN Command

You can examine the execution plan chosen by the optimizer for a SQL statement by using the EXPLAIN PLAN command. This command causes the optimizer to choose the execution plan and then inserts data describing the plan into a database table. The following is such a description for the statement examined in the previous section:

ID		OPERATION		OPTIONS		OBJECT_NAME 
------------------------------------------------------------ 
0		SELECT STATEMENT 
1		  FILTER 
2		    NESTED LOOPS 
3		      TABLE ACCESS	FULL		EMP 
4		      TABLE ACCESS	BY ROWID	DEPT 
5		        INDEX	UNIQUE SCAN	PK_DEPTNO 
6		    TABLE ACCESS	FULL		SALGRADE 

You can obtain such a listing by using the EXPLAIN PLAN command and then querying the output table. For information on how to use this command and produce and interpret its output, see Appendix A, "Performance Diagnostic Tools".

Each box in the figure and each row in the output table corresponds to a single step in the execution plan. For each row in the listing, the value in the ID column is the value shown in the corresponding box in the figure.

For a complete description of the EXPLAIN PLAN command, see Appendix A, "Performance Diagnostic Tools".

Oracle's Approaches to Optimization

To choose an execution plan for a SQL statement, the optimizer uses one of these approaches:

rule-based Using the rule-based approach, the optimizer chooses an execution plan based on the access paths available and the ranks of these access paths in Table 5 - 1.
cost-based Using the cost-based approach, the optimizer considers available access paths and factors in information based on statistics in the data dictionary for the objects (tables, clusters, or indexes) accessed by the statement to determine which execution plan is most efficient. The cost-based approach also considers hints, or optimization suggestions in the statement placed in a comment.

The Rule-Based Approach

The rule-based approach chooses execution plans based on heuristically ranked operations. If there is more than one way to execute a SQL statement, the rule-based approach always uses the operation with the lower rank. Generally, operations of lower rank execute faster than those associated with constructs of higher rank.

The Cost-Based Approach

Conceptually, the cost-based approach consists of these steps:

Goal of the Cost-Based ApproachBy default, the goal of the cost-based approach is the best throughput, or minimal resource usage necessary to process all rows accessed by the statement.

Oracle can also optimize a statement with the goal of best response time, or minimal resource usage necessary to process the first row accessed by a SQL statement. For information on how the optimizer chooses an optimization approach and goal, see the section "Choosing an Optimization Approach and Goal" [*].

Note: Throughput and response times apply only to non-parallel statements. When using the parallel query option, resource usage is not related to elapsed time. See Chapter 6, "Parallel Query Option", for more information about the parallel query option.

Statistics Used for the Cost-Based ApproachThe cost-based approach uses statistics to estimate the cost of each execution plan. These statistics quantify the data distribution and storage characteristics of tables, columns, and indexes. The ANALYZE command generates these statistics. Using these statistics, the optimizer estimates how much I/O, CPU time, and memory are required to execute a SQL statement using a particular execution plan.

The following data dictionary views display the statistics:

For information on these statistics, see Oracle7 Server Reference.


Contents Index Home Previous Next