Index   Search   Add FAQ   Ask Question  

Oracle Performance Tuning FAQ

$Date: 23-Apr-2000 $
$Revision: 1.10 $
$Author: Frank Naudé $

Proper Preparation Prevents Piss Poor Performance

Topics

  • When is cost base optimization triggered?
  • How can one optimize %XYZ% queries?
  • Where can one find I/O statistics per table?
  • My query was fine last week and now it is slow. Why?
  • Why is Oracle not using the damn index?
  • How does one tune Oracle Wait events?

  • Back to Oracle DBA Topics

    When is cost base optimization triggered?

    It's important to have statistics on all tables for the CBO (Cost Based Optimizer) to work correctly. If one table involved in a statement does not have statistics, Oracle has to revert to rule-based optimization for that statement. So you really want for all tables to have statistics right away; it won't help much to just have the larger tables analyzed.

    Generally, the CBO can change the execution plan when you:

    1. Change statistics of objects by doing an ANALYZE;
    2. Change some initialization parameters (for example: hash_join_enabled, sort_area_size, db_file_multiblock_read_count).

  • Back to top of file

  • How can one optimize %XYZ% queries?

    It is possible to improve %XYZ% queries by forcing the optimizer to scan all the entries from the index instead of the table. This can be done by specifying hints.

    If the index is physically smaller than the table (which is usually the case) it will take less time to scan the entire index than to scan the entire table.

  • Back to top of file

  • Where can one find I/O statistics per table?

    The UTLESTAT report shows I/O per tablespace but one cannot see what tables in the tablespace has the most I/O.

    The $ORACLE_HOME/rdbms/admin/catio.sql script creates a sample_io procedure and table to gather the required information. After executing the procedure, one can do a simple SELECT * FROM io_per_object; to extract the required information.

    For more details, look at the header comments in the $ORACLE_HOME/rdbms/admin/catio.sql script.

  • Back to top of file

  • My query was fine last week and now it is slow. Why?

    The likely cause of this is because the execution plan has changed. Generate a current explain plan of the offending query and compare it to a previous one that was taken when the query was performing well. Usually the previous plan is not available.

    Some factors that can cause a plan to change are:

    What do you think the plan should be? Run the query with hints to see if this produces the required performance.

  • Back to top of file

  • Why is Oracle not using the damn index?

    This problem normally only arises when the query plan is being generated by the Cost Based Optimizer. The usual cause is because the CBO calculates that executing a Full Table Scan would be faster than accessing the table via the index. Fundamental things that can be checked are: Remember that you MUST supply the leading column of an index, for the index to be used (unless you use a FAST FULL SCAN).

    There are many other factors taht affect the cost, but sometimes the above can help to show why an index is not being used by the CBO. If from checking the above you still feel that the query should be using an index, try specifying an index hint. Obtain an explain plan of the query either using TKPROF with TIMED_STATISTICS, so that one can see the CPU utilization, or with AUTOTRACE to see the statistics. Compare this to the explain plan when not using an index.

  • Back to top of file

  • How does one tune Oracle Wait events?

    Some wait events from V$SESSION_WAIT and V$SYSTEM_EVENT views:

    Event Name:Tuning Recomendation:
    db file sequential readTune SQL to do less I/O. Make sure all objects are analyzed. Redistribute I/O across disks.
    buffer busy waitsIncrease DB_BLOCK_BUFFERS/ Alalyze contention from SYS.V$BH
    log buffer spaceIncrease LOG_BUFFER parameter or move log files to faster disks

  • Back to top of file

  • General: Home | Index | Preamble | Glossary | OraCorp | Papers | Fun | News | Events | Y2000 | Books | Links | Forums
    Products: SQL | Plus | Loader | PL/SQL | PreComp | OPO | OMO | OO4OLE | DBA | PQO | PSO | OCO | Net | ODBC | WebServer | Des2k | Dev2k
    Systems: MVS | Unix | Windows | WindowsNT | NetWare | VMS