unit1 intro to waits

Upload: thota-mahesh-dba

Post on 04-Jun-2018

239 views

Category:

Documents


2 download

TRANSCRIPT

  • 8/13/2019 Unit1 Intro to Waits

    1/48

    Waits Defined

    Kyle Hailey

    http://perfvision.com

    http://perfvision.com/http://perfvision.com/
  • 8/13/2019 Unit1 Intro to Waits

    2/48

    #.2

    Copyright 2006 Kyle Hailey

    Top 36 Foreground Waits

    19. write complete waits

    20. library cache lock21. SQL*Net more data from dblink

    22. log file switch (checkpoint incomplete)

    23. library cache load lock

    24. row cache lock

    25. local write wait

    26. sort segment request27. process startup

    28. unread message

    29. file identify

    30. pipe put

    31. switch logfile command

    32. SQL*Net break/reset to dblink33. log file switch (archiving needed)

    34. Wait for a undo record

    35. direct path write (lob)

    36. undo segment extension

    1. db file sequential read

    2. log file sync3. db file scattered read

    4. latch free

    5. enqueue

    6. SQL*Net more data from client

    7. direct path read

    8. direct path write9. buffer busy waits

    10. SQL*Net more data to client

    11. log buffer space

    12. log file switch completion

    13. library cache pin

    14. SQL*Net break/reset to client15. io done

    16. file open

    17. free buffer waits

    18. db file parallel read

    minus OPS, RAC, PQ, Resource Mgr http://www.oraperf.com

  • 8/13/2019 Unit1 Intro to Waits

    3/48

    #.3

    Copyright 2006 Kyle Hailey

    Tuning Methodology

    Machine

    Run queue (CPU)

    reduce CPU usage or add CPUsPaging

    Reduce memory usage or add memory

    Oracle

    Waits >> CPU Tune waits

    We are going toconcentrate here onWAITS

  • 8/13/2019 Unit1 Intro to Waits

    4/48

    #.4

    Copyright 2006 Kyle Hailey

    For Analysis

    CPU Time

    For comparision with Wait Time

    Wait Time

    Top Waits If Wait Time >> CPU Time, need top waits

    Wait Arguments p1, p2, p3

    For detailed analysis of some waitsSQL that caused waits

    For detailed analysis of some waits

  • 8/13/2019 Unit1 Intro to Waits

    5/48

    #.5

    Copyright 2006 Kyle Hailey

    Wait and CPU Data Sources

    I Statspack

    Top 5 Timed Events

    II10g ASHOEM

    ASH Report : ashrpt.sql

    Custom queries on v$active_session_history

    IIIV$session & v$session_wait

    Custom queries

  • 8/13/2019 Unit1 Intro to Waits

    6/48

    #.6

    Copyright 2006 Kyle Hailey

    I Statspack

    Look at Top 5 Timed Events

    Top 5 Timed Events~~~~~~~~~~~~~~~~~~ % TotalEvent Waits Time (s) Call Time-------------------------------------------- ------------ ----------- ---------buffer busy waits 2,748 250 78.72CPU time 32 10.16free buffer waits 1,588 15 4.63write complete waits 10 8 2.51log buffer space 306 5 1.51

  • 8/13/2019 Unit1 Intro to Waits

    7/48

    #.7

    Copyright 2006 Kyle Hailey

    II OEM 10g Performance Tab

  • 8/13/2019 Unit1 Intro to Waits

    8/48

    #.8

    Copyright 2006 Kyle Hailey

    II OEM 10g Zoom-In

  • 8/13/2019 Unit1 Intro to Waits

    9/48

    #.9

    Copyright 2006 Kyle Hailey

    II Top Activity Page

  • 8/13/2019 Unit1 Intro to Waits

    10/48

    #.10

    Copyright 2006 Kyle Hailey

    II 10g v$active_session_history

    The best source

    Only in 10g

    Can simulate in any version since v7

  • 8/13/2019 Unit1 Intro to Waits

    11/48

    #.11

    Copyright 2006 Kyle Hailey

    II Querying ASH

    selectevent as "TOP 5 Timed Events",cnt as "Count" from (

    select decode(ash.session_state,

    'ON CPU','CPU',en.name) event ,count(decode(ash.session_state,'ON CPU','CPU',en.name)) cnt

    fromv$active_session_history ash,v$event_name en

    where en.event# (+) = ash.event#and SAMPLE_TIME > sysdate - (5/(24*60))

    group by decode(ash.session_state,'ON CPU','CPU',en.name)order by count(decode(ash.session_state,

    'ON CPU','CPU',en.name)) desc

    ) where rownum < 6;

    Top 5 Timed Events Count------------------------------------ ---------

    log file parallel write 8CPU 7control file parallel write 3null event 3log file sync 2

  • 8/13/2019 Unit1 Intro to Waits

    12/48

    #.12

    Copyright 2006 Kyle Hailey

    II Querying ASH for P1,P2,P3

    SID EVENT P1 P2 P3

    --- ----------------------- --- --- ---

    236 db file scattered read 3 35291 16

    245 db file scattered read 1 13646 2248 read by other session 1 13646 1

    245 db file scattered read 1 8457 7

    248 db file scattered read 1 42226 8

    245 db file sequential read 1 13591 1

    select

    session_id,

    event,

    p1, p2, p3from v$ash

  • 8/13/2019 Unit1 Intro to Waits

    13/48

    #.13

    Copyright 2006 Kyle Hailey

    II ASH ReportASH report

    @?/rdbms/admin/ashrpt.sql

    Pick interval over last 7 days !

    1) General info

    2) Top User Events ***

    3) Top Background Events

    4) Top Event P1/P2/P3 Values

    5) Top Service/Module

    6) Top Client IDs

    7) Top SQL Command Types

    8) Top SQL Statements ***

    9) Top SQL using literals

    10) Top Sessions ***

    11) Top Blocking Sessions

    12) Top Sessions running PQs

    13) Top DB Objects

    14) Top DB Files

    15) Top Latches

    16) Activity Over Time ***

  • 8/13/2019 Unit1 Intro to Waits

    14/48

    #.14

    Copyright 2006 Kyle Hailey

    III V$session_wait

    select

    decode(w.wait_time, 0, w.event , 'CPU') as "TOP 5 Timed Events,

    count(*)

    from v$session s,v$session_wait w

    where w.sid=s.sid

    and s.status='ACTIVE'

    and s.type='USER'

    and w.event not in ('jobq slave wait',

    'rdbms ipc reply')

    group by

    decode(w.wait_time, 0, w.event , 'CPU')

    order by count(*) desc;

    Moment in Time data

  • 8/13/2019 Unit1 Intro to Waits

    15/48

    #.15

    Copyright 2006 Kyle Hailey

    III V$session_wait

    Top 5 Timed Events COUNT

    ----------------------------------- ----------enq: UScontention 4

    CPU 3

    buffer busy waits 1latch: row cache objects 1

  • 8/13/2019 Unit1 Intro to Waits

    16/48

    #.16

    Copyright 2006 Kyle Hailey

    III V$session_wait

    col status for a35select s.sid,

    s.sql_hash_value,

    decode(w.wait_time, 0, w.event , 'CPU') as status,

    w.p1, w.p2, w.p3from v$session s,

    v$session_wait w

    where w.sid=s.sid

    and s.status='ACTIVE'and s.type='USER'

    and w.event not in ('jobq slave wait',

    'rdbms ipc reply');

  • 8/13/2019 Unit1 Intro to Waits

    17/48

    #.17

    Copyright 2006 Kyle Hailey

    III V$session_wait

    SID SQL_HASH STATUS P1 P2 P3

    ---------- -------------- -------------------------------- ---------- ---------- ----------

    234 82347421 CPU 1431502854 39 0

    235 3336613934 enq: US - contention 1431502854 44 0

    236 1772152815 enq: US - contention 1431502854 42 0

    238 2750335498 enq: US - contention 1431502854 44 0

    240 343101472 enq: US - contention 1431502854 44 0

    246 1782401401 enq: US - contention 1431502854 44 0

    248 3333220954 CPU 1650815232 1 0252 323960517 enq: US - contention 1431502854 44 0

    260 1272059733 CPU 1431502854 44 0

    Moment in Time data

  • 8/13/2019 Unit1 Intro to Waits

    18/48

    #.18

    Copyright 2006 Kyle Hailey

    Waits we will Ignore

    Background

    Idle

    RACResource Manager

  • 8/13/2019 Unit1 Intro to Waits

    19/48

    #.19

    Copyright 2006 Kyle Hailey

    Background Waits

    Filter Out Background Waits

    StatspackASH : SESSION_TYPE='FOREGROUND

    V$session_wait : type='USER'

  • 8/13/2019 Unit1 Intro to Waits

    20/48

    #.20

    Copyright 2006 Kyle Hailey

    Background Waits

    ASHAvoid Background waits in ASH with

    V$session_wait joined to v$session

    Select from v$active_session_history

    where SESSION_TYPE='FOREGROUND'

    select

    from v$session s,v$session_wait w

    where w.sid=s.sid

    and s.type='USER'

  • 8/13/2019 Unit1 Intro to Waits

    21/48

    #.21

    Copyright 2006 Kyle Hailey

    Idle Waits

    Filter Out

    10g

    where wait_class != IdleCreate a list

    9iCreate a list with

    Documentation

    List created from 10g

    Select name from v$event_name wherewait_class=Idle;

  • 8/13/2019 Unit1 Intro to Waits

    22/48

    #.22

    Copyright 2006 Kyle Hailey

    Parallel Query Waits

    Filter Out

    Parallel Query Wait events are unusable

    Save waits are both idle and waitsParallel Query Waits start with PX or KX

    PX Deq: Par Recov Reply

    PX Deq: Parse Reply

  • 8/13/2019 Unit1 Intro to Waits

    23/48

  • 8/13/2019 Unit1 Intro to Waits

    24/48

    #.24

    Copyright 2006 Kyle Hailey

    Resource Manager Waits

    Resource manager throttles user

    Creates wait

    Obfuscates problems 10g

    select name from v$event_name where

    wait_class='Scheduler';

  • 8/13/2019 Unit1 Intro to Waits

    25/48

    #.25

    Copyright 2006 Kyle Hailey

    Wait Arguments: P1,P2,P3

    Each Wait has a 3 parameters P1,P2,P3

    Give detailed information

    Meaning different for each wait

    Meaning definitions in V$event_nameSelect

    name,

    parameter1,parameter2,

    parameter3

    from v$event_name;

  • 8/13/2019 Unit1 Intro to Waits

    26/48

    #.26

    Copyright 2006 Kyle Hailey

    Wait Arguments ExampleNAME PARAMETER1 PARAMETER2 PARAMETER3

    ----------------------------------- --------------- --------------- ---------------

    latch: cache buffers chains address number tries

    free buffer waits file# block# set-id#

    buffer busy waits file# block# class#

    latch: redo copy address number tries

    log buffer space

    switch logfile command

    log file sync buffer#

    db file sequential read file# block# blocks

    enq: TM - contention name|mode object # table/partition

    undo segment extension segment#

    enq: TX - row lock contention name|mode usn

  • 8/13/2019 Unit1 Intro to Waits

    27/48

    #.27

    Copyright 2006 Kyle Hailey

    Waits

    I/O

    Library Cache

    Locks

    Undo

    Redo

    Buffer Cache

    SQL*Net

    Wait Tree

  • 8/13/2019 Unit1 Intro to Waits

    28/48

    #.29

    Copyright 2006 Kyle Hailey

    Top 12 Waits

    NAME Count % Total

    1. db file sequential read 23,850.00 11.67%2. log file sync 20,594.00 10.08%

    3. db file scattered read 15,505.00 7.59%

    4. latch free 11,078.00 5.42%

    5. enqueue 7,732.00 3.78%

    6. SQL*Net more data from client 7,510.00 3.67%7. direct path read 5,840.00 2.86%

    8. direct path write 4,868.00 2.38%

    9. buffer busy waits 4,589.00 2.25%

    10. SQL*Net more data to client 3,805.00 1.86%

    11. log buffer space 2,990.00 1.46%

    12. log file switch completion 2,878.00 1.41%

    Above is over 80% of wait times reported

    Anjo Kolk www.oraperf.com

  • 8/13/2019 Unit1 Intro to Waits

    29/48

    #.30

    Copyright 2006 Kyle Hailey

    Top 36 Foreground Waits19. write complete waits

    20. library cache lock

    21. SQL*Net more data from dblink

    22. log file switch (checkpoint incomplete)

    23. library cache load lock

    24. row cache lock

    25. local write wait26. sort segment request

    27. process startup

    28. file identify

    29. pipe put

    30. switch logfile command

    31. SQL*Net break/reset to dblink32. log file switch (archiving needed)

    33. Wait for a undo record

    34. direct path write (lob)

    35. undo segment extension

    36. undo segment tx slot

    1. db file sequential read

    2. log file sync3. db file scattered read

    4. latch free

    5. enqueue

    6. SQL*Net more data from client

    7. direct path read

    8. direct path write9. buffer busy waits

    10. SQL*Net more data to client

    11. log buffer space

    12. log file switch completion

    13. library cache pin

    14. SQL*Net break/reset to client

    15. io done

    16. file open

    17. free buffer waits

    18. db file parallel read

    minus OPS, RAC, PQ, Resource Mgr

  • 8/13/2019 Unit1 Intro to Waits

    30/48

    #.31

    Copyright 2006 Kyle Hailey

    Waits 1-9

    1. db file sequential readTune SQL, speed up disks (5-15ms), increase buffer cache

    2. log file syncCommit less, put redo logs on faster disks

    3. db file scattered read

    FTS - Tune SQL, add indexes, speed up disks (5-15ms)4. latch freeneed p1,p2,p3

    5. enqueueneed p1,p2,p3 and SQL

    6. SQL*Net more data from clientUsually OK, reduce data transferred, possible Network problems

    7. direct path readsorts or PQO- tune IO, sort less

    8. direct path writedirect path load or temp io, improve disk speed

    9. buffer busy waitsneed p1,p2,p3 and SQL

    # 32

  • 8/13/2019 Unit1 Intro to Waits

    31/48

    #.32

    Copyright 2006 Kyle Hailey

    Waits 10-18

    10. SQL*Net more data to clientUsually OK, reduce amount of data transferred, possible Network tuning needed11. log buffer space

    Increase log buffer

    12. log file switch completionIncrease log file sizes

    13. library cache pinReduce parsing the same cursor concurently

    14. SQL*Net break/reset to clientCheck for errors in sql statement

    15. io doneIo done by IO slaves, oracleIxxx could also be an idle waitsort of worthless

    16. file open

    Reduce logons/logoffs or keep log files open17. free buffer waits

    Increase buffer cache size

    18. db file parallel readTune sql, tune io subsystem, increase buffer cache

    # 33

  • 8/13/2019 Unit1 Intro to Waits

    32/48

    #.33

    Copyright 2006 Kyle Hailey

    Waits 19-27

    19. write complete waits

    Increase buffer cache (or tune DBWR)20. library cache lock

    Avoid hard parsing same cursor at same time

    21. SQL*Net more data from dblinkReduce data transfer, check net response

    22. log file switch (checkpoint incomplete)Add log files (or increase log file size)23. library cache load lock

    Avoid hard parsing same cursor at same time

    24. row cache lockneed p1

    25. local write waittruncates / reduce cache size

    26. sort segment requestSMON busy, process rollback problem

    27. process startupIf MTS, increase min servers and dispatchers in init.ora

    # 34

  • 8/13/2019 Unit1 Intro to Waits

    33/48

    #.34

    Copyright 2006 Kyle Hailey

    Waits 28-36

    28. file identifyKeep log files open, reduce checkpoints

    29. pipe putSpeed up pipe readers

    30. switch logfile commandAvoid switching log files

    31. SQL*Net break/reset to dblinkCheck for errors in sql statement sent

    32. log file switch (archiving needed)Archive log running out of space

    33. Wait for a undo record??

    34. direct path write (lob)Improve IO, reduce lob write size

    35. undo segment extensionUse UNDO or with RBS, increase RBS size, avoid OPTIMAL

    36. undo segment tx slotUse UNDO, increae # of RBS segs

    # 35

  • 8/13/2019 Unit1 Intro to Waits

    34/48

    #.35

    Copyright 2006 Kyle Hailey

    Difficult Waits

    Latches

    Locks

    Buffer BusyRow Cache Lock

    # 36

  • 8/13/2019 Unit1 Intro to Waits

    35/48

    #.36

    Copyright 2006 Kyle Hailey

    Concepts: Latches

    Protect areas of memory from concurrent use

    Light weight locks

    Usually a held in a bit in memoryOften supported by atomic processor call

    Fast and cheap

    Gone if memory is lost

    Often used in cache coherency managementChanges to a datablock

    Exclusive GenerallySharing reading has been introduced for some latches

    # 37

  • 8/13/2019 Unit1 Intro to Waits

    36/48

    #.37

    Copyright 2006 Kyle Hailey

    Finding Latches

    latch free

    Covers many latches, find the problem latch by

    1. select name from v$latchname where latch# = p1;OR

    2. Find highest sleeps in Statspack latch section

    In 10g, important latches have a wait event

    latch: cache buffers chains latch: shared pool

    latch: library cache

    # 38

  • 8/13/2019 Unit1 Intro to Waits

    37/48

    #.38

    Copyright 2006 Kyle Hailey

    Latches : Find Highest Sleeps

    Use Statspack (or AWR report)

    Latch Name Get Requests Misses Sleeps Spin Gets Sleep1------------------- -------------- ----------- --------------------- -----

    shared pool 3,044,462 184,517 19,098 169,226 0

    library cache 2,242,805 79,554 15,198 66,497 0

    kks stats 263,464 2,842 1,774 1,152 0

    row cache object 434,844 955 147 816 0library cache lock 666,668 734 54 680 0

    library cache pin 741,963 635 42 593 0

    enqueues 133,577 373 40 333 0

    enqueue hash chains 133,751 89 19 70 0

    # 39

  • 8/13/2019 Unit1 Intro to Waits

    38/48

    #.39

    Copyright 2006 Kyle Hailey

    Important Latches Cache Buffers Chains

    Hot blocks, distribute activity, reduce update time, avoid select for update Cache Buffers LRU Chain

    Too much activity , uses multiple buffer caches and/or increse LRU latches

    Shared Pool

    Too much hard parsing, too small a shared pool

    Library Cache Latch

    Hard Parsing

    Use bind variables

    Uses cursor_sharing=force

    Increase shared pool size if reloads are high

    Avoid invalidations

    Soft Parsing

    Hold cursors open

    Use session_cached_cursors

    Use cursor_space_for_time

    # 40

  • 8/13/2019 Unit1 Intro to Waits

    39/48

    #.40

    Copyright 2006 Kyle Hailey

    Concepts: Locks

    Enqueue wait covers all locks pre 10

    Protect data against concurrent changes

    Lock info written into data structuresBlock headers

    Data blocks

    Written in cache structures

    Shareable in compatible modes

    # 41

  • 8/13/2019 Unit1 Intro to Waits

    40/48

    #.41

    Copyright 2006 Kyle Hailey

    Finding Locks

    Statspack not much help

    V$session_wait needs lots of decoding

    P1 tells Lock Type and Mode P2,P3 give more data

    Usually Need SQL to solveselect sid,

    event,

    chr(bitand(P1,-16777216)/16777215)||

    chr(bitand(P1,16711680)/65535) as "Type",mod(p1,16) as "mode"

    from v$session_wait

    where event = 'enqueue;

    SID EVENT Ty mode P2 P3

    --- ------- -- ---- ------- ----

    240 enqueue TX 6 2686995 433

    # 42

  • 8/13/2019 Unit1 Intro to Waits

    41/48

    #.42

    Copyright 2006 Kyle Hailey

    Locks 10g

    10g breaks Enqueues out enq: HW - contention Configuration

    enq: TM - contention Application

    enq: TX - allocate ITL entry Configuration

    enq: TX - index contention Concurrency

    enq: TX - row lock contention Application

    enq: UL - contention Application

    # 43

  • 8/13/2019 Unit1 Intro to Waits

    42/48

    #.43

    Copyright 2006 Kyle Hailey

    Locks : TM & TX

    select * from v$lock where type in ('TX', 'TM');

    SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK

    --- -- ---------- ---------- ----- ------- ----- -----

    151 TX 589855 1592 0 6 4049 0

    135 TM 53737 0 3 0 4058 0151 TM 53737 0 3 0 4049 0

    135 TX 589855 1592 6 0 4058 1

  • 8/13/2019 Unit1 Intro to Waits

    43/48

    # 45

  • 8/13/2019 Unit1 Intro to Waits

    44/48

    #.45

    Copyright 2006 Kyle Hailey

    Buffer Busy Waits

    Statspack

    Buffer wait Statistics for DB: ORA9 Instance: ora9 Snaps: 2 -3

    -> ordered by wait time desc, waits descTot Wait Avg

    Class Waits Time (s) Time (ms)

    ------------------ ----------- ---------- ---------

    data block 1,490 2 1

    undo header 2 0 0

    # 46

  • 8/13/2019 Unit1 Intro to Waits

    45/48

    #.46

    Copyright 2006 Kyle Hailey

    Buffer Busy Solutions

    IF Buffer Busy Waits high

    First look at v$waitstat Class

    Time/Count

    SQL> select * from v$waitstat;

    CLASS COUNT TIME

    ------------------ ---------- ----------data block 1 1segment header 0 0free list 0 0undo header 0 0undo block 0 0

    #.47

  • 8/13/2019 Unit1 Intro to Waits

    46/48

    #.47

    Copyright 2006 Kyle Hailey

    Row Cache Lock

    Need p1 to see the cache type

    SQL> select cache#, parameter from v$rowcache;CACHE# PARAMETER

    ---------- --------------------------------1 dc_free_extents4 dc_used_extents2 dc_segments0 dc_tablespaces5 dc_tablespace_quotas6 dc_files

    7 dc_users3 dc_rollback_segments8 dc_objects17 dc_global_oids12 dc_constraints

    #.48

  • 8/13/2019 Unit1 Intro to Waits

    47/48

    #.48

    Copyright 2006 Kyle Hailey

    Row Cache Lock

    Statspack

    ^LDictionary Cache Stats for DB: ORA9 Instance: ora9 Snaps: 1 -2

    ->"Pct Misses" should be very low (< 2% in most cases)

    ->"Cache Usage" is the number of cache entries being used

    ->"Pct SGA" is the ratio of usage to allocated size for that cache

    Get Pct Scan Pct Mod Final

    Cache Requests Miss Reqs Miss Reqs Usage

    ----------------- --------- ------ ------- ----- -------- ----------

    dc_object_ids 45 0.0 0 0 958

    dc_objects 89 0.0 0 0 1,129dc_segments 69 0.0 0 0 807

    dc_tablespaces 12 0.0 0 0 13

    dc_usernames 22 0.0 0 0 19

    dc_sequences 120,003 0.0 0 120,003 5

    #.49

  • 8/13/2019 Unit1 Intro to Waits

    48/48

    # 9

    Areas of Contention

    Buffer Cache

    Disk I/O

    Library Cache Redo

    SQL*Net

    Undo

    We will go through these areas and the wait events

    that are relevant to them.