This is an excerpt from the best-selling book Oracle Tuning: The Definitive Reference by Alexey
Danchenkov and Donald Burleson, technical editor Mladen Gogala. Click here to read the full chapter.
Oracle professionals know that you must optimize your database by tuning global
parameters before detailed application tuning can proceed. This excerpt reviews proven
techniques for tuning any Oracle instance and has scripts to ensure that your database is
optimized for its application load.
Viewing table and index access with AWR
One of the problems in Oracle9i was the single bit-flag that was used to monitor index
usage. The flag can be set with the alter index xxx monitoring usage command, and see if the
index was accessed by querying the v$object_usage view.
The goal of any index access is to use the most selective index for a query. This would be
the one that produces the smallest number of rows. The Oracle data dictionary is usually
quite good at this, but it is up to the DBA to define the index. Missing function-based
indexes are a common source of suboptimal SQL execution because Oracle will not use
an indexed column unless the WHERE clause matches the index column exactly.
The WISE tool is a great
way to quickly plot Oracle time series data and gather sign...
To continue reading for free, register below or login
To read more you must become a member of SearchOracle.com
');
// -->

atures for Oracle metrics. WISE is also able to plot
performance data on a daily or monthly average basis. See the WISE Web site for details.
Tracking SQL nested loop joins
As a review, nested loop joins are the most common method for Oracle to match rows in
multiple tables. Nested loop joins always invoke an index and they are never parallelized.
The following awr_nested_join_alert.sql script to count nested loop joins per hour:
The output below shows the number of total nested loop joins during the snapshot
period along with a count of the rows processed and the associated disk I/O. This report
is useful where the DBA wants to know if increasing pga_aggregate_target will improve
performance.
[IMAGE]
In the report above, nested loops are favored by SQL that returns a small number of
rows_processed than hash joins, which tend to return largest result sets.
The following awr_sql_index.sql script exposes the cumulative usage of database indexes:
The following is a sample of the output where the stress on every important index is
shown over time. This information is important for placing index blocks into the KEEP
pool to reduce disk reads and for determining the optimal setting for the important
optimizer_index_caching parameter.
[IMAGE]
The above report shows the highest impact tables.
Click here to read the rest of this chapter.