Title: Focusing Your Oracle Database Tuning Efforts For PeopleSoft Applications
1Focusing Your Oracle Database Tuning Efforts For
PeopleSoft Applications
- Bobby Durrett
- U. S. Foodservice, Inc.
2Introduction
- PeopleSoft is a complicated application
- There are many things that can be tuned
hardware, operating system, Oracle and the
application - There are many books, articles, etc. on Oracle
tuning - Need a way to focus your efforts on the one area
that will help the most
3Oracle Server Processes
- Each PeopleSoft program connects to an Oracle
server process - If a PeopleSoft program that you care about is
slow you need to see where its Oracle process is
spending its time - If you can find out where the server process is
spending the majority of its time you can focus
your tuning efforts on reducing that time
4Oracle Server Processes - continued
- A reduction in the Oracle server processs time
will result in an equal reduction in the
PeopleSoft programs time - An Oracle server process is a window on all the
other pieces of the database - it is where the
PeopleSoft application touches everything else on
the database server
5(No Transcript)
6Performance Profile
- Oracle supplies CPU time and wait time for a
server process - You can produce a Performance Profile of the
server process or session - CPU time
- Wait time
- Elapsed time end time minus start time
- CPU time plus wait time should equal elapsed time
but doesnt always
7Example Of A Performance Profile
TIMESOURCE ELAPSED_SECONDS ----
------------------------- --------------- REALELAP
SED 25 db file
scattered read 16.000231 CPU
8.87 db file
sequential read 1.286592 SQLNet
message from client .257231 log file
sync .043774 direct path
write .028848 SQLNet message
to client .000039
8Where We Are Going From Here
- Simple way to get a profile
- Four different categories time can fall under
- How to find the correct Oracle session
- A more accurate way to get a profile
- A tool that gives you a profile of SQL that has
occurred in the past - Conclusion and references
9How To Get A Performance Profile Using V Tables
Before Script
- Run script to start monitoring an Oracle session
- Get waits from VSESSION_EVENT
- Get CPU from VSESSTAT
- Get current time
- Store these in a table
10DROP TABLE BEFOREOTHERSESSION CREATE TABLE
BEFOREOTHERSESSION AS SELECT SID,EVENT
TIMESOURCE,(TIME_WAITED/100) SECONDS FROM
VSESSION_EVENT WHERE SIDMONITORED_SID INSER
T INTO BEFOREOTHERSESSION SELECT SID,'CPU'
TIMESOURCE,(VALUE/100) SECONDS FROM VSESSTAT
WHERE SIDMONITORED_SID AND STATISTIC(SELECT
STATISTIC FROM VSTATNAME WHERE NAME'CPU used
by this session') COMMIT
11INSERT INTO BEFOREOTHERSESSION SELECT
SID,'REALELAPSED' TIMESOURCE, (SYSDATE-TO_DATE('01
/01/1900','MM/DD/YYYY'))246060 SECONDS FROM
VSESSION WHERE SIDMONITORED_SID COMMIT
12How To Get A Performance Profile Using V Tables
After Script
- Run script to stop monitoring a session and to
get a performance profile report - Union together times for waits, CPU and current
time - Subtract the times stored by the before script
- Output the difference in order of most time to
least
13SELECT AFTER.TIMESOURCE, AFTER.SECONDS-BEFORE.SECO
NDS ELAPSED_SECONDS FROM (SELECT SID,EVENT
TIMESOURCE,(TIME_WAITED/100) SECONDS FROM
VSESSION_EVENT WHERE SIDMONITORED_SID UNION S
ELECT SID,'CPU' TIMESOURCE,(VALUE/100) SECONDS
FROM VSESSTAT WHERE SIDMONITORED_SID AND
STATISTIC(SELECT STATISTIC FROM VSTATNAME
WHERE NAME'CPU used by this session')
14UNION SELECT SID,'REALELAPSED' TIMESOURCE, (SYSDAT
E-TO_DATE('01/01/1900','MM/DD/YYYY'))246060
SECONDS FROM VSESSION WHERE SIDMONITORED_SID)
AFTER, BEFOREOTHERSESSION BEFORE WHERE BEFORE.SID
AFTER.SID AND AFTER.TIMESOURCEBEFORE.TIMESOURCE
ORDER BY ELAPSED_SECONDS DESC DROP TABLE
BEFOREOTHERSESSION
15Four Types of Time Main Point of the
Presentation
- Non-Idle waits - waits within the database
- Idle waits waits outside the database
- CPU
- Unaccounted-for time real time minus sum of
waits and CPU
16Non-idle Waits
- Ones that you hear most about
- Lots of documentation about what these mean
- Oracle documentation
- Metalink
- Books
- Articles
- Can usually reduce these by changing something in
the database
17Common Non-Idle Waits
- buffer busy waits
- db file scattered read
- db file sequential read
- enqueue
- latch free
- log file sync
18Non-Idle Wait Example
TIMESOURCE ELAPSED_SECONDS ----
------------------------- --------------- REALELAP
SED 32 enqueue
30.8 CPU
0
19Non-Idle Wait Example
- Enqueue wait comprises almost all of the time
- Indicates that the session is hung on a lock
- Just find the session that is holding the lock
and kill it
20Idle Waits
- Typically recommended that you ignore these
- Not as frequently discussed
- Many begin with SQLNet
- Cant fix by changing something in the database
21Idle Wait Example
TIMESOURCE ELAPSED_SECONDS ----
------------------------- --------------- REALELAP
SED 37 SQLNet
message from dblink 35.51 SQLNet
message from client 1.19 CPU
.48 log file sync
.02
22Idle Wait Example
- Almost all of the time spent waiting for SQLNet
message from dblink - This means that the time is spent on a remote
database - Need to go to the remote database and find the
session there and tune it
23CPU
- Server processs CPU time
- Means that the database blocks being accessed are
in memory
24CPU Example
TIMESOURCE ELAPSED_SECONDS ----
------------------------- --------------- REALELAP
SED 39 CPU
35.7 db file
sequential read 3.18 SQLNet
message from client 1.2 control
file parallel write .01 log file
sync .01
25CPU Example
- Almost all of the time is spent using the CPU
- Tune SQL to reduce number of memory accesses
- No need to look at I/O systems performance
26Unaccounted-For Time
- Least-documented concept in this talk
- Difference between real time that elapsed and the
sum of all the waits and the CPU - It is time that Oracles measurements do not
account for - Best examples are CPU queue wait time and time
spent waiting on paging
27Unaccounted-For Time Example
TIMESOURCE ELAPSED_SECONDS ------
--------------------- --------------- REALELAPSED
144 CPU
45.14 SQLNet message from
client .57 db file sequential read
.17 db file scattered read
.08 log file sync
.03
28Unaccounted-For Time Example
- The majority of the time (2/3) is not accounted
for by the CPU time or waits - Three CPU-intensive SQLs running on my
single-processor laptop - Unaccounted-for time is time spent on the CPU
queue - Fixed by reducing contention for the CPU
29Determining Your Oracle Session
- To get a profile you have to figure out which
session corresponds to the PeopleSoft program
that is slow - This is complicated by the fact that all
PeopleSoft programs login as the same Oracle user - Also, some Oracle sessions are shared by multiple
PeopleSoft users
30Many PeopleSoft Programs Connect To One Oracle
Session Or Server Process
- Batch
- Sqr
- Cobol
- Crystal
- Nvision
- Application Engine
- Two-tier Windows client
31Some PeopleSoft programs share Oracle sessions
- PeopleSofts application server has several
connections to the Oracle database - PeopleSoft programs that use the app server share
the app servers Oracle sessions - Web connections
- Three-tier Windows Client
32(No Transcript)
33How To Find Your Oracle Session Using V Tables
- Can use VSESSION and VSQLAREA to find the
active PeopleSoft SQL statements - Oracle user SYSADM
- Can use CLIENT_INFO column of VSESSION to
determine PeopleSoft userid and other information - Need to set parameter EnableDBMonitoring1 in app
server config file to get CLIENT_INFO populated
34Query To Find Oracle Session Id
SELECT A.SID, A.SERIAL, TO_CHAR(A.LOGON_TIME,'MM
-DD-YYYY HH24MISS') "Logon Time", A.CLIENT_INFO
, C.SQL_TEXT FROM VSESSION A,VSQLAREA C WHERE
A.SQL_ADDRESSC.ADDRESS () AND A.SQL_HASH_VALUE
C.HASH_VALUE () AND A.USERNAME 'SYSADM'
AND A.STATUS'ACTIVE' ORDER BY A.STATUS,A.SID,A.SE
RIAL
35App Server CLIENT_INFO Example
- SMITH,,10.1.2.3,PROD,PSAPPSRV,
- PeopleSoft userid
- Users IP address
- Database name
- Program name
36SQR CLIENT_INFO Example
- JONES,12904
- PeopleSoft user id
- SQR Unix process id
37Using Extended SQL Trace And TKPROF To Get A
Profile
- Term comes from Cary Millsap and Jeff Holts book
read it for tons more good information about
this - Get Oracle trace with waits Extended SQL
Trace - Use TKPROF to produce report with waits
- Piece together a profile from the TKPROF output
- More accurate than V tables contains wait
details - Only works in 9i or higher (TKPROF waitsyes)
38Trace And TKPROF Commands
- Commands to start and stop trace work from
sqlplus - First two arguments are session id and serial
number - TKPROF arguments indicate use of waits
- Orders SQL by total elapsed time so you see the
longest running SQLs first
39Using Extended Trace and TKPROF
To start trace execute sys.dbms_system.set_ev(12
,23,10046,8,) To end trace execute
sys.dbms_system.set_ev(12,23,10046,0,) TKPROF
command tkprof tracefile.txt tkprofout.txt
waitsyes "sort(PRSELA,EXEELA,FCHELA)" SYSNO
40Example TKPROF Output
- I highlight the numbers that will go on a
performance profile in red - Elapsed and CPU time come from the first part of
the report - The wait times come from the second part
41Sample TKPROF Output With Waits
select count() from dba_segments call
count cpu elapsed disk query
current rows ------- ------ --------
---------- ---------- ---------- --------- Parse
1 0.13 0.25 10
52 0 Execute 1 0.00 0.00
0 0 0 Fetch 2
7.99 30.57 18953 319306
0 ------- ------ -------- ---------- ----------
---------- ---------- total 4 8.12
30.83 18963 319358 0
42Sample TKPROF Output With Waits
Elapsed times include waiting on following
events Event waited on Times
Max. Wait Total Waited --------------------------
--- Waited ---------- ------------ SQLNet
message to client 2 0.00
0.00 db file scattered read 1974
0.06 17.14 db file sequential read
3621 0.03 5.25 SQLNet
message from client 2 0.01
0.01
43TKPROF Output As A Performance Profile
TIMESOURCE ELAPSED_SECONDS ----
------------------------- --------------- REALELAP
SED 30.83 db file
scattered read 17.14 CPU
8.12 db file
sequential read 5.25 SQLNet
message from client 0.01
44Using I3 To Get A Profile Of Something In The Past
- I3 is a tool from Veritas
- Formerly known as Precise
- Stores information you need to get a profile of a
SQL statement that occurred in the past - Have to piece together profile from two places
45In Oracle Display
- What I3 calls In Oracle time corresponds to
what I call - Non-idle waits I/O Wait
- CPU Using CPU
- Unaccounted-for time CPU wait or Memory wait
46(No Transcript)
47Overall Activity Display
- What I3 calls Overall Activity time corresponds
to what I call - Idle waits Request Wait
- Everything else bundled together under In
Oracle
48(No Transcript)
49Conclusion
- Get a profile of the session that corresponds to
the PeopleSoft program that is slow - Include all of the information Oracle gives you
in the profile and compare it to the real time
that elapses - Use that profile to direct your tuning efforts so
you dont waste time trying everything to improve
it
50References
- Direct Contention Identification Using Oracle's
Session Wait Event Views - Craig Shallahamer - Microstate Response-time Performance Profiling -
Danisment Gazi Unal - Optimizing Oracle Performance Cary Millsap and
Jeff Holt