1 Interpreting Wait Events To Boost System Performance Roger Schrag Database Specialists, Inc. www.dbspecialists.com.

Slides:



Advertisements
Similar presentations
Database Tuning. Objectives Describe the roles associated with database tuning. Describe the dependency between tuning in different development phases.
Advertisements

Module 13: Performance Tuning. Overview Performance tuning methodologies Instance level Database level Application level Overview of tools and techniques.
Overview of performance tuning strategies Oracle Performance Tuning Allan Young June 2008.
1 Wait Event Enhancements in Oracle 10g Terry Sutton and Roger Schrag Database Specialists, Inc.
Finding the Performance Bottlenecks in Your Application Ian Jones and Roger Schrag Database Specialists, Inc. IOUG-A Live! 1999 Paper.
Buffer Cache Waits. #.2 Copyright 2006 Kyle Hailey Buffer Cache Waits Waits Disk I/O Buffer Busy Library Cache Enqueue SQL*Net Free Buffer Hot Blocks.
Acknowledgments Byron Bush, Scott S. Hilpert and Lee, JeongKyu
Oracle Architecture. Instances and Databases (1/2)
13 Copyright © 2005, Oracle. All rights reserved. Performance Management.
1 - Oracle Server Architecture Overview
More Examples of Interpreting Wait Events To Boost System Performance
Database Systems: Design, Implementation, and Management Eighth Edition Chapter 11 Database Performance Tuning and Query Optimization.
Computer Organization and Architecture
Oracle Architecture. Database instance When a database is started the current state of the database is given by the data files, a set of background (BG)
1 Tuning PL/SQL procedures using DBMS_PROFILER 20-August 2009 Tim Gorman Evergreen Database Technologies, Inc. Northern California Oracle.
Waits Defined Kyle Hailey #.2 Copyright 2006 Kyle Hailey Top 36 Foreground Waits write complete waits library cache.
Backup & Recovery 1.
12 Copyright © 2004, Oracle. All rights reserved. Automatic Management.
Database Systems: Design, Implementation, and Management Tenth Edition Chapter 11 Database Performance Tuning and Query Optimization.
Database Systems: Design, Implementation, and Management Eighth Edition Chapter 10 Database Performance Tuning and Query Optimization.
Chapter Oracle Server An Oracle Server consists of an Oracle database (stored data, control and log files.) The Server will support SQL to define.
#.1 Oracle Wait Interface in Oracle 10g. #.2 Today’s Session  Twelve wait event interface enhancements in Oracle 10g that we really like.  Documentation.
Review of Memory Management, Virtual Memory CS448.
By Lecturer / Aisha Dawood 1.  You can control the number of dispatcher processes in the instance. Unlike the number of shared servers, the number of.
1 Robert Wijnbelt Health Check your Database A Performance Tuning Methodology.
Part II : Waits Events Kyle Hailey
Optimizing Batch Job Performance Resources Consumed by Program I/O by Database File Name Delays Caused by Object Locks Heaviest Active Job Function Names.
Performance Diagnostics using STATSPACK data 18-May 2006 Tim Gorman SageLogix, Inc. N. CA Oracle Users Group.
Architecture Rajesh. Components of Database Engine.
Database Systems Slide 1 Database Systems Lecture 5 Overview of Oracle Database Architecture - Concept Manual : Chapters 1,8 Lecturer : Dr Bela Stantic.
Oracle Tuning Considerations. Agenda Why Tune ? Why Tune ? Ways to Improve Performance Ways to Improve Performance Hardware Hardware Software Software.
1 Oracle Architectural Components. 1-2 Objectives Listing the structures involved in connecting a user to an Oracle server Listing the stages in processing.
Oracle Tuning Ashok Kapur Hawkeye Technology, Inc.
Copyright © Oracle Corporation, All rights reserved. 1 Oracle Architectural Components.
An Oracle server:  Is a database management system that provides an open, comprehensive, integrated approach to information management.  Consists.
Guide to Linux Installation and Administration, 2e1 Chapter 10 Managing System Resources.
Triggers A Quick Reference and Summary BIT 275. Triggers SQL code permits you to access only one table for an INSERT, UPDATE, or DELETE statement. The.
Oracle9i Performance Tuning Chapter 12 Tuning Tools.
Achieving Scalability, Performance and Availability on Linux with Oracle 9iR2-RAC Grant McAlister Senior Database Engineer Amazon.com Paper
Database Systems Design, Implementation, and Management Coronel | Morris 11e ©2015 Cengage Learning. All Rights Reserved. May not be scanned, copied or.
Average Active Sessions (AAS) The Golden Metric ? Kyle Hailey
Process Architecture Process Architecture - A portion of a program that can run independently of and concurrently with other portions of the program. Some.
Visual Basic for Application - Microsoft Access 2003 Finishing the application.
#.1 SASH – Simulated ASH and other tools. #.2 OEMDB Optimizer Lab 128SASH performance$100,000$1500$500free SQL Tuning$100,000includedN/A Both$200,000$1500N/A.
Tracing Individual Users in Connection-pooled Environments with Oracle 10g Terry Sutton Database Specialists, Inc.
3 Copyright © 2006, Oracle. All rights reserved. Statistics and Wait Events.
Preface 1Performance Tuning Methodology: A Review Course Structure 1-2 Lesson Objective 1-3 Concepts 1-4 Determining the Worst Bottleneck 1-5 Understanding.
1 Chapter 9 Tuning Table Access. 2 Overview Improve performance of access to single table Explain access methods – Full Table Scan – Index – Partition-level.
#.1 Average Active Sessions (AAS) The Golden Metric ? Kyle Hailey
Oracle Architecture - Structure. Oracle Architecture - Structure The Oracle Server architecture 1. Structures are well-defined objects that store the.
for all Hyperion video tutorial/Training/Certification/Material Essbase Optimization Techniques by Amit.
Troubleshooting Dennis Shasha and Philippe Bonnet, 2013.
Same Plan Different Performance Mauro Pagano. Consultant/Developer/Analyst Oracle  Enkitec  Accenture DBPerf and SQL Tuning Training Tools (SQLT, SQLd360,
No more waiting. Sponsors About me  Database Technology Specialist  MVP  Blogger  Author 3
Oracle Database Architectural Components
1 PVSS Oracle scalability Target = changes per second (tested with 160k) changes per client 5 nodes RAC NAS 3040, each with one.
Chapter 21 SGA Architecture and Wait Event Summarized & Presented by Yeon JongHeum IDS Lab., Seoul National University.
SQL Database Management
SQL Trace and TKPROF.
Interpreting Wait Events To Boost System Performance
Chapter 3: Process Concept
SQL Server Monitoring Overview
Database Performance Tuning and Query Optimization
Introduction of Week 3 Assignment Discussion
Process & its States Lecture 5.
Troubleshooting Techniques(*)
Chapter 11 Database Performance Tuning and Query Optimization
Chapter 3: Processes.
Wait Event Enhancements in Oracle 10g
Presentation transcript:

1 Interpreting Wait Events To Boost System Performance Roger Schrag Database Specialists, Inc.

2 Session Objectives  Define wait events  Discuss how to use the wait event interface  Walk through four examples of how wait event information was used to troubleshoot production problems

3 “Wait Event” Defined  We say an Oracle process is “busy” when it wants CPU time.  When an Oracle process is not busy, it is waiting for something to happen.  There are only so many things an Oracle process could be waiting for, and the kernel developers at Oracle have attached names to them all.  These are wait events.

4 Wait Event Examples  An Oracle process waiting for the client application to submit a SQL statement waits on a “SQL*Net message from client” event.  An Oracle process waiting on another session to release a row-level lock waits on an “enqueue” event.

5 Wait Event Interface  Each Oracle process identifies the event it is waiting for each time a wait begins.  The instance collects cumulative statistics about events waited upon since instance startup.  You can access this information through v$ views and tracing events.  These make up the wait event interface.

6 Viewing Wait Events

7 Why Wait Event Information Is Useful  Wait events touch all areas of Oracle—from I/O to latches to parallelism to network traffic.  Wait event data can be remarkably detailed. “Waited 0.02 seconds to read 8 blocks from file 42 starting at block ”  Analyzing wait event data will yield a path toward a solution for almost any problem.

8 Important Wait Events  There were 102 wait events in Oracle 7.3.  There are 217 wait events in Oracle 8i Release 3 (8.1.7).  Most come up infrequently or are rarely significant for troubleshooting performance.  Different wait events are significant in different environments, depending on which Oracle features have been deployed.

9 A Few Common Wait Events enqueuelog file sequential read library cache pinlog file parallel write library cache load locklog file sync latch freedb file scattered read buffer busy waitsdb file sequential read control file sequential readdb file parallel read control file parallel writedb file parallel write log buffer spacedirect path read / write

10 Idle Events  Sometimes an Oracle process is not busy simply because it has nothing to do.  In this case the process will be waiting on an event that we call an “idle event.”  Idle events are usually not interesting from the tuning and troubleshooting perspective.

11 Common Idle Events client messageparallel query dequeue dispatcher timerrdbms ipc message Null eventSQL*Net message from client smon timerSQL*Net message to client PX Idle WaitSQL*Net more data from client pipe getwakeup time manager PL/SQL lock timervirtual circuit status pmon timerlock manager wait for remote message

12 Accounted For By The Wait Event Interface  Time spent waiting for something to do (idle events)  Time spent waiting for something to happen so that work may continue (non-idle events)

13 Not Accounted For By The Wait Event Interface  Time spent using a CPU  Time spent waiting for a CPU  Time spent waiting for virtual memory to be swapped back into physical memory Note that logical reads from the buffer cache do not appear in the wait event interface.

14 Timed Statistics The wait event interface will not collect timing information unless timed statistics are enabled.  Enable timed statistics dynamically at the instance or session level: ALTER SYSTEM SET timed_statistics = TRUE; ALTER SESSION SET timed_statistics = TRUE;  Enable timed statistics at instance startup by setting the instance parameter: timed_statistics = true

15 The Wait Event Interface  Dynamic performance views –v$system_event –v$session_event –v$event_name –v$session_wait  System event 10046

16 The v$system_event View Shows one row for each wait event name, along with cumulative statistics since instance startup. Wait events that have not occurred at least once since instance startup do not appear in this view. Column Name Data Type EVENT VARCHAR2(64) TOTAL_WAITS NUMBER TOTAL_TIMEOUTS NUMBER TIME_WAITED NUMBER AVERAGE_WAIT NUMBER

17 Columns In v$system_event  EVENT: The name of a wait event  TOTAL_WAITS: Total number of times a process has waited for this event since instance startup  TOTAL_TIMEOUTS: Total number of timeouts while waiting for this event since instance startup  TIME_WAITED: Total time waited for this wait event by all processes since instance startup (in centiseconds)  AVERAGE_WAIT: The average length of a wait for this event since instance startup (in centiseconds)

18 Sample v$system_event Query SQL> SELECT event, time_waited 2 FROM v$system_event 3 WHERE event IN ('smon timer', 4 'SQL*Net message from client', 5 'db file sequential read', 6 'log file parallel write'); EVENT TIME_WAITED log file parallel write db file sequential read smon timer SQL*Net message from client

19 The v$session_event View Shows one row for each wait event name within each session, along with cumulative statistics since session start. Column Name Data Type SID NUMBER EVENT VARCHAR2(64) TOTAL_WAITS NUMBER TOTAL_TIMEOUTS NUMBER TIME_WAITED NUMBER AVERAGE_WAIT NUMBER MAX_WAIT NUMBER

20 Columns In v$session_event  SID: The ID of a session (from v$session)  EVENT: The name of a wait event  TOTAL_WAITS: Total number of times this session has waited for this event  TOTAL_TIMEOUTS: Total number of timeouts while this session has waited for this event  TIME_WAITED: Total time waited for this event by this session (in centiseconds)  AVERAGE_WAIT: The average length of a wait for this event in this session (in centiseconds)  MAX_WAIT: The maximum amount of time the session had to wait for this event (in centiseconds)

21 Sample v$session_event Query SQL> SELECT event, total_waits, time_waited 2 FROM v$session_event 3 WHERE SID = 4 (SELECT sid FROM v$session 5 WHERE audsid = 6 USERENV ('sessionid') ); EVENT WAITS TIME_WAITED db file sequential read db file scattered read SQL*Net message to client 73 0 SQL*Net message from client

22 The v$event_name View Shows one row for each wait event name known to the Oracle kernel, along with names of up to three parameters associated with the wait event. Column Name Data Type EVENT# NUMBER NAME VARCHAR2(64) PARAMETER1 VARCHAR2(64) PARAMETER2 VARCHAR2(64) PARAMETER3 VARCHAR2(64)

23 Columns In v$event_name  EVENT#: An internal ID  NAME: The name of a wait event  PARAMETERn: The name of a parameter associated with the wait event

24 Sample v$event_name Query SQL> SELECT * 2 FROM v$event_name 3 WHERE name = 'db file scattered read'; EVENT# NAME PARAMETER1 PARAMETER2 PARAMETER db file scattered read file# block# blocks

25 The v$session_wait View Shows one row for each session, providing detailed information about the current or most recent wait event. Column Name Data Type SID NUMBER SEQ# NUMBER EVENT VARCHAR2(64) P1TEXT VARCHAR2(64) P1 NUMBER P1RAW RAW(4) P2TEXT VARCHAR2(64) P2 NUMBER P2RAW RAW(4) P3TEXT VARCHAR2(64) P3 NUMBER P3RAW RAW(4) WAIT_TIME NUMBER SECONDS_IN_WAIT NUMBER STATE VARCHAR2(19)

26 Columns In v$session_wait  SID: The ID of a session  SEQ#: A number that increments by one on each new wait  STATE: An indicator of the session status: –‘WAITING’: The session is currently waiting, and details of the wait event are provided. –‘WAITED KNOWN TIME’: The session is not waiting, but information about the most recent wait is provided. –‘WAITED SHORT TIME’ or ‘WAITED UNKNOWN TIME’: The session is not waiting, but partial information about the most recent wait is provided.

27 Columns In v$session_wait (continued)  EVENT: The name of a wait event  PnTEXT: The name of a parameter associated with the wait event  Pn: The value of the parameter in decimal form  PnRAW: The value of the parameter in raw form  WAIT_TIME: Length of most recent wait (in centiseconds) if STATE = ‘WAITED KNOWN TIME’  SECONDS_IN_WAIT: How long current wait has been so far if STATE = ‘WAITING’

28 Sample v$session_wait Query SQL> SELECT * FROM v$session_wait WHERE sid = 16; SID SEQ# EVENT P1TEXT P1 P1RAW P2TEXT P2 P2RAW P3TEXT P3 P3RAW WAIT_TIME SECONDS_IN_WAIT STATE db file scattered read file# block# AA1 blocks WAITED SHORT TIME

29 System Event Methods for setting system events:  “event” instance parameter  dbms_system.set_ev  oradebug  ALTER SESSION SET events Setting event enables SQL trace, and can optionally include wait event information and bind variable data in trace files as well.

30 System Event Settings ALTER SESSION SET events '10046 trace name context forever, level N’; Value of NEffect 1Enables ordinary SQL trace 4Enables SQL trace with bind variable values included in trace file 8Enables SQL trace with wait event information included in trace file 12Equivalent of level 4 and level 8 together

31 Sample Trace Output ===================== PARSING IN CURSOR #1 len=80 dep=0 uid=502 oct=3 lid=502 tim= hv= ad='511dca20' SELECT /*+ FULL */ SUM (LENGTH(notes)) FROM customer_calls WHERE status = :x END OF STMT PARSE #1:c=0,e=0,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=0,tim= BINDS #1: bind 0: dty=2 mxl=22(22) mal=00 scl=00 pre=00 oacflg=03 oacfl2=0 size=24 offset=0 bfp= bln=22 avl=02 flg=05 value=43 EXEC #1:c=0,e=0,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim= WAIT #1: nam='SQL*Net message to client' ela= 0 p1= p2=1 p3=0 WAIT #1: nam='db file scattered read' ela= 3 p1=17 p2=923 p3=8 WAIT #1: nam='db file scattered read' ela= 1 p1=17 p2=931 p3=8 WAIT #1: nam='db file scattered read' ela= 2 p1=17 p2=939 p3=8 WAIT #1: nam='db file sequential read' ela= 0 p1=17 p2=947 p3=1 WAIT #1: nam='db file scattered read' ela= 3 p1=17 p2=1657 p3=8

32 Using Wait Event Information Four examples of how wait event information was used to diagnose production problems

33 Example #1: A Slow Web Page A dynamic web page took several seconds to come up. Developers tracked the bottleneck down to one query. The execution plan showed that the query was using an index, so the developers thought there might be a “database problem.”

34 The Slow Query SELECT COUNT (*) FROM customer_inquiries WHERE status_code = :b1 AND status_date > :b2; Execution Plan SELECT STATEMENT Optimizer=CHOOSE 1 0 SORT (AGGREGATE) 2 1 TABLE ACCESS (BY INDEX ROWID) OF 'CUSTOMER_INQUIRIES' 3 2 INDEX (RANGE SCAN) OF 'CUSTOMER_INQUIRIES_N2' (NON-UNIQUE) The CUSTOMER_INQUIRIES_N2 index was a concatenated index with status_code as its first column. The status_date column was not indexed.

35 Wait Events For One User’s Session A query against v$session_event after the query ran in isolation yielded: TOTAL TIME EVENT WAITS WAITED db file scattered read 15 3 db file sequential read latch free 2 1 SQL*Net message to client 8 0 SQL*Net message from client

36 The Path To Problem Resolution  What we learned from wait event information: –The query performed a large number of index lookups. –1.40 seconds were spent waiting on the index lookups, plus any CPU overhead.  Areas to research further: –Was the database server CPU starved? –Was the index lookup selective? –Idea: Modify the query to use a full table scan instead of the index.

37 Research Results  The database server was CPU starved. The run queue length often exceeded twice the number of CPUs on the server.  Using just the status_code column of the CUSTOMER_INQUIRIES_N2 index made for a very unselective index lookup. Over 90% of the rows in the table had a status code of 12.  A full table scan against CUSTOMER_INQUIRIES appeared to run faster than using the index.

38 Problem Resolution A query against v$session_event after the modified query ran in isolation yielded: TOTAL TIME EVENT WAITS WAITED db file scattered read db file sequential read 3 1 latch free 1 0 SQL*Net message to client 10 0 SQL*Net message from client

39 Analyzing The Results  The rule of thumb that a full table scan is better than a scan of an unselective index is true.  I/O systems can perform a few multi-block I/O requests much faster than many single-block I/O requests.  Physical reads require a small amount of CPU time. Lack of available CPU can make an I/O intensive statement run even slower, although the wait event interface will not show this.

40 Example #2: Slow Batch Processing An additional data feed program was added to the nightly batch processing job queue, and the overnight processing no longer finished before the morning deadline. More CPUs were added to the database server, but this did not improve processing speed significantly.

41 Summarizing Wait Events During A Period Of Time  v$system_event shows wait event totals since instance startup.  v$session_event shows wait event totals since the beginning of a session.  You can capture view contents at different points in time and compute the delta in order to get wait event information for a specific period of time.  Statspack and many third-party tools can do this for you.

42 Simple Script To See Wait Events During A 30 Second Time Period CREATE TABLE previous_events AS SELECT SYSDATE timestamp, v$system_event.* FROM v$system_event; EXECUTE dbms_lock.sleep (30); SELECT A.event, A.total_waits - NVL (B.total_waits, 0) total_waits, A.time_waited - NVL (B.time_waited, 0) time_waited FROM v$system_event A, previous_events B WHERE B.event (+) = A.event ORDER BY A.event;

43 Wait Events During 30 Seconds Of Batch Processing EVENT TOTAL_WAITS TIME_WAITED LGWR wait for redo copy buffer busy waits control file parallel write db file scattered read db file sequential read direct path read direct path write enqueue free buffer waits latch free log buffer space 2 8 log file parallel write log file sequential read log file single write 2 6 log file switch completion 2 24 write complete waits 6 517

44 The Path To Problem Resolution  What we learned from wait event information: –There appeared to be significant lock contention. –In 30 seconds of elapsed time, sessions spent over 56 seconds waiting for locks.  Areas to research further: –What type of locks are being waited on? Row-level locks? Table-level locks? Others? –If the locks are table-level or row-level, then which database tables are experiencing contention? Which SQL statements are causing the contention?

45 Tracing Waits In A Session The following commands were used to enable wait event tracing in the process with Oracle PID 13: SQL> oradebug setorapid 13 Unix process pid: 19751, image: (TNS V1-V3) SQL> oradebug session_event – > trace name context forever, level 8 Statement processed. SQL>

46 Trace File Contents EXEC #5:c=0,e=0,p=3,cr=2,cu=1,mis=0,r=1,dep=1,og=4,tim= XCTEND rlbk=0, rd_only=0 WAIT #1: nam='write complete waits' ela= 11 p1=3 p2=2 p3=0 WAIT #4: nam='db file sequential read' ela= 4 p1=10 p2=12815 p3=1 WAIT #4: nam='db file sequential read' ela= 1 p1=10 p2=12865 p3=1 WAIT #4: nam='db file sequential read' ela= 5 p1=3 p2=858 p3=1 ===================== PARSING IN CURSOR #4 len=65 dep=1 uid=502 oct=6 lid=502 tim= hv= ad=' ' UPDATE CUSTOMER_CALLS SET ATTR_3 = :b1 WHERE CUSTOMER_CALL_ID=:b2 END OF STMT EXEC #4:c=1,e=10,p=3,cr=2,cu=3,mis=0,r=1,dep=1,og=4,tim= WAIT #4: nam='db file sequential read' ela= 0 p1=10 p2=5789 p3=1 WAIT #4: nam='enqueue' ela= 307 p1= p2= p3=6744 WAIT #4: nam='enqueue' ela= 53 p1= p2= p3=6744 WAIT #4: nam='db file sequential read' ela= 0 p1=10 p2=586 p3=1 WAIT #4: nam='db file sequential read' ela= 1 p1=3 p2=858 p3=1 EXEC #4:c=0,e=668,p=3,cr=5,cu=3,mis=0,r=1,dep=1,og=4,tim=

47 Understanding The enqueue Wait Event SQL> SELECT parameter1,parameter2,parameter3 2 FROM v$event_name 3 WHERE name = 'enqueue'; PARAMETER1 PARAMETER2 PARAMETER name|mode id1 id2 SQL> SELECT CHR ( /65536/256) || 2 CHR (MOD ( /65536, 256)), 3 MOD ( , 65536) lock_mode 4 FROM SYS.dual; CH LOCK_MODE TX 6

48 Analyzing The Results  Contention for exclusive locks on rows in the customer_calls table was responsible for substantial delays in processing.  Looking at the row_wait_obj# and row_wait_row# columns in v$session would have identified the exact rows undergoing contention.

49 Problem Resolution  Multiple programs were attempting to update the same rows in tables at the same time. Contention could be reduced by doing one or more of the following: –Running conflicting programs separately –Reducing lock scope –Reducing lock duration

50 Example #3: A Slow Client/Server Application A client/server application was taking several seconds to bring up a certain screen. The delay was occurring during startup before the user had a chance to kick off a query. The only thing happening in the form on startup was some fetching of basic reference data. All of the SQL had been tuned and was known to run very quickly.

51 Manipulating timed_statistics The timed_statistics parameter can be changed at any time at the session level with the following commands: ALTER SESSION SET timed_statistics = TRUE; ALTER SESSION SET timed_statistics = FALSE; Manipulate timed_statistics to collect wait event times during certain specific points of processing for debugging purposes.

52 Wait Events During Form Startup Modifying the form to disable timed_statistics at the end of the form startup logic yielded the following information in v$session_event: TOTAL TIME EVENT WAITS WAITED SQL*Net message to client SQL*Net message from client v$sesstat showed the following: NAME VALUE session logical reads 9295 CPU used by this session 82 physical reads 0

53 The Path To Problem Resolution  What we learned from wait event information: –There were over 18,000 network roundtrips during form startup, almost exactly two for every logical read. –The Oracle process spent over 10 seconds waiting for activity from the client. Since timed statistics were disabled at the end of the form startup logic, this does not include time spent waiting on the end user.  Areas to research further: –How many rows of data does the form read from the database during the startup phase? –Does the form really need to fetch all of this data? –Is the form fetching one row at a time or is it using Oracle’s array processing interface?

54 Research Results  The form was fetching 9245 rows of reference data during startup.  All of this data was necessary; none could be eliminated.  All data was fetched one row at a time.

55 Problem Resolution The startup logic of the form was modified to fetch 100 rows at a time. This yielded the following information in v$session_event: TOTAL TIME EVENT WAITS WAITED SQL*Net message to client SQL*Net message from client v$sesstat showed the following: NAME VALUE session logical reads 135 CPU used by this session 3 physical reads 0

56 Analyzing The Results  Fetching rows 100 at a time instead of one at a time dramatically reduced network roundtrips.  Reducing network roundtrips reduced time spent waiting on the network.  Fetching rows 100 at a time also significantly reduced the number of logical reads, and therefore the amount of CPU time required.

57 Example #4: A Floundering Database Server The DBA group discovered that one of the database servers was completely overwhelmed. Connecting to the database took a few seconds, selecting from SYS.dual took more than a second. Everything on the system ran very slowly.

58 Longest Waits In v$system_event EVENT TIME_WAITED log file sync write complete waits control file parallel write db file scattered read db file sequential read pmon timer smon timer db file parallel write rdbms ipc message latch free SQL*Net message from client

59 The Path To Problem Resolution  What we learned from wait event information: –Most of the waits involved idle events or I/O events. –A large amount of time was spent waiting on latches.  Areas to research further: –How long has the instance been up? –Which latches are experiencing contention?

60 Research Results  The instance had been up for about seven days.  The latch contention was in the shared pool and library cache, as evidenced by a query against v$latch_misses: PARENT_NAME SUM(LONGHOLD_COUNT) enqueue hash chains 614 enqueues 637 Checkpoint queue latch 790 session allocation 1131 messages 1328 session idle bit 2106 latch wait list 5977 modify parameter values 6242 cache buffers chains 9876 row cache objects cache buffers lru chain shared pool library cache

61 Further Research Results  The shared pool was 400 Mb in size.  There were over 36,000 statements in the shared pool, almost all executed exactly once.  The application was not using bind variables.  Modifying the application to use bind variables was not an option.  Setting the cursor_sharing parameter to FORCE was also not an option.

62 Problem Resolution Bigger is not always better! Reducing the shared pool to 100 Mb provided plenty of space for sharable statements while reducing the effort required by Oracle to maintain the library cache LRU list. This reduced latch contention and boosted performance.

63 A Summary Of Wait Event Techniques  Isolating a statement and analyzing its wait events  Collecting wait event data for a session or the entire instance at two different times and computing the difference to find the wait events during a specific period of time  Enabling wait event tracing in a session

64 A Summary Of Wait Event Techniques (continued)  Enabling and disabling timed statistics dynamically to measure wait event times for a specific section of code  Ranking cumulative wait event data in order to see which wait events account for the most wait time

65 In Conclusion  The wait event interface gives you access to a detailed accounting of how Oracle processes spend their time.  Wait events touch all aspects of the Oracle database server.  The wait event interface will not always give you the answer to every performance problem, but it will just about always give you insights that guide you down the proper path to problem resolution.

66 The White Paper A companion white paper to this presentation is available for free download from my company’s website at:

67 Resources from Database Specialists  The Specialist newsletter –  Database Rx ® –dbrx.dbspecialists.com/guest Provides secure, automated monitoring, alert notification, and analysis of your Oracle databases

68 Contact Information Roger Schrag Database Specialists, Inc. 388 Market Street, Suite 400 San Francisco, CA Tel: 415/ Web: