0% found this document useful (0 votes)
90 views

Life Without Tools: Monitoring Database Activity With The Power of SQL

This document provides information on monitoring database activity using SQL, including views that show users logged in, SQL statements being executed, datafile activity, rollback segment usage, highest number of concurrent users, and locks and resource usage. It discusses views like V$SESSION, V$SQLAREA, V$FILESTAT, V$ROLLSTAT, and V$LOCK and provides sample SQL queries and outputs to monitor these aspects of database activity and performance.

Uploaded by

SANJAY BALA
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
90 views

Life Without Tools: Monitoring Database Activity With The Power of SQL

This document provides information on monitoring database activity using SQL, including views that show users logged in, SQL statements being executed, datafile activity, rollback segment usage, highest number of concurrent users, and locks and resource usage. It discusses views like V$SESSION, V$SQLAREA, V$FILESTAT, V$ROLLSTAT, and V$LOCK and provides sample SQL queries and outputs to monitor these aspects of database activity and performance.

Uploaded by

SANJAY BALA
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 27

Life Without Tools:

Monitoring
Database Activity
With The Power Of
SQL
Ari Kaplan
Independent Consultant
Topic Overview
 Which users are logged on to the database?

 What SQL statement is a particular user account


executing?

 Setting up an interactive script for viewing users and SQL

 What is my datafile activity like?

 Which rollback segments are being used by which user


accounts?

 What has the largest number of concurrent users been?

 Which locks are being held?

 Which users have hogged up the most CPU usage?

 What is the archiving status of the database?


Quick Overview of Typical
Monitoring Views
Data Dictionary View What It Shows
DBA_FREE_SPACE Free chunks of tablespace
DBA_DATA_FILES Data File location and sizes
V$FILESTAT Reads/Writes to datafiles
V$SGASTAT Detailed shared pool information (free memory, etc)
V$ROLLSTAT Rollback Segment Information (shrinks, optimal size, …)
V$SESSION Information on connections
V$SYSSTAT 200 system-wide statistics
V$PARAMETER Initialization parameter settings
V$LOCK Locks within the database
DBA_SEGMENTS Segments and how many extents, next extent
Who Is Logged On?
The V$SESSION view contains
information on all active sessions:

SELECT sid, schemaname, osuser


substr(machine,1,20) Machine
FROM v$session
ORDER BY schemaname;
Who Is Logged On?
SELECT sid, schemaname, osuser, substr(machine,1,20) Machine
FROM v$session
ORDER BY schemaname;

A sample output from the above SQL follows:

SID SCHEMANAME OSUSER MACHINE


1 SYS
2 SYS
3 SYS
4 SYS
7 SYSTEM plat headq
13 SYSTEM oracle headq
6 WWW_DBA oracle uk_office
14 WWW_DBA oracle uk_office
12 PRODMAN mr_boss ny_office
What SQL Statement Is A
Particular User Account Executing?
SELECT sql_text
FROM v$sqlarea
WHERE (address, hash_value) IN
(SELECT sql_address,
sql_hash_value
FROM v$session
WHERE sid = &sid_number);
What SQL Statement Is A Particular User Account
Executing?
SELECT sql_text
FROM v$sqlarea
WHERE (address, hash_value) IN
(SELECT sql_address,
sql_hash_value
FROM v$session
WHERE sid = &sid_number);

A sample output from the above SQL follows:


Enter value for sid_number: 17
old 1: WHERE SID = &sid_number
new 1: WHERE USERNAME = 17
SQL_TEXT
Update EMP set first_name = ‘Ari’ where
first_name = ‘Arie’;
Setting Up An Interactive Script For Viewing
Users And SQL
SQL Script “SQL1.SQL” SQL Script “SQL2.SQL”
SELECT sid,
sid, schemaname,
schemaname, osuser,
osuser, SELECT
SELECT sql_text
sql_text
substr(machine,1,20) Machine FROM v$session FROM
FROM v$sqlarea
ORDER BY schemaname;
schemaname; WHERE
WHERE (address,
(address, hash_value)
hash_value) IN
IN
((SELECT sql_address,
sql_address,
What SQL is
sql_hash_value
sql_hash_value
Who is logged used? FROM
FROM v$session
in to the WHERE
WHERE sid= sid_number;
sid_number;
database?
UNIX Script “SQL_RUN”
echo “Enter the database to connect to:” echo “Enter the SID for which SQL you wish to see:”
read DATABASE read SID_NUM
echo “Enter the password for the SYSTEM user:”
sqlplus system/$PASSWD@DATABASE << EOF
stty -echo
echo “Password:\c” select sql_text from v$sqlarea
read PASSWD where (address, hash_value) in
stty echo (select sql_addresss, sql_hash_value
echo “” from v$session
sqlplus system/$PASSWD\@DATABASE << EOF
@sql1.sql WHERE sid = $SID_NUM)
EOF /
EOF
What is my datafile activity like?
SELECT file_name, phyrds, phywrts,
decode(phyrds,0,0,phyblkrd/phyrds) “Blocks/Read”
decode(phywrts,0,0,phyblkwrt/phywrts) “Blocks/Write”
FROM dba_data_files, v$filestat
WHERE dba_data_files.file_id=v$filestat.file#;

FILE_NAME PHYRDS PHYWRTS BLOCKS/READ BLOCKS/WRITE


/u01/oradata/PRODDB/system01.dbf 10243 3478 4.928 1
/u02/oradata/PRODDB/rbs01.dbf 1759 49649 1 1
/u03/oradata/PRODDB/temp01.dbf 0 0 0 0
/u04/oradata/PRODDB/tools01.dbf 0 0 0 0
/u05/oradata/PRODDB/ctxdata01.dbf 187293 15846 1.959 1
/u05/oradata/PRODDB/ctxdata02.dbf 455377 397 4 14. 258 1
/u05/oradata/PRODDB/ctxindex01.dbf 332860 616291 1.248 1
/u02/oradata/PRODDB/rbs02.dbf 91528 11593 6.130 1
Which Rollback Segments Are
Being Used By Which User
Accounts?
 “SET TRANSACTION USE ROLLBACK SEGMENT
rollback_segment_name” specifies a rollback segment to
use. This is issued first, or immediately after COMMIT or
ROLLBACK.
 Use V$ROLLSTAT and V$ROLLNAME to get general
rollback segment activity
 Link V$ROLLNAME with V$LOCK and V$SESSION to
determine which users are using which rollback segments.
 More information on the users can be collected by further
joining with the V$PROCESS view.
Which Rollback Segments Are
Being Used By Which User
Accounts?
 When a user is doing rollback activity, Oracle creates a
latch (lock of type “TX”) on an extent of a rollback
segment.
 The USN (Unique Serial Number) of V$ROLLNAME links
with V$LOCK’s ID1 column. The ID1 column contains the
object id of the object (rollback segment) being locked.
 The V$LOCK view contains a SID column which links to
the SID column of V$SESSION.
 The V$SESSION view links to the V$PROCESS view via the
PADDR column.
Which Rollback Segments Are Being
Used By Which User Accounts?
NOTE: Only relevant columns are listed with tables

V$ROLLNAME V$LOCK
NAME ID1
USN SID
TYPE
V$PROCESS LMODE
ADDR
PID V$SESSION
SPID
SID
USERNAME
TERMINAL PADDR
Which Rollback Segments Are Being
Used By Which User Accounts?
echo “Enter the password for the SYSTEM user:”
read PASSWD
sqlplus system/$PASSWD << EOF
spool temp.lst
set head off
set pagesize 0
connect system\$PASSWD@DBNAME
SELECT to_char(rownum+3)||’) ‘||rpad(r.name,17)||rpad(to_char(p.pid),11) ||
rpad(s.sid,6)|| rpad(p.spid,11) || rpad(nvl(p.username,’NO TRANSACTION’),17) ||
rpad(p.terminal,8)
FROM v\$lock l, v\$process p, v\$rollname r, v\$session s
WHERE l.sid = s.sid (+) AND p.addr = s.paddr AND
l.type(+)=‘TX’ AND l.lmode(+)=6 AND
trunc(l.idl1(+)/65536)=r.usn
UNION
SELECT ‘2) ROLLBACK SEG;ORACLE PID; SYSTEM PID; SID; TRANSACTION;
TERMINAL’
FROM dual
UNION SELECT ‘1) ‘ FROM dual
UNION SELECT ‘3) ---------------- ---------- ---------- ----------- --------’ FROM dual
ORDER BY 1;
EOF
Which Rollback Segments Are Being
Used By Which User Accounts?
Below is a sample output from the preceding SQL:

1)
2) ROLLBACK SEGMENT; ORACLE PID; SYSTEM PID; SID; TRANSACTION; TERMINAL
3)------------------------- --------------- --------------- ---- ----------------- ------------
4) R01 70 1632 14 oracle ?
5) BIG_ROLL 65 1492 21 oracle ?
What Has The Largest Number Of
Concurrent Users Been?
set pagesize 24

set linesize 100

SELECT rpad(c.name||’:’,11)||chr(9)||chr(9)||

rpad(‘ current logons=‘||(to_number(b.sessions_current)-1),20)||chr(10)||

‘cumulative logons=‘||rpad(substr(a.value,1,12),12)||chr(9)||

‘highwater mark=‘||b.sessions_highwater||chr(9)

FROM v$sysstat a, v$license b, v$database c

WHERE a.name = ‘logons cumulative’;


What Has The Largest Number Of
Concurrent Users Been?

Output from
the preceding
SQL:

PINDB: current logons=298 cumulative


logons=7967 highwater mark=391
What Has The Largest Number Of
Concurrent Users Been?
export LOGDIR=$ORACLE_HOME/udump
echo “Enter the password for the SYSTEM user:” Loop through
read PASSWD four
for SID in PRODDB TESTDB TRAINDB DEVDB databases
do
sqlplus system/$PASSWD@$SID << EOF >> $LOGDIR/temp_users.lst
set linesize 100
SELECT rpad(c.name||’:’,11)||chr(9)||chr(9)||
rpad(‘ current logons=‘||(to_number(b.sessions_current)-1),20)||chr(10)||
‘cumulative logons=‘||rpad(substr(a.value,1,12),12)||chr(9)||
‘highwater mark=‘||b.sessions_highwater||chr(9)
FROM v\$sysstat a, v\$license b, v\$database c
WHERE a.name = ‘logons cumulative’;
EOF
done
cat $LOGDIR/temp_users.lst |grep “LOG” > $LOGDIR/archive`date “+%m%d”`.log
rm $LOGDIR/temp_users.lst
What Has The Largest Number Of
Concurrent Users Been?
Output from the preceding SQL for
four databases:

PRODDB: current logons=298 cumulative logons=7967 highwater


mark=391
TESTDB: current logons=15 cumulative logons=187 highwater mark=15
TRAINDB: current logons=8 cumulative logons=613 highwater mark=25
DEVDB: current logons=23 cumulative logons=1024 highwater mark=30
Which Locks Are Being Held?
-- V$LOCK holds information on internal Oracle locks.
-- Six views show information more clearly:
DBA_LOCK: locks held and locks requested;is blocking?
DBA_LOCK_INTERNAL: locks held and locks requested
DBA_DML_LOCKS: DML locks (subset of DBA_LOCK)
DBA_DDL_LOCKS: DDL locks (subset of DBA_LOCK)
DBA_WAITERS: which sessions are holding and waiting
for locks?
DBA_BLOCKERS: which sessions are holding locks but
are not waiting on another lock themselves?
-- These are created by the
$ORACLE_HOME/rdbms/admin/catblock.sql script
-- Use $ORACLE_HOME/rdbms/admin/utllockt.sql to analyze these
views.
Which Locks Are Being Held?
SELECT * FROM DBA_LOCK;

SESSION_ID TYPE MODE_HELD MODE_REQUESTED


--------------- ------------------- --------------- -----------------------
LOCK_ID1 LOCK_ID2 LAST_CONVERT BLOCKING_OTHERS
------------ ------------ ------------------ ------------------------
2 Media Recovery Share None
212 0 113054 Not Blocking

4 Redo Thread Exclusive None


1 0 0 Not Blocking

310 Transaction Exclusive None


196612 399886 123 Not Blocking

310 DML Row-X (SX) None


438580 0 123 Not Blocking
Which Locks Are Being Held?

 The previous views can be neatly arranged with the


$ORACLE_HOME/rdbms/admin/utllockt.sql script.
 The utllockt.sql script creates two temporary tables:
LOCK_HOLDERS and DBA_LOCKS_TEMP
 DBA_LOCKS_TEMP is created to improve performance
over using the slower DBA_LOCKS view.
 Output uses the CONNECT BY and START WITH clauses to
make a hierarchical tree structure.
 The highest level in the tree is where HOLDING_SESSION
is null.
Which Locks Are Being Held?

SELECT lpad(‘ ‘,3*level-1)) || waiting_sessions


“WAITING SESSION”,
lock_type, mode_requested, mode_held,
lock_id1, lock_id2
FROM lock_holders
CONNECT BY PRIOR
waiting_session=holding_session
START WITH holding_session IS NULL;
WAITING_ LOCK_ MODE_ MODE_ LOCK_
LOCK_
SESSION TYPE REQUESTED HELD ID1 ID2
---------- ------- ------------- ------- -------- ------
133 None
319 Transaction Exclusive Exclusive 196613 406415
Which Users Have Hogged Up The
Most CPU Usage?
V$SESSION
V$SESSTAT SADDR
SADDR PROGRAM
PROGRAM
SID TYPE
TYPE
SID SQL_ADDRESS
SQL_ADDRESS
SERIAL#
SERIAL#
STATISTIC# AUDSID
AUDSID
SQL_HASH_VALUE
SQL_HASH_VALUE
MODULE
MODULE
VALUE PADDR
PADDR MODULE_HASH
MODULE_HASH
USER#
USER# ACTION
ACTION
USERNAME ACTION_HASH
ACTION_HASH
COMMAND
COMMAND CLIENT_INFO
CLIENT_INFO
OWNERID
OWNERID FIXED_TABLE_SEQUENCE
FIXED_TABLE_SEQUENCE
like ‘%CPU used by this TADDR
TADDR ROW_WAIT_OBJ#
ROW_WAIT_OBJ#
session%’
LOCKWAIT
LOCKWAIT ROW_WAIT_FILE#
ROW_WAIT_FILE#
STATUS
STATUS ROW_WAIT_BLOCK#
ROW_WAIT_BLOCK#
SERVER
SERVER ROW_WAIT_ROW#
ROW_WAIT_ROW#
V$STATNAME SCHEMA#
SCHEMA# LOGON_TIME
LOGON_TIME
SCHEMANAME
SCHEMANAME LAST_CALL_ET
LAST_CALL_ET
NAME OSUSER
OSUSER PDML_ENABLED
PDML_ENABLED
STATISTIC# PROCESS
PROCESS
MACHINE
MACHINE
FAILOVER_TYPE
FAILOVER_TYPE
FAILOVER_METHOD
FAILOVER_METHOD
CLASS TERMINAL
TERMINAL FAILED_OVER
FAILED_OVER
Which Users Have Hogged Up The
Most CPU Usage?

SELECT substr(sn.name,1,30) parameter,


ss.username ||’ (’|| se_sid ||’) ‘ user_process, se.value
FROM v$session ss, v$sesstat se, v$statname sn
WHERE se. statistic# = sn.statistic# AND
sn.name LIKE ‘%CPU used by this session%’ AND
se.sid=ss.sid
ORDER BY sn.name, se_value DESC;
PARAMETER USER_PROCESS VALUE
-------------------------------- ------------------------ ---------------
CPU used by this session OLAP_MAN (390) 15230
CPU used by this session PIN (35) 4324
CPU used by this session OPERATOR (17) 157
CPU used by this session SYS (11) 0
What Is The Archiving Status Of The
Database?
Why is archiving important?
What happens when the archive volume fills up?
How do you find the archiving status?
How do you turn on archiving?

SVRMGRL> ARCHIVE LOG LIST;


Database log mode No Archive Mode
Automatic archival Disabled
Archive Destination ?/dbs/arch
Oldest online log sequence 4525
Current log sequence 4528
What Is The Archiving Status Of The
Database?
SELECT ‘NAME=‘|| a.name, ‘LOG_MODE=‘|| a.log_mode,
‘LOG_ARCHIVE_START=‘|| b.value,
‘LOG_ARCHIVE_DEST=‘|| c.value,
‘LOG_ARCHIVE_FORMAT=‘|| d.value
FROM v$database a, v$parameter b, v$parameter c,
v$parameter d
WHERE b.name=‘log_archive_start’ AND
c.name=‘log_archive_dest’ AND
d.name=‘log_archive_format’;
NAME=PINDB
LOG_MODE=NOARCHIVELOG
LOG_ARCHIVE_START=TRUE
LOG_ARCHIVE_DEST=/u01/oracle/product/8.0.3/dbs/arch
LOG_ARCHIVE_FOMAT=_%s_%t.log
Where to Now?
 There are many discussion Newsgroups on the internet for you to give questions

and get answers:

comp.databases.oracle.server

comp.databases.oracle.tools

comp.databases.oracle.misc

 These can be accessed through a newsgroup program or “ www.deja.com”

 Ari’s free Oracle Tips web page at:

There are over 370 tips and answers to questions that have been posed to me over the
years. This paper will be downloadable from the web page as well.

 Other good sites with links: www.orafaq.org, www.orafans.com, www.ioug.org,


www.orasearch.com, www.revealnet.com

You might also like