diff options
Diffstat (limited to 'src/pmdas/oracle/pmdaoracle.pl')
-rw-r--r-- | src/pmdas/oracle/pmdaoracle.pl | 2364 |
1 files changed, 2364 insertions, 0 deletions
diff --git a/src/pmdas/oracle/pmdaoracle.pl b/src/pmdas/oracle/pmdaoracle.pl new file mode 100644 index 0000000..b45be2f --- /dev/null +++ b/src/pmdas/oracle/pmdaoracle.pl @@ -0,0 +1,2364 @@ +# +# Copyright (c) 2012 Red Hat. +# Copyright (c) 2009,2012 Aconex. All Rights Reserved. +# Copyright (c) 1998 Silicon Graphics, Inc. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# + +use strict; +use warnings; +use PCP::PMDA; +use DBI; + +my $username = 'SYSTEM'; +my $password = 'manager'; +my @sids = ( 'master' ); + +# Configuration files for overriding the above settings +for my $file ( '/etc/pcpdbi.conf', # system defaults (lowest priority) + pmda_config('PCP_PMDAS_DIR') . '/oracle/oracle.conf', + pmda_config('PCP_VAR_DIR') . '/config/oracle/oracle.conf', + './oracle.conf' ) { # current directory (high priority) + eval `cat $file` unless ! -f $file; +} + +use vars qw( $pmda %sid_instances ); +use vars qw( %latch_instances %file_instances %rollback_instances ); +use vars qw( %reqdist_instances %rowcache_instances %session_instances ); +use vars qw( %object_cache_instances %system_event_instances ); +use vars qw( %librarycache_instances %waitstat_instances ); + +my $latch_indom = 0; +my $file_indom = 1; +my $rollback_indom = 2; +my $reqdist_indom = 3; +my $rowcache_indom = 4; +my $session_indom = 5; +my $object_cache_indom = 6; +my $system_event_indom = 7; +my $librarycache_indom = 8; +my $waitstat_indom = 9; +my $sid_indom = 10; + +my @novalues = (); +my %object_cache_instances = ( + 'INDEX' => \@novalues, 'TABLE' => \@novalues, + 'CLUSTER' => \@novalues, 'VIEW' => \@novalues, + 'SET' => \@novalues, 'SYNONYM' => \@novalues, + 'SEQUENCE' => \@novalues, 'PROCEDURE' => \@novalues, + 'FUNCTION' => \@novalues, 'PACKAGE' => \@novalues, + 'PACKAGE_BODY' => \@novalues, 'TRIGGER' => \@novalues, + 'CLASS' => \@novalues, 'OBJECT' => \@novalues, + 'USER' => \@novalues, 'DBLINK' => \@novalues, + 'NON-EXISTENT' => \@novalues, 'NOT_LOADED' => \@novalues, + 'OTHER' => \@novalues ); + +my %sids_by_name; +my %tables_by_name = ( + 'sysstat' => { + insts_handle => undef, fetch_handle => undef, values => {}, + # insts => SID indom is a static array + fetch => 'SELECT statistic#, value FROM v$sysstat' }, + 'license' => { + insts_handle => undef, fetch_handle => undef, values => {}, }, + 'latch' => { + insts_handle => undef, fetch_handle => undef, values => {}, + insts => 'SELECT latch#, name FROM v$latch', + fetch => 'SELECT latch#, name FROM v$latch' }, + 'filestat' => { + insts_handle => undef, fetch_handle => undef, values => {}, + insts => 'SELECT file#, name FROM v$datafile', + fetch => 'SELECT file#, phyrds, phywrts, phyblkrd,' . + ' phyblkwrt, readtim, writetim' . + ' FROM v$filestat' }, + 'rollstat' => { + insts_handle => undef, fetch_handle => undef, values => {}, + insts => 'SELECT usn, name FROM v$rollname', + fetch => 'SELECT usn, rssize, writes, xacts, gets, waits, hwmsize,' . + ' shrinks, wraps, extends, aveshrink, aveactive' . + ' FROM v$rollstat' }, + 'reqdist' => { + insts_handle => undef, fetch_handle => undef, values => {}, + insts => 'SELECT bucket FROM v$reqdist', + fetch => 'SELECT bucket, count FROM v$reqdist' }, + 'backup' => { + insts_handle => undef, fetch_handle => undef, values => {}, + insts => 'SELECT file# FROM v$backup', + fetch => 'SELECT file#, status FROM v$backup' }, + 'rowcache' => { + insts_handle => undef, fetch_handle => undef, values => {}, + insts => 'SELECT cache#, subordinate#, parameter FROM v$rowcache', + fetch => 'SELECT cache#, subordinate#, count, gets, getmisses,' . + ' scans, scanmisses' . + ' FROM v$rowcache' }, + 'sesstat' => { + insts_handle => undef, fetch_handle => undef, values => {}, + insts => 'SELECT sid FROM v$session', + fetch => 'SELECT sid, statistic#, value FROM v$sesstat' }, + 'object_cache' => { + insts_handle => undef, fetch_handle => undef, values => {}, + # insts => object_cache indom is a static array + fetch => 'SELECT type, sharable_mem, loads, locks, pins' . + ' FROM v$db_object_cache' }, + 'system_event' => { + insts_handle => undef, fetch_handle => undef, values => {}, + insts => 'SELECT event#,name FROM v$event_name', + fetch => 'SELECT event_id, event, total_waits, total_timeouts,' . + ' time_waited, average_wait' . + ' FROM v$system_event' }, + 'version' => { + insts_handle => undef, fetch_handle => undef, values => {}, + fetch => 'SELECT DISTINCT banner INTO :pc_version' . + ' FROM v$version WHERE banner LIKE \'Oracle%\'' }, + 'librarycache' => { + insts_handle => undef, fetch_handle => undef, values => {}, + insts => 'SELECT namespace FROM v$librarycache', + fetch => 'SELECT namespace, gets, gethits, gethitratio, pins,' . + ' pinhits, pinhitratio, reloads, invalidations' . + ' FROM v$librarycache' }, +); + +my %tables_by_cluster = ( + '0' => { + name => 'sysstat', + setup => \&setup_sysstat, + indom => $sid_indom, + values => \&sysstat_values }, + '1' => { + name => 'license', + setup => \&setup_license, + indom => $sid_indom, + values => \&license_values }, + '2' => { + name => 'latch', + setup => \&setup_latch, + indom => $latch_indom, + values => \&latch_values }, + '3' => { + name => 'filestat', + setup => \&setup_filestat, + indom => $file_indom, + values => \&filestat_values }, + '4' => { + name => 'rollstat', + setup => \&setup_rollstat, + indom => $rollback_indom, + values => \&rollstat_values }, + '5' => { + name => 'reqdist', + setup => \&setup_reqdist, + indom => $reqdist_indom, + values => \&reqdist_values }, + '6' => { + name => 'backup', + setup => \&setup_backup, + indom => 'backup', + values => \&backup_values }, + '7' => { + name => 'rowcache', + setup => \&setup_rowcache, + indom => $rowcache_indom, + values => \&rowcache_values }, +# '8' => { +# name => 'sesstat', +# setup => \&setup_sesstat, +# indom => $session_indom, +# values => \&sesstat_values }, + '9' => { + name => 'object_cache', + setup => \&setup_object_cache, + indom => $object_cache_indom, + values => \&object_cache_values }, + '10' => { + name => 'system_event', + setup => \&setup_system_event, + indom => $system_event_indom, + insts => \&system_event_insts, + values => \&system_event_values }, + '11' => { + name => 'version', + setup => \&setup_version, + indom => $sid_indom, + values => \&version_values }, + '12' => { + name => 'librarycache', + setup => \&setup_librarycache, + indom => $librarycache_indom, + values => \&librarycache_values }, + '13' => { + name => 'waitstat', + setup => \&setup_waitstat, + indom => $waitstat_indom, + values => \&waitstat_values }, +); + +sub oracle_connection_setup +{ + foreach my $sid (@sids) { + my $db = $sids_by_name{$sid}{db_handle}; + $db = oracle_sid_connection_setup($sid, $db); + $sids_by_name{$sid}{db_handle} = $db; + } +} + +sub oracle_sid_connection_setup +{ + my $sid = shift; + my $dbh = shift; + + if (!defined($dbh)) { + $dbh = DBI->connect("dbi:Oracle:$sid", $username, $password); + if (defined($dbh)) { + $pmda->log("Oracle connection established\n"); + + foreach my $key (keys %tables_by_name) { + my ( $query, $insts_query, $fetch_query ); + + $insts_query = $tables_by_name{$key}{insts}; + $fetch_query = $tables_by_name{$key}{fetch}; + + if (defined($insts_query)) { + $query = $dbh->prepare($fetch_query); + $tables_by_name{$key}{insts_handle} = $query + unless (!defined($query)); + } + if (defined($fetch_query)) { + $query = $dbh->prepare($fetch_query); + $tables_by_name{$key}{fetch_handle} = $query + unless (!defined($query)); + } + } + } + } + return $dbh; +} + +sub oracle_refresh +{ + my ($cluster) = @_; + + foreach my $sid (@sids) { + my $db = $sids_by_name{$sid}{db_handle}; + my $name = $tables_by_cluster{"$cluster"}{name}; + my $refresh = $tables_by_cluster{"$cluster"}{values}; + &$refresh($db, $sid, $tables_by_name{$name}{fetch_handle}); + } +} + +sub oracle_fetch_callback +{ + my ( $cluster, $item, $inst) = @_; + my $metric_name = pmda_pmid_name($cluster, $item); + my ( $indom, $table, $value, $valueref, @columns ); + + return (PM_ERR_PMID, 0) unless defined($metric_name); + $table = $metric_name; + $table =~ s/^oracle\.//; + $table =~ s/\.*$//; + + # $pmda->log("fetch_cb $metric_name $cluster:$item ($inst) - $table\n"); + $indom = $tables_by_cluster{"$cluster"}{indom}; + $valueref = pmda_inst_lookup($indom, $inst); + return (PM_ERR_INST, 0) unless defined($valueref); + @columns = @$valueref; + $value = $columns[$item]; + return (PM_ERR_APPVERSION, 0) unless defined($value); + + return ($value, 1); +} + +# +# Refresh routines - one per table (cluster) - format database query +# result set for later use by the generic fetch callback routine. +# +sub refresh_results +{ + my ( $dbh, $handle ) = @_; + + return undef + unless (defined($dbh) && defined($handle) && defined($handle->execute())); + return $handle->fetchall_arrayref(); +} + +sub system_event_values +{ + my ( $dbh, $sid, $handle ) = @_; + my $result = refresh_results($dbh, $handle); + + %system_event_instances = (); # refresh indom too + if (defined($result)) { + for my $i (0 .. $#{$result}) { # for each row (instance) returned + my $eventid = $result->[$i][0]; + my $eventname = $result->[$i][1]; + my $instname = "$sid/$eventid $eventname"; + my @values = @$result[$i]; + $system_event_instances{$instname} = \@values; + } + } + $pmda->replace_indom($system_event_indom, \%system_event_instances); +} + +sub system_event_insts +{ + my ( $dbh, $sid, $handle ) = @_; + my $result = refresh_results($dbh, $handle); + + %system_event_instances = (); + if (defined($result)) { + for my $i (0 .. $#{$result}) { # for each row (instance) returned + my $eventid = $result->[$i][0]; + my $eventname = $result->[$i][1]; + my $instname = "$sid/$eventid $eventname"; + $system_event_instances{$instname} = \@novalues; + } + } + $pmda->replace_indom($system_event_indom, \%system_event_instances); +} + +sub license_values { } +sub license_insts { } + + + +sub oracle_indoms_setup +{ + $pmda->add_indom($latch_indom, \%latch_instances, + 'Instance domain "latch" from Oracle PMDA', +'The latches used by the RDBMS. The latch instance domain does not +change. Latches are simple, low-level serialization mechanisms which +protect access to structures in the system global area (SGA).'); + + $pmda->add_indom($file_indom, \%file_instances, + 'Instance domain "file" from Oracle PMDA', +'The collection of data files that make up the database. This instance +domain may change during database operation as files are added to or +removed.'); + + $pmda->add_indom($rollback_indom, \%rollback_instances, + 'Instance domain "rollback" from Oracle PMDA', +'The collection of rollback segments for the database. This instance +domain may change during database operation as segments are added to or +removed.'); + + $pmda->add_indom($reqdist_indom, \%reqdist_instances, + 'RDBMS Request Distribution from Oracle PMDA', +'Each instance is one of the buckets in the histogram of RDBMS request +service times. The instances are named according to the longest +service time that will be inserted into its bucket. The instance +domain does not change.'); + + $pmda->add_indom($rowcache_indom, \%rowcache_instances, + 'Instance domain "rowcache" from Oracle PMDA', +'Each instance is a type of data dictionary cache. The names are +derived from the database parameters that define the number of entries +in the particular cache. In some cases subordinate caches exist. +Names for such sub-caches are composed of the subordinate cache +parameter name prefixed with parent cache name with a "." as a +separator. Each cache has an identifying number which appears in +parentheses after the textual portion of the cache name to resolve +naming ambiguities. The rowcache instance domain does not change.'); + + $pmda->add_indom($session_indom, \%session_instances, + 'Instance domain "session" from Oracle PMDA', +'Each instance is a session to the Oracle database. Sessions may come +and go rapidly. The instance names correspond to the numeric Oracle +session identifiers.'); + + $pmda->add_indom($object_cache_indom, \%object_cache_instances, + 'Instance domain "cache objects" from Oracle PMDA', +'The various types of objects in the database object cache. This +includes such objects as indices, tables, procedures, packages, users +and dblink. Any object types not recognized by the Oracle PMDA are +grouped together into a special instance named "other". The instance +domain may change as various types of objects are bought into and +flushed out of the database object cache.'); + + $pmda->add_indom($system_event_indom, \%system_event_instances, + 'Instance domain "system events" from Oracle PMDA', +'The various system events which the database may wait on. This +includes events such as interprocess communication, control file I/O, +log file I/O, timers.'); + + $pmda->add_indom($librarycache_indom, \%librarycache_instances, + 'Instance domain "librarycache" from Oracle PMDA', ''); + $pmda->add_indom($waitstat_indom, \%waitstat_instances, + 'Instance domain "wait statistics" from Oracle PMDA', ''); + + $pmda->add_indom($sid_indom, \%sid_instances, + 'Instance domain "SID" from Oracle PMDA', +'The system identifiers used by the RDBMS and monitored by this PMDA.'); +} + +sub oracle_metrics_setup +{ + foreach my $cluster (sort (keys %tables_by_cluster)) { + my $setup = $tables_by_cluster{"$cluster"}{setup}; + my $indom = $tables_by_cluster{"$cluster"}{indom}; + &$setup($cluster, $indom, $tables_by_cluster{"$cluster"}{params}); + } +} + +# +# Setup routines - one per cluster, add metrics to PMDA +# + +sub setup_waitstat # block contention stats from v$waitstat +{ + $pmda->add_metric(pmda_pmid(13,0), PM_TYPE_U32, $waitstat_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.waitstat.count', + 'Number of waits for each block class', +'The number of waits for each class of block. This value is obtained +from the COUNT column of the V$WAITSTAT view.'); + + $pmda->add_metric(pmda_pmid(13,1), PM_TYPE_U32, $waitstat_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.waitstat.time', + 'Sum of all wait times for each block class', +'The sum of all wait times for each block class. This value is obtained +from the TIME column of the V$WAITSTAT view.'); +} + +sub setup_version # version data from the v$version view +{ + $pmda->add_metric(pmda_pmid(11,0), PM_TYPE_STRING, $sid_indom, + PM_SEM_DISCRETE, pmda_units(0,0,0,0,0,0), + 'oracle.version', + 'Oracle component name and version number', ''); +} + +sub setup_system_event # statistics from v$system_event +{ + $pmda->add_metric(pmda_pmid(10,0), PM_TYPE_U32, $system_event_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.event.waits', + 'Number of waits for various system events', +'The total number of waits for various system events. This value is +obtained from the TOTAL_WAITS column of the V$SYSTEM_EVENT view.'); + + $pmda->add_metric(pmda_pmid(10,1), PM_TYPE_U32, $system_event_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.event.timeouts', + 'Number of timeouts for various system events', +'The total number of timeouts for various system events. This value is +obtained from the TOTAL_TIMEOUTS column of the V$SYSTEM_EVENT view.'); + + $pmda->add_metric(pmda_pmid(10,2), PM_TYPE_U32, $system_event_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.event.time_waited', + 'Total time waited for various system events', +'The total amount of time waited for various system events. This value +is obtained from the TIME_WAITED column of the V$SYSTEM_EVENT view and +converted to units of milliseconds.'); + + $pmda->add_metric(pmda_pmid(10,3), PM_TYPE_FLOAT, $system_event_indom, + PM_SEM_INSTANT, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.event.average_wait', + 'Average time waited for various system events', +'The average time waited for various system events. This value is +obtained from the AVERAGE_WAIT column of the V$SYSTEM_EVENT view +and converted to units of milliseconds.'); +} + +sub setup_sysstat ## statistics from v$sysstat +{ + $pmda->add_metric(pmda_pmid(0,0), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.logons', 'Total cumulative logons', +'The "logons cumulative" statistic from the V$SYSSTAT view. This is the +total number of logons since the instance started.'); + + $pmda->add_metric(pmda_pmid(0,1), PM_TYPE_U32, $sid_indom, + PM_SEM_INSTANT, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.curlogons', 'Total current logons', +'The "logons current" statistic from the V$SYSSTAT view. This is the +total number of current logons.'); + + $pmda->add_metric(pmda_pmid(0,2), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.opencursors', 'Total cumulative opened cursors', +'The "opened cursors cumulative" statistic from the V$SYSSTAT view. +This is the total number of cursors opened since the instance started.'); + + $pmda->add_metric(pmda_pmid(0,3), PM_TYPE_U32, $sid_indom, + PM_SEM_INSTANT, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.current_cursors', 'Total current open cursors', +'The "opened cursors current" statistic from the V$SYSSTAT view. This +is the total number of current open cursors.'); + + $pmda->add_metric(pmda_pmid(0,4), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.user_commits', 'Total user commits', +'The "user commits" statistic from the V$SYSSTAT view. When a user +commits a transaction, the redo generated that reflects the changes +made to database blocks must be written to disk. Commits often +represent the closest thing to a user transaction rate.'); + + $pmda->add_metric(pmda_pmid(0,5), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.user_rollbacks', 'Total user rollbacks', +'The "user rollbacks" statistic from the V$SYSSTAT view. This statistic +stores the number of times users manually issue the ROLLBACK statement +or an error occurs during users\' transactions.'); + + $pmda->add_metric(pmda_pmid(0,6), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.user_calls', 'Total user calls', +'The "user calls" statistic from the V$SYSSTAT view. Oracle allocates +resources (Call State Objects) to keep track of relevant user call data +structures every time you log in, parse or execute. When determining +activity, the ratio of user calls to RPI calls, gives you an indication +of how much internal work gets generated as a result of the type of +requests the user is sending to Oracle.'); + + $pmda->add_metric(pmda_pmid(0,7), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.recursecalls', 'Total recursive calls', +'The "recursive calls" statistic from the V$SYSSTAT view. Oracle +maintains tables used for internal processing. When Oracle needs to +make a change to these tables, it internally generates an SQL +statement. These internal SQL statements generate recursive calls.'); + + $pmda->add_metric(pmda_pmid(0,8), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.sysstat.recursecpu', 'Total recursive cpu usage', +'The "recursive cpu usage" statistic from the V$SYSSTAT view. The total +CPU time used by non-user calls (recursive calls). Subtract this value +from oracle.sysstat.sessioncpu to determine how much CPU time was used +by the user calls. Units are milliseconds of CPU time.'); + + $pmda->add_metric(pmda_pmid(0,9), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.session.lreads', 'Total session logical reads', +'The "session logical reads" statistic from the V$SYSSTAT view. This +statistic is basically the sum of oracle.systat.dbbgets and +oracle.sysstat.consgets. Refer to the help text for these +individual metrics for more information.'); + + $pmda->add_metric(pmda_pmid(0,10), PM_TYPE_U32, $sid_indom, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_BYTE,0,0), + 'oracle.sysstat.session.procspace', +'Total session stored procedure space', +'The "session stored procedure space" statistic from the V$SYSSTAT +view. This metric shows the amount of memory that this session is +using for stored procedures.'); + + $pmda->add_metric(pmda_pmid(0,11), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.sysstat.cpucall', 'CPU used when call started', +'The "CPU used when call started" statistic from the V$SYSSTAT view. +This is the session CPU when current call started. Units are +milliseconds of CPU time.'); + + $pmda->add_metric(pmda_pmid(0,12), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.sysstat.session.cpu', 'Total CPU used by this session', +'The "CPU used by this session" statistic from the V$SYSSTAT view. This +is the amount of CPU time used by a session between when a user call +started and ended. Units for the exported metric are milliseconds, but +Oracle uses an internal resolution of tens of milliseconds and some +user calls can complete within 10 milliseconds, resulting in the start +and end user-call times being the same. In this case, zero +milliseconds are added to the statistic.'); + + $pmda->add_metric(pmda_pmid(0,13), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_SEC,0), + 'oracle.sysstat.session.contime', 'Session connect time', +'The "session connect time" statistic from the V$SYSSTAT view. +Wall clock time of when session logon occured. Units are seconds +since the epoch.'); + + $pmda->add_metric(pmda_pmid(0,14), PM_TYPE_U32, $sid_indom, + PM_SEM_INSTANT, pmda_units(0,1,0,0,PM_TIME_SEC,0), + 'oracle.sysstat.procidle', 'Total process last non-idle time', +'The "process last non-idle time" statistic from the V$SYSSTAT view. +This is the last time this process was not idle. Units are seconds +since the epoch.'); + + $pmda->add_metric(pmda_pmid(0,15), PM_TYPE_U32, $sid_indom, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_BYTE,0,0), + 'oracle.sysstat.session.mem', 'Session UGA memory', +'The "session UGA memory" statistic from the V$SYSSTAT view. This +shows the current session UGA (User Global Area) memory size.'); + + $pmda->add_metric(pmda_pmid(0,16), PM_TYPE_U32, $sid_indom, + PM_SEM_DISCRETE, pmda_units(1,0,0,PM_SPACE_BYTE,0,0), + 'oracle.sysstat.session.maxmem', 'Maximum session UGA memory', +'The "session UGA memory max" statistic from the V$SYSSTAT view. This +shows the maximum session UGA (User Global Area) memory size.'); + + $pmda->add_metric(pmda_pmid(0,17), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.msgxmit', 'Total messages sent', +'The "messages sent" statistic from the V$SYSSTAT view. This is the +total number of messages sent between Oracle processes. A message is +sent when one Oracle process wants to post another to perform some +action.'); + + $pmda->add_metric(pmda_pmid(0,18), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.msgrecv', 'Total messages received', +'The "messages received" statistic from the V$SYSSTAT view. This is the +total number of messages received. A message is sent when one Oracle +process wants to post another to perform some action.'); + + $pmda->add_metric(pmda_pmid(0,19), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.bgtimeouts', 'Total background timeouts', +'The "background timeouts" statistic from the V$SYSSTAT view. This is +a count of the times where a background process has set an alarm for +itself and the alarm has timed out rather than the background process +being posted by another process to do some work.'); + + $pmda->add_metric(pmda_pmid(0,20), PM_TYPE_U32, $sid_indom, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_BYTE,0,0), + 'oracle.sysstat.sepgamem', 'Session PGA memory', +'The "session PGA memory" statistic from the V$SYSSTAT view. This +shows the current session PGA (Process Global Area) memory size.'); + + $pmda->add_metric(pmda_pmid(0,21), PM_TYPE_U32, $sid_indom, + PM_SEM_DISCRETE, pmda_units(1,0,0,PM_SPACE_BYTE,0,0), + 'oracle.sysstat.session.maxpgamem', 'Maximum session PGA memory', +'The "session PGA memory max" statistic from the V$SYSSTAT view. This +shows the maximum session PGA (Process Global Area) memory size.'); + + $pmda->add_metric(pmda_pmid(0,22), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.enqueue.timeouts', 'Total enqueue timeouts', +'The "enqueue timeouts" statistic from the V$SYSSTAT view. This is +the total number of enqueue operations (get and convert) that timed +out before they could complete.'); + + $pmda->add_metric(pmda_pmid(0,23), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.enqueue.waits', 'Total enqueue waits', +'The "enqueue waits" statistic from the V$SYSSTAT view. This is the +total number of waits that happened during an enqueue convert or get +because the enqueue could not be immediately granted.'); + + $pmda->add_metric(pmda_pmid(0,24), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.enqueue.deadlocks', 'Total enqueue deadlocks', +'The "enqueue deadlocks" statistic from the V$SYSSTAT view. This is +the total number of enqueue deadlocks between different sessions.'); + + $pmda->add_metric(pmda_pmid(0,25), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.enqueue.requests', 'Total enqueue requests', +'The "enqueue requests" statistic from the V$SYSSTAT view. This is +the total number of enqueue gets.'); + + $pmda->add_metric(pmda_pmid(0,26), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.enqueue.conversions', 'Total enqueue conversions', +'The "enqueue conversions" statistic from the V$SYSSTAT view. This is +the total number of enqueue converts.'); + + $pmda->add_metric(pmda_pmid(0,27), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.enqueue.releases', 'Total enqueue releases', +'The "enqueue releases" statistic from the V$SYSSTAT view. This is +the total number of enqueue releases.'); + + $pmda->add_metric(pmda_pmid(0,28), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.globlock.gets', 'Total global lock gets (sync)', +'The "global lock gets (sync)" statistic from the V$SYSSTAT view. This +is the total number of synchronous global lock gets.'); + + $pmda->add_metric(pmda_pmid(0,29), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.globlock.agets', 'Total global lock gets (async)', +'The "global lock gets (async)" statistic from the V$SYSSTAT view. +This is the total number of asynchronous global lock gets.'); + + $pmda->add_metric(pmda_pmid(0,30), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.sysstat.globlock.gettime', 'Total global lock get time', +'The "global lock get time" statistic from the V$SYSSTAT view. This is +the total elapsed time of all synchronous global lock gets.'); + + $pmda->add_metric(pmda_pmid(0,31), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.globlock.cvts', 'Total global lock converts (sync)', +'The "global lock converts (sync)" statistic from the V$SYSSTAT view. +This is the total number of synchronous global lock converts.'); + + $pmda->add_metric(pmda_pmid(0,32), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.globlock.acvts', 'Total global lock converts (async)', +'The "global lock converts (async)" statistic from the V$SYSSTAT view. +This is the total number of asynchronous global lock converts.'); + + $pmda->add_metric(pmda_pmid(0,33), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.sysstat.globlock.cvttime', 'Total global lock convert time', +'The "global lock convert time" statistic from the V$SYSSTAT view. +This is the total elapsed time of all synchronous global lock converts.'); + + $pmda->add_metric(pmda_pmid(0,34), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.globlock.rels', 'Total global lock releases (sync)', +'The "global lock releases (sync)" statistic from the V$SYSSTAT view. +This is the total number of synchronous global lock releases.'); + + $pmda->add_metric(pmda_pmid(0,35), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.globlock.arels', 'Total global lock releases (async)', +'The "global lock releases (async)" statistic from the V$SYSSTAT view. +This is the total number of asynchronous global lock releases.'); + + $pmda->add_metric(pmda_pmid(0,36), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.sysstat.globlock.reltime', 'Total global lock release time', +'The "global lock release time" statistic from the V$SYSSTAT view. +This is the elapsed time of all synchronous global lock releases.'); + + $pmda->add_metric(pmda_pmid(0,37), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.dbbgets', 'Total db block gets', +'The "db block gets" statistic from the V$SYSSTAT view. This tracks +the number of blocks obtained in CURRENT mode.'); + + $pmda->add_metric(pmda_pmid(0,38), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.consgets', 'Total consistent gets', +'The "consistent gets" statistic from the V$SYSSTAT view. This is the +number of times a consistent read was requested for a block. Also see +the help text for oracle.sysstat.conschanges.'); + + $pmda->add_metric(pmda_pmid(0,39), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.preads', 'Total physical reads', +'The "physical reads" statistic from the V$SYSSTAT view. This is the +number of I/O requests to the operating system to retrieve a database +block from the disk subsystem. This is a buffer cache miss. +Logical reads = oracle.sysstat.consgets + oracle.sysstat.dbbgets. +Logical reads and physical reads are used to calculate the buffer hit +ratio.'); + + $pmda->add_metric(pmda_pmid(0,40), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.pwrites', 'Total physical writes', +'The "physical writes" statistic from the V$SYSSTAT view. This is the +number of I/O requests to the operating system to write a database +block to the disk subsystem. The bulk of the writes are performed +either by DBWR or LGWR.'); + + $pmda->add_metric(pmda_pmid(0,41), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.wreqs', 'Total write requests', +'The "write requests" statistic from the V$SYSSTAT view. This is the +number of times DBWR has flushed sets of dirty buffers to disk.'); + + $pmda->add_metric(pmda_pmid(0,42), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,0,0,0,0), + 'oracle.sysstat.dirtyqlen', 'Total summed dirty queue length', +'The "summed dirty queue length" statistic from the V$SYSSTAT view. +This is the sum of the dirty LRU queue length after every write +request. +Divide by the write requests (oracle.sysstat.wreqs) to get the +average queue length after write completion. For more information see +the help text associated with oracle.sysstat.wreqs.'); + + $pmda->add_metric(pmda_pmid(0,43), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.dbbchanges', 'Total db block changes', +'The "db block changes" statistic from the V$SYSSTAT view. This metric +is closely related to "consistent changes" +(oracle.sysstat.conschanges) and counts the total number of +changes made to all blocks in the SGA that were part of an update or +delete operation. These are the changes that are generating redo log +entries and hence will be permanent changes to the database if the +transaction is committed. +This metric is a rough indication of total database work and indicates +(possibly on a per-transaction level) the rate at which buffers are +being dirtied.'); + + $pmda->add_metric(pmda_pmid(0,44), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.sysstat.chwrtime', 'Total change write time', +'The "change write time" statistic from the V$SYSSTAT view. This is +the elapsed time for redo write for changes made to CURRENT blocks.'); + + $pmda->add_metric(pmda_pmid(0,45), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.conschanges', 'Total consistent changes', +'The "consistent changes" statistic from the V$SYSSTAT view. This is +the number of times a database block has applied rollback entries to +perform a consistent read on the block.'); + + $pmda->add_metric(pmda_pmid(0,46), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.redo.syncwr', 'Total redo sync writes', +'The "redo sync writes" statistic from the V$SYSSTAT view. Usually, +redo that is generated and copied into the log buffer need not be +flushed out to disk immediately. The log buffer is a circular buffer +that LGWR periodically flushes. This metric is incremented when +changes being applied must be written out to disk due to commit.'); + + $pmda->add_metric(pmda_pmid(0,47), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.sysstat.redo.synctime', 'Total redo sync time', +'The "redo sync time" statistic from the V$SYSSTAT view. This is the +elapsed time of all redo sync writes (oracle.sysstat.redo.syncwr).'); + +$pmda->add_metric(pmda_pmid(0,48), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.exdeadlocks', 'Total exchange deadlocks', +'The "exchange deadlocks" statistic from the V$SYSSTAT view. This is +the number of times that a process detected a potential deadlock when +exchanging two buffers and raised an internal, restartable error. +Index scans are currently the only operations which perform exchanges.'); + +$pmda->add_metric(pmda_pmid(0,49), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.buffer.freereqs', 'Total free buffer requested', +'The "free buffer requested" statistic from the V$SYSSTAT view. This is +the number of times a reusable buffer or a free buffer was requested to +create or load a block.'); + + $pmda->add_metric(pmda_pmid(0,50), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.buffer.dirtyinsp', 'Total dirty buffers inspected', +'The "dirty buffers inspected" statistic from the V$SYSSTAT view. +This is the number of dirty buffers found by the foreground while +the foreground is looking for a buffer to reuse.'); + + $pmda->add_metric(pmda_pmid(0,51), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.buffer.freeinsp', 'Total free buffer inspected', +'The "free buffer inspected" statistic from the V$SYSSTAT view. This is +the number of buffers skipped over from the end of an LRU queue in +order to find a reusable buffer. The difference between this metric +and the oracle.sysstat.buffer.dirtyinsp metric is the number of +buffers that could not be used because they were either busy, needed to +be written after rapid aging out, or they have a user, a waiter, or are +being read/written. Refer to the oracle.sysstat.buffer.dirtyinsp +help text also.'); + + $pmda->add_metric(pmda_pmid(0,52), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.dbwr.timeouts', 'Total DBWR timeouts', +'The "DBWR timeouts" statistic from the V$SYSSTAT view. This is the +number of times that the DBWR has been idle since the last timeout. +These are the times that the DBWR looked for buffers to idle write.'); + + $pmda->add_metric(pmda_pmid(0,53), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.dbwr.mkfreereqs', 'Total DBWR make free requests', +'The "DBWR make free requests" statistic from the V$SYSSTAT view. +This is the number of messages received requesting DBWR to make +some more free buffers for the LRU.'); + + $pmda->add_metric(pmda_pmid(0,54), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.dbwr.freebuffnd', 'Total DBWR free buffers found', +'The "DBWR free buffers found" statistic from the V$SYSSTAT view. +This is the number of buffers that DBWR found to be clean when it +was requested to make free buffers. Divide this by +oracle.sysstat.dbwr.mkfreereqs to find the average number of +reusable buffers at the end of each LRU.'); + + $pmda->add_metric(pmda_pmid(0,55), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.dbwr.lruscans', 'Total DBWR lru scans', +'The "DBWR lru scans" statistic from the V$SYSSTAT view. This is the +number of times that DBWR does a scan of the LRU queue looking for +buffers to write. This includes times when the scan is to fill a batch +being written for another purpose such as a checkpoint. This metric\'s +value is always greater than oracle.sysstat.dbwr.mkfreereqs.'); + + $pmda->add_metric(pmda_pmid(0,56), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.dbwr.sumscandepth', 'Total DBWR summed scan depth', +'The "DBWR summed scan depth" statistic from the V$SYSSTAT view. The +current scan depth (number of buffers scanned by DBWR) is added to this +metric every time DBWR scans the LRU for dirty buffers. Divide by +oracle.sysstat.dbwr.lruscans to find the average scan depth.'); + + $pmda->add_metric(pmda_pmid(0,57), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.dbwr.bufsscanned', 'Total DBWR buffers scanned', +'The "DBWR buffers scanned" statistic from the V$SYSSTAT view. +This is the total number of buffers looked at when scanning each +LRU set for dirty buffers to clean. This count includes both dirty +and clean buffers. Divide by oracle.sysstat.dbwr.lruscans to +find the average number of buffers scanned.'); + + $pmda->add_metric(pmda_pmid(0,58), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.dbwr.checkpoints', 'Total DBWR checkpoints', +'The "DBWR checkpoints" statistic from the V$SYSSTAT view. +This is the number of times the DBWR was asked to scan the cache +and write all blocks marked for a checkpoint.'); + + $pmda->add_metric(pmda_pmid(0,59), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.dbwr.xinstwrites', 'Total DBWR cross instance writes', +'The "DBWR cross instance writes" statistic from the V$SYSSTAT view. +This is the total number of blocks written for other instances so that +they can access the buffers.'); + + $pmda->add_metric(pmda_pmid(0,60), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.remote.instundowr', + 'Total remote instance undo writes', +'The "remote instance undo writes" statistic from the V$SYSSTAT view. +This is the number of times this instance performed a dirty undo write +so that another instance could read that data.'); + + $pmda->add_metric(pmda_pmid(0,61), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.remote.instundoreq', + 'Total remote instance undo requests', +'The "remote instance undo requests" statistic from the V$SYSSTAT view. +This is the number of times this instance requested undo from another +instance so it could be read CR.'); + + $pmda->add_metric(pmda_pmid(0,62), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.xinstcrrd', 'Total cross instance CR read', +'The "cross instance CR read" statistic from the V$SYSSTAT view. This +is the number of times this instance made a cross instance call to +write a particular block due to timeout on an instance lock get. The +call allowed the blocks to be read CR rather than CURRENT.'); + + $pmda->add_metric(pmda_pmid(0,63), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.kcmg.cscalls', 'Total calls to kcmgcs', +'The "calls to kcmgcs" statistic from the V$SYSSTAT view. This is the +total number of calls to get the current System Commit Number (SCN).'); + +$pmda->add_metric(pmda_pmid(0,64), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.kcmg.rscalls', 'Total calls to kcmgrs', +'The "calls to kcmgrs" statistic from the V$SYSSTAT view. This is the +total number of calls to get a recent System Commit Number (SCN).'); + + $pmda->add_metric(pmda_pmid(0,65), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.kcmg.ascalls', 'Total calls to kcmgas', +'The "calls to kcmgas" statistic from the V$SYSSTAT view. This is the +total number of calls that Get and Advance the System Commit Number +(SCN). Also used when getting a Batch of SCN numbers.'); + + $pmda->add_metric(pmda_pmid(0,66), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.nodlmscnsgets', + 'Total next scns gotten without going to DLM', +'The "next scns gotten without going to DLM" statistic from the +V$SYSSTAT view. This is the number of SCNs (System Commit Numbers) +obtained without going to the DLM (Distributed Lock Manager).'); + + $pmda->add_metric(pmda_pmid(0,67), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.redo.entries', 'Total redo entries', +'The "redo entries" statistic from the V$SYSSTAT view. This metric +is incremented each time redo entries are copied into the redo log +buffer.'); + + $pmda->add_metric(pmda_pmid(0,68), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(1,0,0,PM_SPACE_BYTE,0,0), + 'oracle.sysstat.redo.size', 'Total redo size', +'The "redo size" statistic from the V$SYSSTAT view. +This is the number of bytes of redo generated.'); + + $pmda->add_metric(pmda_pmid(0,69), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.redo.entslin', 'Total redo entries linearized', +'The "redo entries linearized" statistic from the V$SYSSTAT view. This +is the number of entries of size <= REDO_ENTRY_PREBUILD_THRESHOLD. +Building these entries increases CPU time but may increase concurrency.'); + + $pmda->add_metric(pmda_pmid(0,70), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.redo.bufallret', + 'Total redo buffer allocation retries', +'The "redo buffer allocation retries" statistic from the V$SYSSTAT +view. This is the total number of retries necessary to allocate space +in the redo buffer. Retries are needed because either the redo writer +has gotten behind, or because an event (such as log switch) is +occuring.'); + + $pmda->add_metric(pmda_pmid(0,71), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.redo.smallcpys', 'Total redo small copies', +'The "redo small copies" statistic from the V$SYSSTAT view. This is the +total number of entries where size <= LOG_SMALL_ENTRY_MAX_SIZE. These +entries are copied using the protection of the allocation latch, +eliminating the overhead of getting the copy latch. This is generally +only useful for multi-processor systems.'); + + $pmda->add_metric(pmda_pmid(0,72), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(1,0,0,PM_SPACE_BYTE,0,0), + 'oracle.sysstat.redo.wastage', 'Total redo wastage', +'The "redo wastage" statistic from the V$SYSSTAT view. This is the +number of bytes wasted because redo blocks needed to be written before +they are completely full. Early writing may be needed to commit +transactions, to be able to write a database buffer or to switch logs.'); + + $pmda->add_metric(pmda_pmid(0,73), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.sysstat.redo.wrlatchtime', 'Total redo writer latching time', +'The "redo writer latching time" statistic from the V$SYSSTAT view. +This is the elapsed time needed by LGWR to obtain and release each copy +latch. This is only used if the LOG_SIMULTANEOUS_COPIES initialization +parameter is greater than zero.'); + + $pmda->add_metric(pmda_pmid(0,74), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.redo.writes', 'Total redo writes', +'The "redo writes" statistic from the V$SYSSTAT view. +This is the total number of writes by LGWR to the redo log files.'); + + $pmda->add_metric(pmda_pmid(0,75), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.redo.bwrites', 'Total redo blocks written', +'The "redo blocks written" statistic from the V$SYSSTAT view. +This metric is not documented by Oracle.'); + + $pmda->add_metric(pmda_pmid(0,76), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.sysstat.redo.wrtime', 'Total redo write time', +'The "redo write time" statistic from the V$SYSSTAT view. This is the +total elapsed time of the write from the redo log buffer to the current +redo log file.'); + + $pmda->add_metric(pmda_pmid(0,77), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.redo.logspreqs', 'Total redo log space requests', +'The "redo log space requests" statistic from the V$SYSSTAT view. The +active log file is full and Oracle is waiting for disk space to be +allocated for the redo log entries. Space is created by performing a +log switch. +Small log files in relation to the size of the SGA or the commit rate +of the work load can cause problems. When the log switch occurs, +Oracle must ensure that all committed dirty buffers are written to disk +before switching to a new log file. If you have a large SGA full of +dirty buffers and small redo log files, a log switch must wait for DBWR +to write dirty buffers to disk before continuing.'); + + $pmda->add_metric(pmda_pmid(0,78), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.sysstat.redo.logspwaittime', 'Total redo log space wait time', +'The "redo log space wait time" statistic from the V$SYSSTAT view. This +is the total elapsed time spent waiting for redo log space requests +(refer to the oracle.sysstat.redo.logspreqs metric).'); + + $pmda->add_metric(pmda_pmid(0,79), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.redo.logswintrs', 'Total redo log switch interrupts', +'The "redo log switch interrupts" statistic from the V$SYSSTAT view. +This is the number of times that another instance asked this instance +to advance to the next log file.'); + + $pmda->add_metric(pmda_pmid(0,80), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.redo.ordermarks', 'Total redo ordering marks', +'The "redo ordering marks" statistic from the V$SYSSTAT view. This is +the number of times that an SCN (System Commit Number) had to be +allocated to force a redo record to have a higher SCN than a record +generated in another thread using the same block.'); + + $pmda->add_metric(pmda_pmid(0,81), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.hashlwgets', 'Total hash latch wait gets', +'The "hash latch wait gets" statistic from the V$SYSSTAT view. +This metric is not documented by Oracle.'); + + $pmda->add_metric(pmda_pmid(0,82), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.bgchkpts.started', + 'Total background checkpoints started', +'The "background checkpoints started" statistic from the V$SYSSTAT +view. This is the number of checkpoints started by the background. It +can be larger than the number completed if a new checkpoint overrides +an incomplete checkpoint. This only includes checkpoints of the +thread, not individual file checkpoints for operations such as offline +or begin backup. This statistic does not include the checkpoints +performed in the foreground, such as ALTER SYSTEM CHECKPOINT LOCAL.'); + + $pmda->add_metric(pmda_pmid(0,83), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.bgchkpts.completed', + 'Total background checkpoints completed', +'The "background checkpoints completed" statistic from the V$SYSSTAT +view. This is the number of checkpoints completed by the background. +This statistic is incremented when the background successfully advances +the thread checkpoint.'); + + $pmda->add_metric(pmda_pmid(0,84), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.tranlock.fgreqs', + 'Total transaction lock foreground requests', +'The "transaction lock foreground requests" statistic from the V$SYSSTAT +view. For parallel server this is incremented on each call to ktugil() +"Kernel Transaction Get Instance Lock". For single instance this has +no meaning.'); + + $pmda->add_metric(pmda_pmid(0,85), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.sysstat.tranlock.fgwaittime', + 'Total transaction lock foreground wait time', +'The "transaction lock foreground wait time" statistic from the +V$SYSSTAT view. This is the total time spent waiting for a transaction +instance lock.'); + + $pmda->add_metric(pmda_pmid(0,86), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.tranlock.bggets', + 'Total transaction lock background gets', +'The "transaction lock background gets" statistic from the V$SYSSTAT +view. For parallel server this is incremented on each call to ktuglb() +"Kernel Transaction Get lock in Background".'); + + $pmda->add_metric(pmda_pmid(0,87), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.sysstat.tranlock.bggettime', + 'Total transaction lock background get time', +'The "transaction lock background get time" statistic from the V$SYSSTAT +view. Total time spent waiting for a transaction instance lock in +Background.'); + + $pmda->add_metric(pmda_pmid(0,88), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.table.shortscans', 'Total table scans (short tables)', +'The "table scans (short tables)" statistic from the V$SYSSTAT view. +Long (or conversely short) tables can be defined by optimizer hints +coming down into the row source access layer of Oracle. The table must +have the CACHE option set.'); + + $pmda->add_metric(pmda_pmid(0,89), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.table.longscans', 'Total table scans (long tables)', +'The "table scans (long tables)" statistic from the V$SYSSTAT view. +Long (or conversely short) tables can be defined as tables that do not +meet the short table criteria described in the help text for the +oracle.sysstat.table.shortscans metric.'); + + $pmda->add_metric(pmda_pmid(0,90), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.table.scanrows', 'Total table scan rows gotten', +'The "table scan rows gotten" statistic from the V$SYSSTAT view. This +is collected during a scan operation, but instead of counting the +number of database blocks (see oracle.sysstat.table.scanblocks), +it counts the rows being processed.'); + + $pmda->add_metric(pmda_pmid(0,91), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.table.scanblocks', 'Total table scan blocks gotten', +'The "table scan blocks gotten" statistic from the V$SYSSTAT view. +During scanning operations, each row is retrieved sequentially by +Oracle. This metric is incremented for each block encountered during +the scan. +This informs you of the number of database blocks that you had to get +from the buffer cache for the purpose of scanning. Compare the value +of this parameter to the value of oracle.sysstat.consgets +(consistent gets) to get a feel for how much of the consistent read +activity can be attributed to scanning.'); + + $pmda->add_metric(pmda_pmid(0,92), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.table.rowidfetches', 'Total table fetch by rowid', +'The "table fetch by rowid" statistic from the V$SYSSTAT view. When +rows are fetched using a ROWID (usually from an index), each row +returned increments this counter. +This metric is an indication of row fetch operations being performed +with the aid of an index. Because doing table scans usually indicates +either non-optimal queries or tables without indices, this metric +should increase as the above issues have been addressed in the +application.'); + + $pmda->add_metric(pmda_pmid(0,93), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.table.contfetches', 'Total table fetch continued row', +'The "table fetch continued row" statistic from the V$SYSSTAT view. +This metric is incremented when a row that spans more than one block is +encountered during a fetch. +Retrieving rows that span more than one block increases the logical I/O +by a factor that corresponds to the number of blocks that need to be +accessed. Exporting and re-importing may eliminate this problem. Also +take a closer look at the STORAGE parameters PCT_FREE and PCT_USED. +This problem cannot be fixed if rows are larger than database blocks +(for example, if the LONG datatype is used and the rows are extremely +large).'); + + $pmda->add_metric(pmda_pmid(0,94), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.clustkey.scans', 'Total cluster key scans', +'The "cluster key scans" statistic from the V$SYSSTAT view. +This is the number of cluster scans that were started.'); + + $pmda->add_metric(pmda_pmid(0,95), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.clustkey.scanblocks', + 'Total cluster key scan block gets', +'The "cluster key scan block gets" statistic from the V$SYSSTAT view. +This is the number of blocks obtained in a cluster scan.'); + + $pmda->add_metric(pmda_pmid(0,96), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.sysstat.sql.parsecpu', 'Total parse time cpu', +'The "parse time cpu" statistic from the V$SYSSTAT view. This is the +total CPU time used for parsing (hard and soft parsing). Units are +milliseconds of CPU time.'); + + $pmda->add_metric(pmda_pmid(0,97), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.sysstat.sql.parsereal', 'Total parse time elapsed', +'The "parse time elapsed" statistic from the V$SYSSTAT view. +This is the total elapsed time for parsing. Subtracting +oracle.sysstat.sql.parsecpu from this metric gives the total +waiting time for parse resources. Units are milliseconds.'); + + $pmda->add_metric(pmda_pmid(0,98), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.sql.parsed', 'Total parse count', +'The "parse count (total)" statistic from the V$SYSSTAT view. This is +the total number of parse calls (hard and soft). A soft parse is a +check to make sure that the permissions on the underlying objects have +not changed.'); + + $pmda->add_metric(pmda_pmid(0,99), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.sql.executed', 'Total execute count', +'The "execute count" statistic from the V$SYSSTAT view. +This is the total number of calls (user and recursive) that +execute SQL statements.'); + + $pmda->add_metric(pmda_pmid(0,100), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.sql.memsorts', 'Total sorts (memory)', +'The "sorts (memory)" statistic from the V$SYSSTAT view. If the number +of disk writes is zero, then the sort was performed completely in +memory and this metric is incremented. +This is more an indication of sorting activity in the application +workload. You cannot do much better than memory sorts, except for no +sorts at all. Sorting is usually caused by selection criteria +specifications within table join SQL operations.'); + + $pmda->add_metric(pmda_pmid(0,101), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.sql.disksorts', 'Total sorts (disk)', +'The "sorts (disk)" statistic from the V$SYSSTAT view. If the number +of disk writes is non-zero for a given sort operation, then this metric +is incremented. +Sorts that require I/O to disk are quite resource intensive. +Try increasing the size of the Oracle initialization parameter +SORT_AREA_SIZE.'); + + $pmda->add_metric(pmda_pmid(0,102), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.sql.rowsorts', 'Total sorts (rows)', +'The "sorts (rows)" statistic from the V$SYSSTAT view. +This is the total number of rows sorted.'); + + $pmda->add_metric(pmda_pmid(0,103), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.sccachehits', 'Total session cursor cache hits', +'The "session cursor cache hits" statistic from the V$SYSSTAT view. +This is the count of the number of hits in the session cursor cache. +A hit means that the SQL statement did not have to be reparsed. +By subtracting this metric from oracle.sysstat.sql.parsed one can +determine the real number of parses that have been performed.'); + + $pmda->add_metric(pmda_pmid(0,104), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.cursauths', 'Total cursor authentications', +'The "cursor authentications" statistic from the V$SYSSTAT view. This +is the total number of cursor authentications. The number of times +that cursor privileges have been verified, either for a SELECT or +because privileges were revoked from an object, causing all users of +the cursor to be re-authenticated.'); + + $pmda->add_metric(pmda_pmid(0,105), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.recovery.breads', 'Total recovery blocks read', +'The "recovery blocks read" statistic from the V$SYSSTAT view. +This is the number of blocks read during recovery.'); + + $pmda->add_metric(pmda_pmid(0,106), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.recovery.areads', 'Total recovery array reads', +'The "recovery array reads" statistic from the V$SYSSTAT view. This is +the number of reads performed during recovery.'); + + $pmda->add_metric(pmda_pmid(0,107), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.sysstat.recovery.areadtime', 'Total recovery array read time', +'The "recovery array read time" statistic from the V$SYSSTAT view. +This is the elapsed time of I/O while doing recovery.'); + + $pmda->add_metric(pmda_pmid(0,108), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.table.rowidrngscans', + 'Total table scans (rowid ranges)', +'The "table scans (rowid ranges)" statistic from the V$SYSSTAT view. +This is a count of the table scans with specified ROWID endpoints. +These scans are performed for Parallel Query.'); + + $pmda->add_metric(pmda_pmid(0,109), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.table.cachepartscans', + 'Total table scans (cache partitions)', +'The "table scans (cache partitions)" statistic from the V$SYSSTAT +view. This is a count of range scans on tables that have the CACHE +option enabled.'); + + $pmda->add_metric(pmda_pmid(0,110), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.cr.createblk', 'Total CR blocks created', +'The "CR blocks created" statistic from the V$SYSSTAT view. +A buffer in the buffer cache was cloned. The most common reason +for cloning is that the buffer is held in an incompatible mode.'); + + $pmda->add_metric(pmda_pmid(0,111), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.cr.convcurrblk', + 'Total Current blocks converted for CR', +'The "Current blocks converted for CR" statistic from the V$SYSSTAT +view. A CURRENT buffer (shared or exclusive) is made CR before it can +be used.'); + + $pmda->add_metric(pmda_pmid(0,112), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.unnecprocclnscn', + 'Total Unnecessary process cleanup for SCN batching', +'The "Unnecessary process cleanup for SCN batching" statistic from the +V$SYSSTAT view. This is the total number of times that the process +cleanup was performed unnecessarily because the session/process did not +get the next batched SCN (System Commit Number). The next batched SCN +went to another session instead.'); + + $pmda->add_metric(pmda_pmid(0,113), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.consread.transtable.undo', + 'Total transaction tables consistent reads - undo records applied', +'The "transaction tables consistent reads - undo records applied" +statistic from the V$SYSSTAT view. This is the number of UNDO records +applied to get CR images of data blocks.'); + + $pmda->add_metric(pmda_pmid(0,114), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.consread.transtable.rollback', + 'Total transaction tables consistent read rollbacks', +'The "transaction tables consistent read rollbacks" statistic from the +V$SYSSTAT view. This is the total number of times transaction tables +are CR rolled back.'); + + $pmda->add_metric(pmda_pmid(0,115), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.datablkundo', + 'Total data blocks consistent reads - undo records applied', +'The "data blocks consistent reads - undo records applied" statistic +from the V$SYSSTAT view. This is the total number of UNDO records +applied to get CR images of data blocks.'); + + $pmda->add_metric(pmda_pmid(0,116), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.noworkgets', 'Total no work - consistent read gets', +'The "no work - consistent read gets" statistic from the V$SYSSTAT +view. This metric is not documented by Oracle.'); + + $pmda->add_metric(pmda_pmid(0,117), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.consread.cleangets', + 'Total cleanouts only - consistent read gets', +'The "cleanouts only - consistent read gets" statistic from the +V$SYSSTAT view. The number of times a CR get required a block +cleanout ONLY and no application of undo.'); + + $pmda->add_metric(pmda_pmid(0,118), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.consread.rollbackgets', + 'Total rollbacks only - consistent read gets', +'The "rollbacks only - consistent read gets" statistic from the +V$SYSSTAT view. This is the total number of CR operations requiring +UNDO to be applied but no block cleanout.'); + + $pmda->add_metric(pmda_pmid(0,119), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.consread.cleanrollbackgets', + 'Total cleanouts and rollbacks - consistent read gets', +'The "cleanouts and rollbacks - consistent read gets" statistic from the +V$SYSSTAT view. This is the total number of CR gets requiring BOTH +block cleanout and subsequent rollback to get to the required snapshot +time.'); + + $pmda->add_metric(pmda_pmid(0,120), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.rollbackchangeundo', + 'Total rollback changes - undo records applied', +'The "rollback changes - undo records applied" statistic from the +V$SYSSTAT view. This is the total number of undo records applied to +blocks to rollback real changes. Eg: as a result of a rollback command +and *NOT* in the process of getting a CR block image. +Eg: commit; + insert into mytab values (10); + insert into mytab values (20); + rollback; +should increase this statistic by 2 (assuming no recursive operations).'); + + $pmda->add_metric(pmda_pmid(0,121), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.transrollbacks', 'Total transaction rollbacks', +'The "transaction rollbacks" statistic from the V$SYSSTAT view. This is +the actual transaction rollbacks that involve undoing real changes. +Contrast with oracle.sysstat.user_rollbacks which only indicates the +number of ROLLBACK statements received.'); + + $pmda->add_metric(pmda_pmid(0,122), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.cleanout.immedcurr', + 'Total immediate (CURRENT) block cleanout applications', +'The "immediate (CURRENT) block cleanout applications" statistic from +the V$SYSSTAT view. This metric is not documented by Oracle.'); + + $pmda->add_metric(pmda_pmid(0,123), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.cleanout.immedcr', + 'Total immediate (CR) block cleanout applications', +'The "immediate (CR) block cleanout applications" statistic from the +V$SYSSTAT view. This metric is not documented by Oracle.'); + + $pmda->add_metric(pmda_pmid(0,124), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.cleanout.defercurr', + 'Total deferred (CURRENT) block cleanout applications', +'The "deferred (CURRENT) block cleanout applications" statistic from +the V$SYSSTAT view. This is the number of times cleanout records are +deferred. Deferred changes are piggybacked with real changes.'); + + $pmda->add_metric(pmda_pmid(0,125), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.table.dirreadscans', 'Total table scans (direct read)', +'The "table scans (direct read)" statistic from the V$SYSSTAT view. +This is a count of table scans performed with direct read (bypassing +the buffer cache).'); + + $pmda->add_metric(pmda_pmid(0,126), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.sccachecount', 'Total session cursor cache count', +'The "session cursor cache count" statistic from the V$SYSSTAT view. +This is the total number of cursors cached. This is only incremented +if SESSION_CACHED_CURSORS is greater than zero. This metric is the +most useful in V$SESSTAT. If the value for this statistic is close to +the setting of the initialization parameter SESSION_CACHED_CURSORS, the +value of the initialization parameter should be increased.'); + + $pmda->add_metric(pmda_pmid(0,127), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.totalfileopens', 'Total file opens', +'The "total file opens" statistic from the V$SYSSTAT view. This is the +total number of file opens being performed by the instance. Each +process needs a number of files (control file, log file, database file) +in order to work against the database.'); + + $pmda->add_metric(pmda_pmid(0,128), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.cachereplaceopens', + 'Opens requiring cache replacement', +'The "opens requiring cache replacement" statistic from the V$SYSSTAT +view. This is the total number of file opens that caused a current +file to be closed in the process file cache.'); + + $pmda->add_metric(pmda_pmid(0,129), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.replacedfileopens', 'Opens of replaced files', +'The "opens of replaced files" statistic from the V$SYSSTAT view. This +is the total number of files that needed to be reopened because they +were no longer in the process file cache.'); + + $pmda->add_metric(pmda_pmid(0,130), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.commitcleanouts.total', 'Total commit cleanout calls', +'The "commit cleanouts" statistic from the V$SYSSTAT view. This is the +number of times that the cleanout block at commit time function was +performed.'); + + $pmda->add_metric(pmda_pmid(0,131), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.commitcleanouts.completed', + 'Successful commit cleanouts', +'The "commit cleanouts successfully completed" metric from the V$SYSSTAT +view. This is the number of times the cleanout block at commit time +function successfully completed.'); + + $pmda->add_metric(pmda_pmid(0,132), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.commitcleanouts.failures.writedisabled', + 'Commits when writes disabled', +'The "commit cleanout failures: write disabled" statistic from the +V$SYSSTAT view. This is the number of times that a cleanout at commit +time was performed but the writes to the database had been temporarily +disabled.'); + + $pmda->add_metric(pmda_pmid(0,133), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.commitcleanouts.failures.hotbackup', + 'Commit attempts during hot backup', +'The "commit cleanout failures: hot backup in progress" statistic +from the V$SYSSTAT view. This is the number of times that cleanout +at commit was attempted during hot backup.'); + + $pmda->add_metric(pmda_pmid(0,134), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.commitcleanouts.failures.bufferwrite', + 'Commits while buffer being written', +'The "commit cleanout failures: buffer being written" statistic from the +V$SYSSTAT view. This is the number of times that a cleanout at commit +time was attempted but the buffer was being written at the time.'); + + $pmda->add_metric(pmda_pmid(0,135), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.commitcleanouts.failures.callbackfail', + 'Commit callback fails', +'The "commit cleanout failures: callback failure" statistic from the +V$SYSSTAT view. This is the number of times that the cleanout callback +function returned FALSE (failed).'); + + $pmda->add_metric(pmda_pmid(0,136), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.commitcleanouts.failures.blocklost', + 'Commit fails due to lost block', +'The "commit cleanout failures: block lost" statistic from the V$SYSSTAT +view. This is the number of times that a cleanout at commit was +attempted but could not find the correct block due to forced write, +replacement, or switch CURRENT.'); + + $pmda->add_metric(pmda_pmid(0,137), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.commitcleanouts.failures.cannotpin', + 'Commit fails due to block pinning', +'The "commit cleanout failures: cannot pin" statistic from the V$SYSSTAT +view. This is the number of times that a commit cleanout was performed +but failed because the block could not be pinned.'); + + $pmda->add_metric(pmda_pmid(0,138), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.dbwr.skiphotwrites', 'Total DBWR hot writes skipped', +'The "DBWR skip hot writes" statistic from the V$SYSSTAT view. +This metric is not documented by Oracle.'); + + $pmda->add_metric(pmda_pmid(0,139), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.dbwr.ckptbufwrites', + 'Total DBWR checkpoint buffers written', +'The "DBWR checkpoint buffers written" statistic from the V$SYSSTAT +view. This is the number of times the DBWR was asked to scan the cache +and write all blocks marked for checkpoint.'); + + $pmda->add_metric(pmda_pmid(0,140), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.dbwr.transwrites', + 'Total DBWR transaction table writes', +'The "DBWR transaction table writes" statistic from the V$SYSSTAT view. +This metric is not documented by Oracle.'); + + $pmda->add_metric(pmda_pmid(0,141), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.dbwr.undoblockwrites', 'Total DBWR undo block writes', +'The "DBWR undo block writes" statistic from the V$SYSSTAT view. +This metric is not documented by Oracle.'); + + $pmda->add_metric(pmda_pmid(0,142), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.dbwr.ckptwritereq', + 'Total DBWR checkpoint write requests', +'The "DBWR checkpoint write requests" statistic from the V$SYSSTAT +view. This is the number of times the DBWR was asked to scan the cache +and write all blocks.'); + + $pmda->add_metric(pmda_pmid(0,143), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.dbwr.incrckptwritereq', + 'Total DBWR incr checkpoint write requests', +'The "DBWR incr. ckpt. write requests" statistic from the V$SYSSTAT +view. This metric is not documented by Oracle.'); + + $pmda->add_metric(pmda_pmid(0,144), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.dbwr.revisitbuf', + 'Total DBWR being-written buffer revisits', +'The "DBWR revisited being-written buffer" statistic from the V$SYSSTAT +view. This metric is not documented by Oracle.'); + + $pmda->add_metric(pmda_pmid(0,145), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.dbwr.xinstflushcalls', + 'Total DBWR cross instance flush calls', +'The "DBWR Flush object cross instance calls" statistic from the +V$SYSSTAT view. This is the number of times DBWR received a flush by +object number cross instance call (from a remote instance). This +includes both checkpoint and invalidate object.'); + + $pmda->add_metric(pmda_pmid(0,146), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.dbwr.nodirtybufs', + 'DBWR flush calls finding no dirty buffers', +'The "DBWR Flush object call found no dirty buffers" statistic from the +V$SYSSTAT view. DBWR didn\'t find any dirty buffers for an object that +was flushed from the cache.'); + + $pmda->add_metric(pmda_pmid(0,147), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.remote.instundoblockwr', + 'Remote instance undo block writes', +'The "remote instance undo block writes" statistic from the V$SYSSTAT +view. This is the number of times this instance wrote a dirty undo +block so that another instance could read it.'); + + $pmda->add_metric(pmda_pmid(0,148), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.remote.instundoheaderwr', + 'Remote instance undo header writes', +'The "remote instance undo header writes" statistic from the V$SYSSTAT +view. This is the number of times this instance wrote a dirty undo +header block so that another instance could read it.'); + + $pmda->add_metric(pmda_pmid(0,149), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.kcmgss_snapshotscn', + 'Total calls to get snapshot SCN: kcmgss', +'The "calls to get snapshot scn: kcmgss" statistic from the V$SYSSTAT +view. This is the number of times a snap System Commit Number (SCN) +was allocated. The SCN is allocated at the start of a transaction.'); + + $pmda->add_metric(pmda_pmid(0,150), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.kcmgss_batchwait', 'Total kcmgss waits for batching', +'The "kcmgss waited for batching" statistic from the V$SYSSTAT view. +This is the number of times the kernel waited on a snapshot System +Commit Number (SCN).'); + + $pmda->add_metric(pmda_pmid(0,151), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.kcmgss_nodlmscnread', + 'Total kcmgss SCN reads with using DLM', +'The "kcmgss read scn without going to DLM" statistic from the V$SYSSTAT +view. This is the number of times the kernel casually confirmed the +System Commit Number (SCN) without using the Distributed Lock Manager +(DLM).'); + + $pmda->add_metric(pmda_pmid(0,152), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.kcmccs_currentscn', + 'Total kcmccs calls to get current SCN', +'The "kcmccs called get current scn" statistic from the V$SYSSTAT view. +This is the number of times the kernel got the CURRENT SCN (System +Commit Number) when there was a need to casually confirm the SCN.'); + + $pmda->add_metric(pmda_pmid(0,153), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.serializableaborts', 'Total serializable aborts', +'The "serializable aborts" statistic from the V$SYSSTAT view. This is +the number of times a SQL statement in serializable isolation level had +to abort.'); + + $pmda->add_metric(pmda_pmid(0,154), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.globalcache.hashlatchwaits', + 'Global cache hash latch waits', +'The "global cache hash latch waits" statistic from the V$SYSSTAT view. +This is the number of times that the buffer cache hash chain latch +couldn\'t be acquired immediately, when processing a lock element.'); + + $pmda->add_metric(pmda_pmid(0,155), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.globalcache.freelistwaits', + 'Global cache freelist waits', +'The "global cache freelist waits" statistic from the V$SYSSTAT view. +This is the number of pings for free lock elements (when all release +locks are in use).'); + + $pmda->add_metric(pmda_pmid(0,156), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.globalcache.defers', + 'Global cache ping request defers', +'The "global cache defers" statistic from the V$SYSSTAT view. +This is the number of times a ping request was deferred until later.'); + + $pmda->add_metric(pmda_pmid(0,157), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.instrecoverdbfreeze', + 'Instance recovery database freezes', +'The "instance recovery database freeze count" statistic from the +V$SYSSTAT view. This metric is not documented by Oracle.'); + + $pmda->add_metric(pmda_pmid(0,158), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.commitscncached', 'Commit SCN cached', +'The "Commit SCN cached" statistic from the V$SYSSTAT view. The System +Commit Number (SCN) is used to serialize time within a single instance, +and across all instances. This lock resource caches the current value +of the SCN - the value is incremented in response to many database +events, but most notably COMMIT WORK. Access to the SCN lock value to +get and store the SCN is batched on most cluster implementations, so +that every process that needs a new SCN gets one and stores a new value +back on one instance, before the SCN lock is released so that it may be +granted to another instance. Processes get the SC lock once and then +use conversion operations to manipulate the lock value.'); + + $pmda->add_metric(pmda_pmid(0,159), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.cachedscnreferenced', 'Cached Commit SCN referenced', +'The "Cached Commit SCN referenced" statistic from the V$SYSSTAT view. +The SCN (System Commit Number), is generally a timing mechanism Oracle +uses to guarantee ordering of transactions and to enable correct +recovery from failure. They are used for guaranteeing +read-consistency, and checkpointing.'); + + $pmda->add_metric(pmda_pmid(0,160), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.hardparsed', 'Total number of hard parses performed', +'The "parse count (hard)" statistic from the V$SYSSTAT view. This is +the total number of parse calls (real parses). A hard parse means +allocating a workheap and other memory structures, and then building a +parse tree. A hard parse is a very expensive operation in terms of +memory use.'); + + $pmda->add_metric(pmda_pmid(0,161), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(1,0,0,PM_SPACE_BYTE,0,0), + 'oracle.sysstat.sqlnet.clientrecvs', + 'Total bytes from client via SQL*Net', +'The "bytes received via SQL*Net from client" statistic from the +V$SYSSTAT view. This is the total number of bytes received from the +client over SQL*Net.'); + + $pmda->add_metric(pmda_pmid(0,162), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(1,0,0,PM_SPACE_BYTE,0,0), + 'oracle.sysstat.sqlnet.clientsends', + 'Total bytes to client via SQL*Net', +'The "bytes sent via SQL*Net to client" statistic from the V$SYSSTAT +view. This is the total number of bytes sent to the client over +SQL*Net.'); + + $pmda->add_metric(pmda_pmid(0,163), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.sqlnet.clientroundtrips', + 'Total client SQL*Net roundtrips', +'The "SQL*Net roundtrips to/from client" statistic from the V$SYSSTAT +view. This is the total number of network messages sent to and +received from the client.'); + + $pmda->add_metric(pmda_pmid(0,164), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(1,0,0,PM_SPACE_BYTE,0,0), + 'oracle.sysstat.sqlnet.dblinkrecvs', + 'Total bytes from dblink via SQL*Net', +'The "bytes received via SQL*Net from dblink" statistic from the +V$SYSSTAT view. This is the total number of bytes received from +the database link over SQL*Net.'); + + $pmda->add_metric(pmda_pmid(0,165), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(1,0,0,PM_SPACE_BYTE,0,0), + 'oracle.sysstat.sqlnet.dblinksends', + 'Total bytes to dblink via SQL*Net', +'The "bytes sent via SQL*Net to dblink" statistic from the V$SYSSTAT +view. This is the total number of bytes sent over a database link.'); + + $pmda->add_metric(pmda_pmid(0,166), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.sqlnet.dblinkroundtrips', + 'Total dblink SQL*Net roundtrips', +'The "SQL*Net roundtrips to/from dblink" statistic from the V$SYSSTAT +view. This is the total number of network messages sent to and +received from a database link.'); + + $pmda->add_metric(pmda_pmid(0,167), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.parallel.queries', 'Total queries parallelized', +'The "queries parallelized" statistic from the V$SYSSTAT view. This is +the number of SELECT statements which have been parallelized.'); + + $pmda->add_metric(pmda_pmid(0,168), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.parallel.DMLstatements', + 'Total DML statements parallelized', +'The "DML statements parallelized" statistic from the V$SYSSTAT view. +This is the number of Data Manipulation Language (DML) statements which +have been parallelized.'); + + $pmda->add_metric(pmda_pmid(0,169), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.parallel.DDLstatements', + 'Total DDL statements parallelized', +'The "DDL statements parallelized" statistic from the V$SYSSTAT view. +This is the number of Data Definition Language (DDL) statements which +have been parallelized.'); + + $pmda->add_metric(pmda_pmid(0,170), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.PX.localsends', 'PX local messages sent', +'The "PX local messages sent" statistic from the V$SYSSTAT view. +This is the number of local messages sent for Parallel Execution.'); + + $pmda->add_metric(pmda_pmid(0,171), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.PX.localrecvs', 'PX local messages received', +'The "PX local messages recv\'d" statistic from the V$SYSSTAT view. +This is the number of local messages received for Parallel Execution.'); + + $pmda->add_metric(pmda_pmid(0,172), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.PX.remotesends', 'PX remote messages sent', +'The "PX remote messages sent" statistic from the V$SYSSTAT view. +This is the number of remote messages sent for Parallel Execution.'); + + $pmda->add_metric(pmda_pmid(0,173), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.PX.remoterecvs', 'PX remote messages received', +'The "PX remote messages recvd" statistic from the V$SYSSTAT view. +This is the number of remote messages received for Parallel Execution.'); + + $pmda->add_metric(pmda_pmid(0,174), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.buffer.pinned', 'Total pinned buffers', +'The "buffer is pinned count" statistic from the V$SYSSTAT view. +This metric is not documented by Oracle.'); + + $pmda->add_metric(pmda_pmid(0,175), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.buffer.notpinned', 'Total not pinned buffers', +'The "buffer is not pinned count" statistic from the V$SYSSTAT view. +This metric is not documented by Oracle.'); + + $pmda->add_metric(pmda_pmid(0,176), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.sysstat.buffer.nonetopin', 'No buffer to keep pinned count', +'The "no buffer to keep pinned count" statistic from the V$SYSSTAT +view. This metric is not documented by Oracle.'); + + $pmda->add_metric(pmda_pmid(0,177), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.sysstat.OS.utime', 'OS User time used', +'The "OS User time used" statistic from the V$SYSSTAT view. +Units are milliseconds of CPU user time.'); + + $pmda->add_metric(pmda_pmid(0,178), PM_TYPE_U32, $sid_indom, + PM_SEM_COUNTER, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'oracle.sysstat.OS.stime', 'OS System time used', +'The "OS System time used" statistic from the V$SYSSTAT view. +Units are milliseconds of CPU system time.'); +} + +sub setup_rowcache ## row cache statistics from v$rowcache +{ + $pmda->add_metric(pmda_pmid(7,0), PM_TYPE_U32, $rowcache_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.rowcache.count', + 'Number of entries in this data dictionary cache', +'The total number of data dictionary cache entries, broken down by data +type. This is extracted from the COUNT column of the V$ROWCACHE view.'); + + $pmda->add_metric(pmda_pmid(7,1), PM_TYPE_U32, $rowcache_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.rowcache.gets', + 'Number of requests for cached information on data dictionary objects', +'The total number of valid data dictionary cache entries, broken down by +data type. This is extracted from the GETS column of the V$ROWCACHE +view.'); + + $pmda->add_metric(pmda_pmid(7,2), PM_TYPE_U32, $rowcache_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.rowcache.getmisses', + 'Number of data requests resulting in cache misses', +'The total number of data dictionary requests that resulted in cache +misses, broken down by data type. This is extracted from the GETMISSES +column of the V$ROWCACHE view.'); + + $pmda->add_metric(pmda_pmid(7,3), PM_TYPE_U32, $rowcache_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.rowcache.scans', 'Number of scan requests', +'The total number of data dictionary cache scans, broken down by data +type. This is extracted from the SCANS column of the V$ROWCACHE view.'); + + $pmda->add_metric(pmda_pmid(7,4), PM_TYPE_U32, $rowcache_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.rowcache.scanmisses', + 'Number of data dictionary cache misses', +'The total number of times data dictionary cache scans failed to find +data in the cache, broken down by data type. This is extracted from +the SCANMISSES column of the V$ROWCACHE view.'); +} + +sub setup_rollstat ## rollback I/O statistics from v$rollstat +{ + $pmda->add_metric(pmda_pmid(4,0), PM_TYPE_U32, $rollback_indom, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_BYTE,0,0), + 'oracle.rollback.rssize', 'Size of rollback segment', +'Size in bytes of the rollback segment. This value is obtained from the +RSSIZE column in the V$ROLLSTAT view.'); + + $pmda->add_metric(pmda_pmid(4,1), PM_TYPE_U32, $rollback_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.rollback.writes', + 'Number of bytes written to rollback segment', +'The total number of bytes written to rollback segment. This value is +obtained from the WRITES column of the V$ROLLSTAT view.'); + + $pmda->add_metric(pmda_pmid(4,2), PM_TYPE_U32, $rollback_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.rollback.xacts', 'Number of active transactions', +'The number of active transactions. This value is obtained from the +XACTS column of the V$ROLLSTAT view.'); + + $pmda->add_metric(pmda_pmid(4,3), PM_TYPE_U32, $rollback_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.rollback.gets', + 'Number of header gets for rollback segment', +'The number of header gets for the rollback segment. This value is +obtained from the GETS column of the V$ROLLSTAT view.'); + + $pmda->add_metric(pmda_pmid(4,4), PM_TYPE_U32, $rollback_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.rollback.waits', + 'Number of header waits for rollback segment', +'The number of header gets for the rollback segment. This value is +obtained from the WAIT column of the V$ROLLSTAT view.'); + + $pmda->add_metric(pmda_pmid(4,5), PM_TYPE_U32, $rollback_indom, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_BYTE,0,0), + 'oracle.rollback.hwmsize', + 'High water mark of rollback segment size', +'High water mark of rollback segment size. This value is obtained from +the HWMSIZE column of the V$ROLLSTAT view.'); + + $pmda->add_metric(pmda_pmid(4,6), PM_TYPE_U32, $rollback_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.rollback.shrinks', + 'Number of times rollback segment shrank', +'The number of times the size of the rollback segment decreased, +eliminating additional extents. This value is obtained from the +SHRINKS column of the V$ROLLSTAT view.'); + + $pmda->add_metric(pmda_pmid(4,7), PM_TYPE_U32, $rollback_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.rollback.wraps', + 'Number of times rollback segment wrapped', +'The number of times the rollback segment wrapped from one extent +to another. This value is obtained from the WRAPS column of the +V$ROLLSTAT view.'); + + $pmda->add_metric(pmda_pmid(4,8), PM_TYPE_U32, $rollback_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.rollback.extends', + 'Number of times rollback segment size extended', +'The number of times the size of the rollback segment grew to include +another extent. This value is obtained from the EXTENDS column of the +V$ROLLSTAT view.'); + + $pmda->add_metric(pmda_pmid(4,9), PM_TYPE_U32, $rollback_indom, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_BYTE,0,0), + 'oracle.rollback.avshrink', 'Average shrink size', +'Average of freed extent size for rollback segment. This value is +obtained from the AVESHRINK column of the V$ROLLSTAT view.'); + + $pmda->add_metric(pmda_pmid(4,10), PM_TYPE_U32, $rollback_indom, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_BYTE,0,0), + 'oracle.rollback.avactive', + 'Current size of active entents averaged over time', +'Current average size of extents with uncommitted transaction data. +This value is obtained from the AVEACTIVE column from the V$ROLLSTAT +view.'); +} + +sub setup_reqdist ## request time histogram from v$reqdist +{ + $pmda->add_metric(pmda_pmid(5,0), PM_TYPE_U32, $reqdist_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.reqdist', 'Histogram of database operation request times', +'A histogram of database request times divided into twelve buckets (time +ranges). This is extracted from the V$REQDIST table. +NOTE: + The TIMED_STATISTICS database parameter must be TRUE or this metric + will not return any values.'); +} + +sub setup_object_cache ## cache statistics from v$db_object_cache +{ + $pmda->add_metric(pmda_pmid(9,0), PM_TYPE_U32, $object_cache_indom, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_KBYTE,0,0), + 'oracle.object_cache.sharemem', + 'Sharable memory usage in database cache pool by object types', +'The amount of sharable memory in the shared pool consumed by various +objects, divided into object types. The valid object types are: +INDEX, TABLE, CLUSTER, VIEW, SET, SYNONYM, SEQUENCE, PROCEDURE, +FUNCTION, PACKAGE, PACKAGE BODY, TRIGGER, CLASS, OBJECT, USER, DBLINK, +NON_EXISTENT, NOT LOADED and OTHER. +The values for each of these object types are obtained from the +SHARABLE_MEM column of the V$DB_OBJECT_CACHE view.'); + + $pmda->add_metric(pmda_pmid(9,1), PM_TYPE_U32, $object_cache_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.object_cache.loads', 'Number of times object loaded', +'The number of times the object has been loaded. This count also +increases when and object has been invalidated. These values are +obtained from the LOADS column of the V$DB_OBJECT_CACHE view.'); + + $pmda->add_metric(pmda_pmid(9,2), PM_TYPE_U32, $object_cache_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.object_cache.locks', + 'Number of users currently locking this object', +'The number of users currently locking this object. These values are +obtained from the LOCKS column of the V$DB_OBJECT_CACHE view.'); + + $pmda->add_metric(pmda_pmid(9,3), PM_TYPE_U32, $object_cache_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.object_cache.pins', + 'Number of users currently pinning this object', +'The number of users currently pinning this object. These values are +obtained from the PINS column of the V$DB_OBJECT_CACHE view.'); +} + +sub setup_license ## licence data from v$license +{ + $pmda->add_metric(pmda_pmid(1,0), PM_TYPE_U32, $sid_indom, + PM_SEM_INSTANT, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.license.maxsess', + 'Maximum number of concurrent user sessions', +'The maximum number of concurrent user sessions permitted for the +instance. This value is obtained from the SESSIONS_MAX column of +the V$LICENSE view.'); + + $pmda->add_metric( + pmda_pmid(1,1), PM_TYPE_U32, $sid_indom, + PM_SEM_INSTANT, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.license.cursess', + 'Current number of concurrent user sessions', +'The current number of concurrent user sessions for the instance. +This value is obtained from the SESSIONS_CURRENT column of the +V$LICENSE view.'); + + $pmda->add_metric( + pmda_pmid(1,2), PM_TYPE_U32, $sid_indom, + PM_SEM_INSTANT, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.license.warnsess', + 'Warning limit for concurrent user sessions', +'The warning limit for concurrent user sessions for this instance. +This value is obtained from the SESSIONS_WARNING column of the +V$LICENSE view.'); + + $pmda->add_metric( + pmda_pmid(1,3), PM_TYPE_U32, $sid_indom, + PM_SEM_INSTANT, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.license.highsess', + 'Highest number of concurrent user sessions since instance started', +'The highest number of concurrent user sessions since the instance +started. This value is obtained from the SESSIONS_HIGHWATER column of +the V$LICENSE view.'); + + $pmda->add_metric(pmda_pmid(1,4), PM_TYPE_U32, $sid_indom, + PM_SEM_INSTANT, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.license.maxusers', + 'Maximum number of named users permitted', +'The maximum number of named users allowed for the database. This value +is obtained from the USERS_MAX column of the V$LICENSE view.'); +} + +sub setup_librarycache ## statistics from v$librarycache +{ + $pmda->add_metric(pmda_pmid(12,0), PM_TYPE_U32, $librarycache_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.librarycache.gets', + 'Number of lock requests for each namespace object', +'The number of times a lock was requested for objects of this +namespace. This value is obtained from the GETS column of the +V$LIBRARYCACHE view.'); + + $pmda->add_metric(pmda_pmid(12,1), PM_TYPE_U32, $librarycache_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.librarycache.gethits', + 'Number of times objects handle found in memory', +'The number of times an object\'s handle was found in memory. This value +is obtained from the GETHITS column of the V$LIBRARYCACHE view.'); + + $pmda->add_metric(pmda_pmid(12,2), PM_TYPE_FLOAT, $librarycache_indom, + PM_SEM_INSTANT, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.librarycache.gethitratio', + 'Ratio of gethits to hits', +'The ratio of GETHITS to HITS. This value is obtained from the +GETHITRATIO column of the V$LIBRARYCACHE view.'); + + $pmda->add_metric(pmda_pmid(12,3), PM_TYPE_U32, $librarycache_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.librarycache.pins', + 'Number of times a pin was requested for each namespace object', +'The number of times a PIN was requested for each object of the library +cache namespace. This value is obtained from the PINS column of the +V$LIBRARYCACHE view.'); + + $pmda->add_metric(pmda_pmid(12,4), PM_TYPE_U32, $librarycache_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.librarycache.pinhits', + 'Number of times all metadata found in memory', +'The number of times that all of the meta data pieces of the library +object were found in memory. This value is obtained from the PINHITS +column of the V$LIBRARYCACHE view.'); + + $pmda->add_metric(pmda_pmid(12,5), PM_TYPE_FLOAT, $librarycache_indom, + PM_SEM_INSTANT, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.librarycache.pinhitratio', 'Ratio of pins to pinhits', +'The ratio of PINS to PINHITS. This value is obtained from the +PINHITRATIO column of the V$LIBRARYCACHE view.'); + + $pmda->add_metric(pmda_pmid(12,6), PM_TYPE_U32, $librarycache_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.librarycache.reloads', 'Number of disk reloads required', +'Any PIN of an object that is not the first PIN performed since the +object handle was created, and which requires loading the object from +the disk. This value is obtained from the RELOADS column of the +V$LIBRARYCACHE view.'); + + $pmda->add_metric(pmda_pmid(12,7), PM_TYPE_U32, $librarycache_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.librarycache.invalidations', + 'Invalidations due to dependent object modifications', +'The total number of times objects in the library cache namespace were +marked invalid due to a dependent object having been modified. This +value is obtained from the INVALIDATIONS column of the V$LIBRARYCACHE +view.'); +} + +sub setup_latch ## latch statistics from v$latch +{ + $pmda->add_metric(pmda_pmid(2,0), PM_TYPE_U32, $latch_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.latch.gets', + 'Number of times obtained a wait', +'The number of times latch obtained a wait. These values are obtained +from the GETS column of the V$LATCH view.'); + + $pmda->add_metric(pmda_pmid(2,1), PM_TYPE_U32, $latch_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.latch.misses', + 'Number of times obtained a wait but failed on first try', +'The number of times obtained a wait but failed on the first try. These +values are obtained from the MISSES column of the V$LATCH view.'); + + $pmda->add_metric(pmda_pmid(2,2), PM_TYPE_U32, $latch_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.latch.sleeps', + 'Number of times slept when wanted a wait', +'The number of times slept when wanted a wait. These values are +obtained from the SLEEPS column of the V$LATCH view.'); + + $pmda->add_metric(pmda_pmid(2,3), PM_TYPE_U32, $latch_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.latch.imgets', + 'Number of times obtained without a wait', +'The number of times latch obtained without a wait. These values are +obtained from the IMMEDIATE_GETS column of the V$LATCH view.'); + + $pmda->add_metric(pmda_pmid(2,4), PM_TYPE_U32, $latch_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.latch.immisses', + 'Number of times failed to get latch without a wait', +'The number of times failed to get latch without a wait. These values +are obtained from the IMMEDIATE_MISSES column of the V$LATCH view.'); + + $pmda->add_metric(pmda_pmid(2,5), PM_TYPE_U32, $latch_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.latch.wakes', + 'Number of times a wait was awakened', +'The number of times a wait was awakened. These values are obtained +from the WAITERS_WOKEN column of the V$LATCH view.'); + + $pmda->add_metric(pmda_pmid(2,6), PM_TYPE_U32, $latch_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.latch.holds', + 'Number of waits while holding a different latch', +'The number of waits while holding a different latch. These values are +obtained from the WAITS_HOLDING_LATCH column of the V$LATCH view.'); + + $pmda->add_metric(pmda_pmid(2,7), PM_TYPE_U32, $latch_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.latch.spingets', + 'Gets that missed first try but succeeded on spin', +'Gets that missed first try but succeeded on spin. These values are +obtained from the SPIN_GETS column of the V$LATCH view.'); +} + +sub setup_backup ## file backup status from v$backup +{ + $pmda->add_metric(pmda_pmid(6,0), PM_TYPE_U32, $file_indom, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'oracle.backup.status', + 'Backup status of online datafiles', +'The Backup status of online datafiles. The status is encoded as an +ASCII character: + not active - ( 45) + active + ( 43) + offline o (111) + normal n (110) + error E ( 69) +This value is extracted from the STATUS column of the V$BACKUP view.'); +} + +sub setup_filestat ## file I/O statistics from v$filestat +{ + $pmda->add_metric(pmda_pmid(3,0), PM_TYPE_U32, $file_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.file.phyrds', + 'Physical reads from database files', +'The number of physical reads from each database file. These values +are obtained from the PHYRDS column in the V$FILESTAT view.'); + + $pmda->add_metric(pmda_pmid(3,1), PM_TYPE_U32, $file_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.file.phywrts', + 'Physical writes to database files', +'The number of times the DBWR process is required to write to each of +the database files. These values are obtained from the PHYWRTS column +in the V$FILESTAT view.'); + + $pmda->add_metric(pmda_pmid(3,2), PM_TYPE_U32, $file_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.file.phyblkrd', + 'Physical blocks read from database files', +'The number of physical blocks read from each database file. These +values are obtained from the PHYBLKRDS column in the V$FILESTAT view.'); + + $pmda->add_metric(pmda_pmid(3,3), PM_TYPE_U32, $file_indom, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'oracle.file.phyblkwrt', + 'Physical blocks written to database files', +'The number of physical blocks written to each database file. These +values are obtained from the PHYBLKWRT column in the V$FILESTAT view.'); + + $pmda->add_metric(pmda_pmid(3,4), PM_TYPE_U32, $file_indom, + PM_SEM_COUNTER, pmda_units(0,0,0,0,0,0), + 'oracle.file.readtim', + 'Time spent reading from database files', +'The number of milliseconds spent doing reads if the TIMED_STATISTICS +database parameter is true. If this parameter is false, then the +metric will have a value of zero. This value is obtained from the +READTIM column of the V$FILESTAT view.'); + + $pmda->add_metric(pmda_pmid(3,5), PM_TYPE_U32, $file_indom, + PM_SEM_COUNTER, pmda_units(0,0,0,0,0,0), + 'oracle.file.writetim', + 'Time spent writing to database files', +'The number of milliseconds spent doing writes if the TIMED_STATISTICS +database parameter is true. If this parameter is false, then the +metric will have a value of zero. This value is obtained from the +WRITETIM column of the V$FILESTAT view.'); +} + +$pmda = PCP::PMDA->new('oracle', 32); +oracle_metrics_setup(); +oracle_indoms_setup(); + +$pmda->set_fetch_callback(\&oracle_fetch_callback); +$pmda->set_fetch(\&oracle_connection_setup); +$pmda->set_refresh(\&oracle_refresh); +$pmda->set_user('oracle'); +$pmda->run; + +=pod + +=head1 NAME + +pmdaoracle - performance metrics domain agent for Oracle databases + +=head1 DESCRIPTION + +B<pmdaoracle> is a Performance Metrics Domain Agent (PMDA) that obtains +performance metrics from an Oracle database instance and makes them +available to users of the Performance Co-Pilot (PCP) monitor tools. + +B<pmdaoracle> retrieves information from the database by querying the +dynamic performance (V$...) views. +Queries are performed only when metrics are requested from the PMDA to +minimize impact on the database. + +B<pmdaoracle> can monitor multiple Oracle database instances. +If multiple database instances are to be monitored with PCP, each must +be configured during installation. + +The Performance Metrics Collector Daemon, B<pmcd> launches B<pmdaoracle>; +it should not be executed directly. See the installation section below +for instructions on how to configure and start the agent. + +=head1 INSTALLATION + +B<pmdaoracle> uses a configuration file from (in this order): + +=over + +=item * /etc/pcpdbi.conf + +=item * $PCP_PMDAS_DIR/oracle/oracle.conf + +=back + +This file can contain overridden values (Perl code) for the settings +listed at the start of pmdaoracle.pl, namely: + +=over + +=item * database name (see DBI(3) for details) + +=item * database user name + +=item * database pass word + +=back + +Once this is setup, you can access the names and values for the +oracle performance metrics by doing the following as root: + + # cd $PCP_PMDAS_DIR/oracle + # ./Install + +If you want to undo the installation, do the following as root: + + # cd $PCP_PMDAS_DIR/oracle + # ./Remove + +B<pmdaoracle> is launched by pmcd(1) and should never be executed +directly. The Install and Remove scripts notify pmcd(1) when +the agent is installed or removed. + +=head1 FILES + +=over + +=item /etc/pcpdbi.conf + +configuration file for all PCP database monitors + +=item $PCP_VAR_DIR/config/oracle/oracle.conf + +configuration file for B<pmdaoracle> + +=item $PCP_PMDAS_DIR/oracle/oracle.conf + +alternate configuration file for B<pmdaoracle> + +=item $PCP_PMDAS_DIR/oracle/Install + +installation script for the B<pmdaoracle> agent + +=item $PCP_PMDAS_DIR/oracle/Remove + +undo installation script for the B<pmdaoracle> agent + +=item $PCP_LOG_DIR/pmcd/oracle.log + +default log file for error messages from B<pmdaoracle> + +=back + +=head1 SEE ALSO + +pmcd(1), pmdadbping.pl(1) and DBI(3). |