--------------------------------------------------------------------------------
--
-- Author: Tanel Poder
-- Copyright: (c) http://www.tanelpoder.com
--
-- Notes: This software is provided AS IS and doesn't guarantee anything
-- Proofread before you execute it!
--
--------------------------------------------------------------------------------
================================================================================
SESSPACK v0.05 readme
================================================================================
About:
Sesspack can be best described as session level statspack for Oracle.
It collects less data than statspack, "only" the session level wait events
and v$sesstat info and stores it in its repository.
However Sesspack allows you to select the sampled sessions very flexibly,
you can sample all sessions in an instance or only few, based on various
conditions like SID, username, osuser, program, client machine, currently
effective module and action etc.
Sesspack doesn't add extra instrumentation overhead to the database, it
just queries v$session_event, v$sesstat and few other views when executed.
Note that with large number of sessions (1000+) you may want to sample
sessions selectively to save disk space and reduce snapshot CPU usage
For further information, see http://www.tanelpoder.com
Installation:
1) Using SQLPLUS, log on as user who can *grant* access on V$ views (SYS for example)
2) Create a user if want to have sesspack object in separate schema and grant connect to it
3) run install_sesspack.sql <username> <password> <connect_string>
e.g. @install_sesspack sesspack mypassword prod01
4) check sesspack_install.log
Usage example:
Note that the reports require fairly wide linesize (120+)
1) exec sesspack.snap_orauser('<USERNAME>')
2) do some work
3) exec sesspack.snap_orauser('<USERNAME>')
4) @list
5) @sr sid,program 1 2
This will take snapshot 1 and 2 of user <USERNAME>
Reference:
Taking snapshots:
sesspack.snap_me - snaps current session stats
sesspack.snap_sid - snaps given SIDs stats
sesspack.snap_orauser('<orauser>') - snaps all given ORACLE user's sessions's stats
sesspack.snap_osuser('<osuser>') - snaps all given OS user's sessions's stats
sesspack.snap_program('<program>') - snaps all given programs session stats
sesspack.snap_machine('<machine>') - snaps all given machines session stats
sesspack.snap_spid('spid') - snaps all given SPID session stats
sesspack.snap_cpid('cpid') - snaps all given client PID session stats
sesspack.snap_all - snaps all session stats
sesspack.snap_bg - snaps background processes sessions stats
sesspack.snap_fg - snaps foreground processes sessions stats
sesspack.snap_sidlist_internal('select sid from v$sesstat where <your custom conditions>')
- snaps all SIDs returned by custom SQL
Reporting performance data:
list.sql shows you snapshots with brief descriptions
sr.sql <grouping_col> <x> <y>
shows you the session event deltas between selected snapshots, grouped by a column
Columns can be:
1
SID
AUDSID
SERIAL#
USERNAME
PROGRAM
TERMINAL
MACHINE
OSUSER
PROCESS
To get a session-level resource usage breakdown, use:
@sr sid <start> <end>
To get resource usage summed and rolled up by client program nama, use:
@sr program <start> <end>
To get resource usage on sid level but you also want to see other data columns in output,
you can combine the columns:
@sr program,module <start> <end>
To sum up all measured resource consumption in the snap, use dummy column 1:
@sr 1 <start> <end>
Purging old data:
1) exec sesspack.purge_data; -- purges all data older than a week
or
exec sesspack.purge_data(<days_to_keep);
2) commit;
Customization:
For disk space reasons ony the sesspack.snap_me procedure gathers all v$sesstat statistics.
Other procedures gather session statistics based on
Roadmap/Notes/bugs/issues:
v0.05
========
fixes in gathering snaps & sr report
Schema - large tables compressed IOTs
performance report allows grouping by any field
purge capability
v0.04
========
customizable template-based session stats sampling
more snap procedures
v0.03b
========
Using V$SESSION_TIME_MODEL for getting if 10g+
v0.03
========
Multi-session snapshots should work ok now
I realized that standard-snapshots can't include all v$sesstat contents in snapshot by default - too much data generated
This is ok though, as we usually need only CPU time from there anyway.
V0.02
========
Lots.
Test first with only single Oracle user session - with multiple simultaneous logged on sessions there's some cartesian join somewhere