--buffer busy waits
select sw.P1 "FILD ID", sw.P2 "Block ID", sw.P3 "Class ID"
from V$session_Wait sw where sw.EVENT='buffer busy waits'
SELECT s.ROW_WAIT_OBJ# FROM V$SESSION s where event = 'buffer busy waits'
select do.OWNER, do.OBJECT_NAME, do.SUBOBJECT_NAME, do.OBJECT_TYPE
from dba_objects do
where do.DATA_OBJECT_ID = &ROW_WAIT_OBJ#
/*db file scattered read multiblock read => a fast full scan(of an index)
a full table scan*/
select sw.P1 "obsolute file number", sw.P2 "block begin read",
sw.P3 "the number of blocks"
from V$session_Wait sw
where sw.EVENT = 'db file scattered read'
--
select s.SQL_ADDRESS, s.SQL_HASH_VALUE
from v$session s
where s.EVENT = 'db file%read'
SELECT s.ROW_WAIT_OBJ#
FROM V$SESSION s
where event = 'db file scattered read'
select do.OWNER, do.OBJECT_NAME, do.SUBOBJECT_NAME, do.OBJECT_TYPE
from dba_objects do
where do.DATA_OBJECT_ID = &ROW_WAIT_OBJ#
--db file sequential read a single-block
select sw.P1 "obsolute file number", sw.P2 "block begin read",
sw.P3 "the number of blocks"
from V$session_Wait sw
where sw.EVENT = 'db file scattered read'
/* db file sequential read (single block read into one SGA buffer)
* db file scattered read (multiblock read into many discontinuous SGA buffers)
* db direct read (single or multiblock read into the PGA, bypassing the SGA)*/
-- db file direct path and direct read temp
select sw.P1 "file_id", sw.P2 "start_block_id",
sw.P3 "the number of blocks"
from V$session_Wait sw
where sw.EVENT = 'db file direct path write'
--causees
/* The sorts are too large
* parallel slaves are used for scanning data */
--db file direct write
select sw.P1 "file_id", sw.P2 "start_block_id",
sw.P3 "the number of blocks"
from V$session_Wait sw
where sw.EVENT = 'db file direct path write'
/* sorts are too large to fit in memory and are written to disk
* parallel DML are issued to create/populate objects
* direct path loads*/
/*enqueue(enq):waits This event iddiates that the session is waiting for a lock
* that is held by another session,such as following related TX types:
* enq: TX-allocate ITL entry
* enq: TX-contention
* enq: TX-index contention
* enq: TX-row lock contention*/
select sw.P1 "LOCK TYPE", P2 "Resource identifier ID1",
p3 "Resource identifier ID3"
from v$session_wait sw
where sw.EVENT like 'enq: TX - row lock contention'
select * from v$lock l where l.REQUEST>0
SELECT DECODE(REQUEST, 0, 'Holder: ', 'Waiter:') || sid sess, id1, id2,lmode,
request, type
from v$lock
where (id1, id2, type) in
(select id1, id2, type from v$lock where request > 0)
order by id1, request
--blocking session
select s1.username || '@' || s1.machine || ' ( SID=' || s1.sid ||
' ) is blocking ' || s2.username || '@' || s2.machine || ' ( SID=' ||
s2.sid || ' ) ' AS blocking_status
from v$lock l1, v$session s1, v$lock l2, v$session s2
where s1.sid = l1.sid
and s2.sid = l2.sid
and l1.BLOCK = 1
and l2.request > 0
and l1.id1 = l2.id1
and l2.id2 = l2.id2
select a.SERIAL# from v$session a where a.SID=211
alter system kill session '211,485';
--free buffer waits
/*This wait event indicates that a server process was unable to find a free buffer and has
posted the database writer to make free buffers by writing out dirty buffers. A dirty
buffer is a buffer whose contents have been modified. Dirty buffers are freed for reuse
when DBWR has written the blocks to disk.
Causes
DBWR may not be keeping up with writing dirty buffers in the following situations:
■ The I/O system is slow.
■ There are resources it is waiting for, such as latches.
■ The buffer cache is so small that DBWR spends most of its time cleaning out
buffers for server processes.
■ The buffer cache is so big that one DBWR process is not enough to free enough
buffers in the cache to satisfy requests.*/
select * from v$filestat;
select * from V$DB_CACHE_ADVICE;
--latch events
/*A latch is a low-level internal lock used by Oracle Database to protect memory
structures. The latch free event is updated when a server process attempts to get a
latch, and the latch is unavailable on the first attempt.
There is a dedicated latch-related wait event for the more popular latches that often
generate significant contention. For those events, the name of the latch appears in the
name of the wait event, such as latch: library cache or latch: cache buffers
chains . This enables you to quickly figure out if a particular type of latch is
responsible for most of the latch-related contention. Waits for all other latches are
grouped in the generic latch free wait event.*/
/*
Check the following V$SESSION_WAIT parameter columns:
■ P1 : Address of the latch
■ P2 : Latch number
■ P3 : Number of times process has slept, waiting for the latch*/
select sw.EVENT, sum(sw.P3) SLERPS, sum(sw.SECONDS_IN_WAIT) seconds_in_wait
from v$session_wait sw
where sw.EVENT like 'latch%'
group by sw.EVENT
select se.EVENT, se.TIME_WAITED_MICRO,
round(se.TIME_WAITED_MICRO * 100 / s.DBTIME, 1) PCT_DB_TIME
from v$system_event se,
(select stm.VALUE DBTIME
from v$sys_time_model stm
where stm.STAT_NAME = 'DB time') s
where se.EVENT like 'latch%'
order by PCT_DB_TIME ASC
SELECT E.EVENT, E.WAIT_CLASS, E.TIME_WAITED_MICRO,
ROUND(TIME_WAITED_MICRO * 100 / S.DBTIME, 1) PCT_DB_TIME
FROM V$SYSTEM_EVENT E, V$EVENT_NAME N,
(SELECT VALUE DBTIME
FROM V$SYS_TIME_MODEL
WHERE STAT_NAME = 'DB time') S
WHERE E.EVENT_ID = N.EVENT_ID
AND N.WAIT_CLASS NOT IN ('Idle', 'System I/O')
ORDER BY PCT_DB_TIME ASC;
--shared pool ibrary cache
SELECT SQL_TEXT FROM V$SQLSTATS WHERE EXECUTIONS < 4 ORDER BY SQL_TEXT;
SELECT SUBSTR(SQL_TEXT, 1, 60), COUNT(*)
FROM V$SQLSTATS
WHERE EXECUTIONS < 4
GROUP BY SUBSTR(SQL_TEXT, 1, 60)
HAVING COUNT(*) > 1;
SELECT SQL_TEXT
FROM V$SQLSTATS
WHERE PLAN_HASH_VALUE IN (SELECT PLAN_HASH_VALUE
FROM V$SQLSTATS
GROUP BY PLAN_HASH_VALUE
HAVING COUNT(*) > 4)
ORDER BY PLAN_HASH_VALUE;
SELECT pa.SID, pa.VALUE "Hard Parses", ex.VALUE "Execute Count"
FROM V$SESSTAT pa, V$SESSTAT ex
WHERE pa.SID = ex.SID
AND pa.STATISTIC# =
(SELECT STATISTIC# FROM V$STATNAME WHERE NAME = 'parse count (hard)')
AND ex.STATISTIC# =
(SELECT STATISTIC# FROM V$STATNAME WHERE NAME = 'execute count')
AND pa.VALUE > 0;
---chax
select c.OBJECT_NAME, a.ROW_WAIT_OBJ#, a.ROW_WAIT_FILE#, a.ROW_WAIT_BLOCK#,
a.ROW_WAIT_ROW#,
dbms_rowid.rowid_create(1,
c.OBJECT_ID,
a.ROW_WAIT_FILE#,
a.ROW_WAIT_BLOCK#,
a.ROW_WAIT_ROW#) rid
from v$session a, v$enqueue_lock b, dba_objects c
where a.sid = b.SID
and b.type = 'TX'
and a.ROW_WAIT_OBJ# = object_id(+)