 |
|
Oracle Server Bottlenecks
Oracle Tips by Burleson Consulting |
Oracle Server Bottlenecks
If SQL has not been completely optimized, the
following server overload conditions are generally true:
This is sometimes evidenced by high
db file sequential read and
db file scattered read waits and can be
detected in the Oracle10g dba_hist_filestatxs view.
(SQL that issues unnecessary table block access, possibly due to
missing indexes or poor statistics), should be investigated.
Assuming that the SQL is optimized, the only remaining solutions are
the addition of RAM for the data buffers or a switch to solid-state
disks.
With the advent of 64-bit Oracle and large data
block buffers such as db_cache_size and db_keep_cache_size, the
main bottleneck for many databases has shifted from I/O to CPU. If
CPU is listed in the top wait events, sub-optimal SQL that may be
causing unnecessary logical I/O against the data buffers should be
investigated. The library cache can also be investigated to see if
excessive parsing might be causing the CPU consumption. Assuming
that Oracle has been optimized, the options to relieve a CPU
bottleneck are to add more CPUs or faster CPU processors. This is an
extremely rare event. On most installations which have paid only
minimal attention to sizing, CPU bottleneck is suffered only as a
consequence of bad SQL. Bad sort or “cached” nested loop will do
that. Typically, CPU set is never used more then 25%. Throwing
hardware at a problem is typically not a good idea.
In many Oracle-based applications, the largest
component of end-user response time is network latency. Oracle
captures important metrics that will show if the Oracle database is
network bound, specifically using the SQL*Net statistics from the dba_hist_sysstat view. Due to the Oracle Transparent Network Substrate (TNS) isolation, there are only a
few network tuning options, and most network issues, such as packet
sizes, are usually external to the Oracle database.
As we have noted, the Oracle10g Automatic
Memory Management (AMM) utility has facilities for re-sizing the
db_cache_size, shared_pool_size, and pga_aggregate_target SGA regions, and Oracle Enterprise Manager for detecting SGA regions that are too small. RAM can be
reallocated within these regions which will reduce
pga_aggregate_target if there are no disk sorts or hash joins,
reduce shared_pool_size if there is no library cache
contention, and reduce db_cache_size if there is low disk I/O
activity.
Historically, tiny data buffers meant that disk
I/O was the most common wait event, but this has changed with the
introduction of Solid State RAM disk and 64-bit Oracle where large
RAM data buffer caches can be implemented to reduce disk reads. This
has shifted many databases from I/O to CPU constraints, and it is
one of the reasons that Oracle introduced CPU based costing into the
SQL optimizer.
SEE CODE DEPOT FOR FULL SCRIPTS
 |
This is an excerpt from my latest book "Oracle
Tuning: The Definitive Reference".
You can buy it direct from the publisher for 30%-off and get
instant access to the code depot of Oracle tuning scripts: |
http://www.rampant-books.com/book_2005_1_awr_proactive_tuning.htm
|
|
Need an Oracle Health Check?
- Do you have
bad performance after an upgrade?
- Need to
certify that your database follows best practices?
BC Oracle performance gurus can quickly
certify every aspect of your
Oracle database and provide a complete verification that your database
is fully optimized. |

|
|