NAME
Sparky::Public - support functions for Sparky data collector and profiler
SYNOPSIS
use Sparky::Public;
if ($line =~ /$datestamp/i) { ... }
$secs = $tim * SEC/TIM;
$time = waitfor($number);
$time = waitfor($string);
trcfilter($sid, $ost0, $ost1, $dbt0, $dbt1, $ofile, @ifiles);
$t = hstr2time($string);
$str = htime2str($fmt, $time, $digits);
checkenv(@envvars);
printf "%8s\n", fnum($text, $precision);
$min = min(@list);
$max = max(@list);
DESCRIPTION
$datestamp
-
$datestamp
is a regular expression that matches the date stamp that an Oracle session prints to its trace file. TIM
,SEC
-
TIM
is the number of Oracle clock ticks per second.SEC
is unity (the number of seconds per second). We provide SEC so that the programmer may refer naturally to SEC/TIM or TIM/SEC in code that requires unit conversions. waitfor
-
$time = waitfor($number); $time = waitfor($string);
waitfor() waits until a specified event occurs before returning control to its caller. The return value in all cases is the time (in seconds since the Epoch) at which control was returned to the caller. If its argument is undefined, then it returns control immediately to its caller.
If the argument to waitfor() is a whole number (matching the pattern /\d+/), then it is assumed to be a time (in seconds since the Epoch) at which control is to be returned to the caller. If
$number
represents a time in the past, then waitfor() returns control immediately to its caller.If the argument to waitfor() is defined but does not match the purely numeric pattern discussed previously, then the argument is assumed to be an interactive prompt. First, waitfor() will determine whether STDERR and STDIN are tty devices. If they are tty devices, then waitfor() will prompt STDERR with the interpolated string "Press a key$string..." and await a keypress on STDIN. Upon receiving a keypress, waitfor() will complete the prompt line by writing the keypress time followed by "\n" to STDERR. If STDERR and STDIN are not tty devices, then waitfor() will return immediately.
The waitfor() function is designed to simplify the specification of performance analysis observation intervals defined in real-time. This example shows how to use waitfor() to define an observation interval interactively:
# interactive style $t0 = waitfor(" to begin observation interval"); # take a snapshot $t1 = waitfor(" to end observation interval "); # take a snapshot printf "Observation interval duration: %.3f sec\n", $t1-$t0;
The resulting session will look like this:
Press a key to begin observation interval...(Thu Apr 5 16:36:19 2001) Press a key to end observation interval ...(Thu Apr 5 16:36:20 2001) Observation interval duration: 1.168 sec
The waitfor() function can also be used as an alternative to at(1) or cron(1M), which can be especialy helpful on systems without adequate scheduling facilities:
# batch style use Date::Parse; for (7..18) { my $t0 = scalar localtime str2time("$_:00"); waitfor(str2time($time)); ... }
The resulting session will take a snapshot every hour upon the hour from 7:00am through 6:00pm (07.00-18.00).
trcfilter
-
trcfilter($sid, $ost0, $ost1, $dbt0, $dbt1, $ofile, @ifiles);
<trcfilter> employs Hotsos research results to filter Oracle trace files created by event 10046 level 1, 4, 8, or 12. The input file filtration criterion is a time range, expressed as observation interval beginning and ending times on two separate clocks.
The first clock is the OS time clock, recorded in Epoch seconds and fractions of seconds.
$ost0
and$ost1
are interval beginning and end times, respectively. The second clock is the database time clock, as recorded inv$timer.hsecs
, and converted to seconds and fractions of seconds.$dbt0
and$dbt1
are the db clock times that correspond to$ost0
and$ost1
.trcfilter
equates the t0 times of these two clocks.$ofile
is the name of the file to which the filtered trace data will be written. The first file named in the@ifiles
list is the name of the input trace file to be filtered.$sid
is presently only a placeholder. In a future revision oftrcfilter
, this parameter will denote the id of the session whose trace data may be scattered across multiple input files by using Oracle's Multi-Threaded Server option (hence the reason that@ifiles
is a list, and not a scalar).trcfilter
passes the trace file preamble unaltered. For trace file lines that represent events that cross a time interval boundary,trcfilter
emits a line whose elapsed and CPU times (where applicable) are adjusted to reflect only the duration that exists within the specified observation interval.trcfilter
emits all "PARSING IN CURSOR" actions that occur before$ost0
(or, equivalently, before$dbt0
). It emits all "STAT" actions that occur after$ost1
($dbt1
). hstr2time
-
$t = hstr2time($string);
hstr2time
sits atop the Date::Parsestr2time
function call. If$string
has a fraction-of-a-second component,hstr2time
will preserve that information in its return value. htime2str
-
$str = htime2str($fmt, $time, $digits);
htime2str
sits atop the Date::Formattime2str
function call.$digits
is an integer defining the number of digits past the decimal point that should be included in the string return value. checkenv
-
checkenv(@envvars);
checkenv
tests to ensure that a list of OS environment variables are set. If one or more variables are unset, thencheckenv
will print a warning about each unset variable and then exit with a call todie
. fnum
-
printf "%8s\n", fnum($text, $precision);
fnum
returns$text
in a friendly format with commas as thousands separators, and with$precision
digits to the right of the decimal point. min
,max
-
$min = min(@list); $max = max(@list);
min
returns the numerically smallest element of a list, andmax
returns the numerically largest element of a list.
ENVIRONMENT
Many Sparky::Public modules require that $main::program
be set to the name of the calling executable program. It is usually set with $main::program = basename $0
.
If the value $main::opt{v}
is set, then many Sparky::Public functions will print verbose information.
AUTHOR
Cary Millsap, cary.millsap@hotsos.com.
SEE ALSO
perl(1).