diff --git a/BUILDING.md b/BUILDING.md index c7637136..59592012 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -3,7 +3,7 @@ ## Prerequisites * An Oracle client environment (release 19.9 or higher) used for building the tool; Instant Client including basiclite, sdk and sqlplus is fine. - * Potentially client environments for other releases than the primary build release, these can similarly use full client or Instant Client; releases 11, 12, 18, 19, 21 are supported. + * Potentially client environments for other releases than the primary build release, these can similarly use full client or Instant Client; releases 11, 12, 18, 19, 21, 23 are supported. * For client release 19, you must have at least 19.9. * A database (release 19 or higher, release 21.3 preferred) that can be used to run test scripts. * An environment with the gcc compiler and tools like make. diff --git a/CHANGELOG.md b/CHANGELOG.md index e16b989d..cf9b740b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ * Add normalrandom function returning normal distributed random numbers * Various improvements for connectionpool * Double values are assigned to integer using trunc +* Add statisticsonly attribue +* Default branch is now named "development" ## 3.0.5 diff --git a/README.md b/README.md index a184156b..b890e474 100644 --- a/README.md +++ b/README.md @@ -29,10 +29,13 @@ See [docs/INSTALL.md](docs/INSTALL.md) for details. ## Branches The branches that should be used by ordinary users are named after the release, e.g. 3.0.3. -The master branch is always the development branch and may as such contain intermediate code. -You should normally _not_ clone or checkout the master branch unless you are developing the -rwloadsim code or always want the latest. -If you use the master branch, you _must_ do compilation yourself; no binaries are released. +The branch named "development" is getting frequent commits +and may as such contain intermediate code. +The master branch receives occasional pull request from the development branch. +You should normally _not_ clone or checkout the development or master branch +unless you are developing the rwloadsim code or always want the latest. +If you use the development or master branch, you _must_ do compilation yourself; +no binaries are released. At present, branch 3.0.5 is the release branch. diff --git a/SECURITY.md b/SECURITY.md index fb238413..2ca81027 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -21,7 +21,7 @@ security features are welcome on GitHub Issues. Security updates will be released on a regular cadence. Many of our projects will typically release security fixes in conjunction with the -[Oracle Critical Patch Update][3] program. Additional +Oracle Critical Patch Update program. Additional information, including past advisories, is available on our [security alerts][4] page. diff --git a/admin/.vim/syntax/rwl.vim b/admin/.vim/syntax/rwl.vim index 23dd699f..c26cc301 100644 --- a/admin/.vim/syntax/rwl.vim +++ b/admin/.vim/syntax/rwl.vim @@ -22,7 +22,7 @@ syn keyword rwlKeyword abort function bindout between clob blob raw date ignoree syn keyword rwlKeyword getenv system opensessioncount activesessioncount serverrelease syn keyword rwlKeyword unsigned hexadecimal octal printf fprintf encode decode elseif syn keyword rwlKeyword connectionpool connectionclass sprintf global querynotification -syn keyword rwlKeyword normalrandom +syn keyword rwlKeyword normalrandom statisticsonly syn keyword rwlKeyword getrusage instr instrb regexextract nextgroup=rwlNumber skipwhite syn match rwlVariable "\$#" diff --git a/bin/mtitcore b/bin/mtitcore new file mode 100755 index 00000000..25d5cd7c --- /dev/null +++ b/bin/mtitcore @@ -0,0 +1,353 @@ +#!/bin/bash +# Copyright (c) 2023 Oracle Corporation +# Licensed under the Universal Permissive License v 1.0 +# as shown at https://oss.oracle.com/licenses/upl/ + +. oltp-setup-env + +# This is the core script that runs +# the Max Throughput Insert Test + +# Changes +# +# bengsig 10-may-2023 Creation + +# If stdin is not a tty +# show how we were called +tty -s || echo $0 $* + +options="i:d:bo:gGn:k:r:hHp:s:a2x:R:WK:t: -l integer:,double:,help,extraout:,runfile:,runnumberfile:,startseconds:,threadcount:,processcount:,key:,runperiod:,avoidtruncate,awrwait,awrkill:,qegraphs,graphs,no-awr,mtit-xc" +usage="$commandname [-h|H] [-g|-G] [-a] [-W] [-K n] [-n processes] [-t threads] [-k key] [-r runperiod] [-R runfile] [-p file] [-s file] [-o file] komment text ..." +runperiod=295 + +awrWait=no +awrKill=15 +extraout='' +mtitxc=no +doawr=1 + +procs=1 +runnumberfile=runnumber.txt +startsecondsfile=startseconds.txt +runfile=mtitrun.rwl +help=no +key='' +graphs=no +dotruncate=yes +killfile='' +extra_args='' + +unset RWLOLTP_SIDE + +getopt -Q -o $options -- "$@" || exit 1 +set -- `getopt -u -n $commandname -o $options -- "$@"` + +while test $1 != '--' +do + case $1 in + -i|--integer|-d|--double) extra_args="$extra_args $1 $2"; shift; shift; + ;; + -t|--threadcount) extra_args="$extra_args -i mtit_threads:=$2"; shift; shift; + ;; + -o|--extraout) extraout=$2; shift; shift; + ;; + -s|--startseconds) startsecondsfile=$2; shift; shift; + ;; + -R|--runfile) runfile=$2; shift; shift; + ;; + -x|--killfile) killfile=$2; shift; shift; + ;; + -p|--runnumberfile) runnumberfile=$2; shift; shift; + ;; + -n|--processcount) procs=$2; shift; shift; + ;; + -k|--key) key=$2; shift; shift; + ;; + -r|--runperiod) runperiod=$2; shift; shift; + ;; + -a|--avoidtruncate) dotruncate=no; shift; + ;; + -W|--awrwait) awrWait=yes; shift; + ;; + -K|--awrkill) awrKill=$2; shift; shift; + ;; + --no-awr) doawr=0; shift; + ;; + --mtit-xc) mtitxc=yes; shift; + ;; + -G|--qegraphs) graphs=qe; shift; + ;; + -g|--graphs) graphs=yes; shift; + ;; + -h|-H|--help) help=yes; shift; + ;; + ?) + exit 1 + ;; + esac; +done +shift +extrakomment="$*" + +if test x$help = xyes +then +echo "$usage" +cat < $killfile +fi + +if test x$key = x +then + echo key set to the default of $RWLOLTP_NAME + key=$RWLOLTP_NAME +fi + +if test $procs -lt 1 +then + echo -p $procs is too low 1>&2 + exit 1 +fi + +if test $procs -gt 8 +then + echo -p $procs is reduced to 8, use higher thread count to increase load 1>&2 + procs=8 +fi + +if test $runperiod -lt 30 +then + echo -r $runperiod is less than 30 seconds 1>&2 + exit 1 +fi + + +rwloadsim parameters.rwl || exit $? + +# Check parameters.rwl is silent +shouldbezero=`rwloadsim -q parameters.rwl | wc -c` +if test "$shouldbezero" -ne 0 +then + echo "output from 'rwloadsim parameters.rwl' must be empty. These lines found:" + rwloadsim -q parameters.rwl + exit 1 +fi + +# Set shell variables +eval `rwloadsim -q -i proccount:=$procs -i runperiod:=$runperiod parameters2shell.rwl` + +# verify that it compiles +rwloadsim -u -v $extra_args -e -- '-x $mute:141' $runfile || exit $? + +if test $mtitxc = yes +then + mtitxcset --key=$key --no-stopnow + mtitsetxc='-i mtit_xc:=1' + oltpsetxc='-i xc_enabled:=1' +else + mtitsetxc='' + oltpsetxc='' +fi + +# also allocate new partitions in orders and order_itmes +test $dotruncate = yes && rwloadsim -q mtit_truncate.rwl + +procnumber=1; + +# Rampup 5 seconds plus proccount * script_ramp +# is calculated in parameters2shell since bash +# cannot work with double + +prepfile=`mktemp` +trap "rm -f $prepfile" 0 int + +# Remove \ " and ' from komment, causes issues in gnuplot and probably other places +komment=`echo $RWLOLTP_NAME $rwl_title $extrakomment | sed 's/[\\"'"']//g"` + +# prepare the run; this will also create the $resultsdir/$subdir/$runnumber/env file +if test $mtitxc = yes +then + rwloadsim -u -v -c 15 -sss -P $prepfile -k $key -K "$komment" -q \ + --fulltitle="$komment" \ + -i runperiod:=$runperiod -i proccount:=$procs prepare.rwl + mute59='-x$mute:59' +else + rwloadsim -u -v -c $rampup -sss -P $prepfile -k $key -K "$komment" -q \ + --fulltitle="$komment" \ + -i runperiod:=$runperiod -i proccount:=$procs prepare.rwl + mute59='' +fi + +# cat $prepfile + + +# Get runnumber and variables from the env file +runnumber=`cut -f1 -d: $prepfile` +# get the subdirectory under resultsdir/awrdirectory +eval `rwloadsim -q -R $prepfile subdir.rwl` +. $resultsdir/$subdir/$runnumber/env + +sed 's/^.*.:\([0-9][0-9]*\)\..*$/\1/' $prepfile > $startsecondsfile +echo $runnumber > $runnumberfile + + +echo "runperiod=$runperiod" >> $resultsdir/$subdir/$runnumber/env +echo "komment='$komment'" >> $resultsdir/$subdir/$runnumber/env +#if test $pool_type = sessionpool -o $pool_type = connectionpool +#then +# echo "plotactive=yes" >> $resultsdir/$subdir/$runnumber/env +#else + echo "plotactive=no" >> $resultsdir/$subdir/$runnumber/env +#fi +# rwloadsim -q $mtitsetxc $extra_args -i runperiod:=$runperiod -i proccount:=$procs -i show_changed_values:=1 -x 'string key_to_show := "'$key'";' parameters.rwl > $resultsdir/$subdir/$runnumber/parmatstart.txt + +rwloadsim -q $mtitsetxc $extra_args --htmlformat -R $prepfile mtit_showparam.rwl > $resultsdir/$subdir/$runnumber/mtitplotinfo.html + +if test x$killfile != x +then + echo $! >> $killfile +fi + +markerfile='string(1000)xc_marker_file:="'$resultsdir/$subdir/$runnumber/markers.txt'";' +quiet='' + +# Start sys gather +rwloadsim $mute59 $oltpsetxc -u -A 1 -r -q -i procnumber:=99999 -i runperiod:=$runperiod -i proccount:=$procs -R $prepfile -i doawr:=$doawr runsys.rwl $starttime & +awrpid=$! + +if test x$killfile != x +then + echo $awrpid >> $killfile +fi + +# show countdown to user +echo -n '**** remaining:' +# Start the real workers +while test $procnumber -le $procs +do + sleep $script_ramp + echo -n " "`expr $procs - $procnumber` + rwloadsim $mute59 -u -r -i procnumber:=$procnumber \ + --flush-stop=$runperiod --flush-every=2 -v -i runperiod:=$runperiod \ + --procno $procnumber \ + -W -i doawr:=$doawr -x "$markerfile" $mtitsetxc $extra_args -i proccount:=$procs -R $prepfile $quiet $runfile & + quiet='-q' # only messages from first + procnumber=`expr $procnumber + 1` + if test x$killfile != x + then + echo $! >> $killfile + fi + +done +echo +echo '****' started all background jobs at `date` + +sleep 3 +# show running graph of dbcpu and dbtime +test $graphs != no && rwloadsim $oltpsetxc $extra_args -u -q -R $prepfile plotfigures.rwl -x 'string(128)pool_type:="dedicated";' -i runperiod:=$runperiod ';' $runnumber | gnuplot $RWLOLTP_GNUPLOT1 & + +# show running graph of throughput +test $graphs = yes && rwloadsim $mtitsetxc $extra_args -u -q -R $prepfile mtitplotrun.rwl -i runperiod:=$runperiod ';' $runnumber | gnuplot $RWLOLTP_GNUPLOT2 & + +# show running graph of queue/exec time +test $graphs = qe && rwloadsim $mtitsetxc $extra_args -u -q -R $prepfile mtitplotwe.rwl -i runperiod:=$runperiod ';' $runnumber | gnuplot $RWLOLTP_GNUPLOT2 & + +# with external control, we simply wait +if test $mtitxc = no +then + sleep $runperiod + echo '****' runperiod=$runperiod over at `date` + sleep `expr $rampup / 10 + 10` + echo '****' `expr $rampup / 10 + 10` extra seconds over at `date` + sleep 30 + echo '****' looking for still running processes at `date` + # we previousle were sleeping for 30 seconds more than runperiod plus + # rampup before killing, however, we already are delayed due to + # $script_ramp * $proccount sleeps in the loop above that starts + # the real workers. + # all jobs really ought to be terminated now + # show a list to the user + # jobs -lr + JOBS="$(jobs -pr | grep -v $awrpid)" + # send first kill except to the one doing awr and wait 30 seconds + if test -n "$JOBS" + then + echo sending first kill to $JOBS + ps -fp $JOBS + kill -s int $JOBS + sleep 30 + fi + + # again + # jobs -lr + JOBS="$(jobs -pr | grep -v $awrpid)" + if test -n "$JOBS" + then + echo sending second kill to $JOBS + ps -fp $JOBS + kill -s int $JOBS + sleep $awrKill + fi + + # again with term, also to the one doing awr + # jobs -lr + if test $awrWait = yes + then + JOBS="$(jobs -pr | grep -v $awrpid)" + else + JOBS="$(jobs -pr)" + fi + if test -n "$JOBS" + then + echo sending third kill to $JOBS + ps -fp $JOBS + kill $JOBS + fi +fi + +wait + +# If running without external control, or run finished without stopnow +#if test $mtitxc = no || mtitxcset | grep -q stopnow=0 +#then + + # copy the ash data from systemdb to results db + rwloadsim -u -A 2 -q ashstep2.rwl $runnumber $runperiod & + + # and make the awr reports + test $doawr -ne 0 && rwloadsim -u -A 1 -q makeawr.rwl $runnumber & + + wait + # Done, do the various graphs + + # This takes generated data in $resultsdir/$subdir/$runnumber as input + mtitplot --xcolor black $runnumber + +#else +# # just make the awr reports +# test $doawr -ne 0 && rwloadsim -u -A 1 -q makeawr.rwl $runnumber +# # and do the plot without showing stderr which is likely to +# # have lots of gnuplot errors due to missing data +# test $doawr -ne 0 && mtitplot $runnumber 2> /dev/null +#fi + +echo "run number $runnumber completed" diff --git a/bin/mtitcreate b/bin/mtitcreate new file mode 100755 index 00000000..196476a4 --- /dev/null +++ b/bin/mtitcreate @@ -0,0 +1,25 @@ +#!/bin/bash +# Copyright (c) 2021 Oracle Corporation +# Licensed under the Universal Permissive License v 1.0 +# as shown at https://oss.oracle.com/licenses/upl/ +# +# History +# +# bengsig 10-may-2023 Creation + +. oltp-setup-env + +if test x$1 = x-H -o x$1 = x--help +then + echo $commandname takes no arguments + exit +fi + +unset RWLOLTP_SIDE +eval `rwloadsim -q parameters2shell.rwl` + +sqlplus $rwl_aw1_username/$rwl_aw1_password@$normal_connect @mtit_create.sql +sqlplus $rwl_aw1_username/$rwl_aw1_password@$normal_connect @mtit_grant.sql $rwl_run1_username +sqlplus $rwl_aw1_username/$rwl_aw1_password@$normal_connect @mtit_grant.sql $rwl_run2_username +sqlplus $rwl_run1_username/$rwl_run1_password@$normal_connect @mtit_synonym.sql $rwl_aw1_username +sqlplus $rwl_run2_username/$rwl_run2_password@$normal_connect @mtit_synonym.sql $rwl_aw1_username diff --git a/bin/mtitdrop b/bin/mtitdrop new file mode 100755 index 00000000..66e441fc --- /dev/null +++ b/bin/mtitdrop @@ -0,0 +1,30 @@ +#!/bin/bash +# Copyright (c) 2021 Oracle Corporation +# Licensed under the Universal Permissive License v 1.0 +# as shown at https://oss.oracle.com/licenses/upl/ +# +# History +# +# bengsig 10-may-2023 Creation + +. oltp-setup-env + +if test x$1 = x-H +then + echo $commandname takes no arguments + exit +fi + +echo This will drop all objects used for the mtit workload. +printf 'Continue? (y/n) : ' +read x +if test x$x != xy +then + echo Not doing it + exit 1 +fi + +unset RWLOLTP_SIDE +eval `rwloadsim -q parameters2shell.rwl` + +sqlplus $rwl_aw1_username/$rwl_aw1_password@$normal_connect @mtit_drop.sql diff --git a/bin/mtitplot b/bin/mtitplot new file mode 100755 index 00000000..39ab43a2 --- /dev/null +++ b/bin/mtitplot @@ -0,0 +1,374 @@ +#!/bin/bash +# Copyright (c) 2021, 2023 Oracle Corporation +# Licensed under the Universal Permissive License v 1.0 +# as shown at https://oss.oracle.com/licenses/upl/ + +# Changes: +# +# bengsig 10-may-2023 Creation + +. oltp-setup-env + +options="-o lhHX:x:c: -l xfile:,Xfile:,latest,help,xmarker:,xline:,xcolor:" +usage="$commandname [-x|-X|--xmarker|--xline 'time text'] [--xfile|--Xfile filename] [--xcolor=rgbname] [-l|--latest|runnumber]" + +getopt -Q $options -- "$@" || exit 1 +options=$(getopt -n $commandname $options -- "$@") +eval set -- "$options" + +help=no +markerfile=`mktemp` +trap "rm -f $markerfile" 0 int +xcolor='' + +while test $1 != '--' +do + case $1 in + -x|--xmarker) echo m $2 >> $markerfile; shift; shift; + ;; + -X|--xline) echo l $2 >> $markerfile; shift; shift; + ;; + --xfile) cat $2 | while read x; do echo m $x; done >> $markerfile; shift; shift; + ;; + --Xfile) cat $2 | while read x; do echo l $x; done >> $markerfile; shift; shift; + ;; + -c|--xcolor) xcolor="--xcolor=$2" >> $markerfile; shift; shift; + ;; + -l|--latest) + runnumber=`rwloadsim latest.rwl` + echo latest runnumber is $runnumber + shift + ;; + -h|-H|--help) help=yes; shift; + ;; + ?) + exit 1 + ;; + esac; +done +shift + +if test $help = yes +then + cat <&2 + exit 1 +fi + + +eval `rwloadsim -q parameters2shell.rwl` +eval `rwloadsim -q -A 1 subdir.rwl $runnumber` + +# note that subdir always both starts and ends with '/' +# and that is has no blanks. +# Hence something like $resultsdir$subdir$runnumber +# will expand to a proper pathname + +if test ! -f $resultsdir$subdir$runnumber/env +then + echo $commandname: $resultsdir$subdir$runnumber does not exist or is not a proper results directory 1>&2 + exit 2 +fi + +. $resultsdir$subdir$runnumber/env + +if test -f $resultsdir$subdir$runnumber/markers.txt +then + cat $resultsdir$subdir$runnumber/markers.txt | + while read x + do + echo l $x + done >> $markerfile +fi + + +# Generate csv files and res.plot with headers +# for all other plots +if test -s $markerfile +then + cp $markerfile $resultsdir$subdir$runnumber/csvmarkers.input + rwloadsim -q -i runperiod:=$runperiod -i runno:=$runnumber \ + $xcolor --markerfile=$markerfile --starttime=$starttime \ + csvmtit.rwl || exit 1 +else + rwloadsim -q -i runperiod:=$runperiod -i runno:=$runnumber \ + --starttime=$starttime csvmtit.rwl || exit 1 +fi + +# csvmtit may have changed runperiod, so reread +. $resultsdir$subdir$runnumber/env + +xtics=60 +if test 0$runperiod -gt 600 +then + xtics=120 +fi +if test 0$runperiod -gt 1200 +then + xtics=300 +fi + +unset TERM + +cat >> $resultsdir$subdir$runnumber/header.plot << END + # This fixes the actual graph width + set lmargin at screen 0.1 + set rmargin at screen 0.9 +END + +cat $resultsdir$subdir$runnumber/header.plot >> $resultsdir$subdir$runnumber/res.plot + +cp $resultsdir$subdir$runnumber/header.plot $resultsdir$subdir${runnumber}/instdist.plot +# get various shell variables from csvmtit +. $resultsdir$subdir${runnumber}/csvmtitvars.sh + +# Plot instance distribution +if test x$plotactive = xno +then + cat >> $resultsdir$subdir${runnumber}/instdist.plot <> $resultsdir$subdir${runnumber}/instdist.plot <> $resultsdir$subdir${runnumber}/instdist.plot <> $resultsdir$subdir$runnumber/res.plot <> $resultsdir$subdir$runnumber/res.plot <> $resultsdir$subdir$runnumber/res.plot <> $resultsdir$subdir${runnumber}/tp.plot <> $resultsdir$subdir${runnumber}/ash.plot << END + set style fill solid noborder + set boxwidth 1 + set key bmargin horizontal + set yrange [0.5:*] + set ylabel 'session counts $ashnotice' + set title "$runnumber ash session counts $komment" + set xtics $xtics + set terminal png size imgwidth,480 + set output "$awrdirectory$subdir$runnumber/${runnumber}_ash.png" +END +cat $resultsdir$subdir${runnumber}/ashplotline.txt >> $resultsdir$subdir${runnumber}/ash.plot + +# we conditionally generate the ash in svg format as the file +# gets very large, typically around 3MB +if test x$largeashok = xyes +then + + cat >> $resultsdir$subdir${runnumber}/ash.plot << END + set terminal svg $svgmouse size imgwidth,480 $dynamic + set output "$awrdirectory$subdir$runnumber/${runnumber}_ash.svg" + replot +END + svgash="${runnumber}_ash.svg" + ashimg=${runnumber}_ash.svg +else + svgash="not created" + ashimg=${runnumber}_ash.png +fi +if test $ashcsvcount -gt 0 +then + gnuplot $resultsdir$subdir${runnumber}/ash.plot +fi + +xtraawrs=`cat $resultsdir$subdir${runnumber}/xtraawrs.txt` + +# write a table with links to all details +cat < $awrdirectory$subdir$runnumber/index.html + +

All details for $proccount processes $komment at $rundate

+ + $xtraawrs + + + +END +if test $ashcsvcount -gt 0 +then + cat <> $awrdirectory$subdir$runnumber/index.html + +END +fi +echo '
Awr report(s)${runnumber}_awr.html
Database cpu and time${runnumber}.svg${runnumber}.png
Sessions and instances${runnumber}_instdist.svg${runnumber}_instdist.png
Throughput${runnumber}_tp.svg${runnumber}_tp.png
Ash data$svgash${runnumber}_ash.png
' >> $awrdirectory$subdir$runnumber/index.html + +if test -f $resultsdir$subdir$runnumber/mtitplotinfo.html +then + echo '

Parameters at start of run:

' >> $awrdirectory$subdir$runnumber/index.html + cat $resultsdir$subdir$runnumber/mtitplotinfo.html >> $awrdirectory$subdir$runnumber/index.html +fi + +#if test -f $resultsdir$subdir$runnumber/parmatstart.txt +#then +# echo '

Parameters at start of run:

' >> $awrdirectory$subdir$runnumber/index.html +# cat $resultsdir$subdir$runnumber/parmatstart.txt | while read x +# do +# echo "$x" '
' +# done >> $awrdirectory$subdir$runnumber/index.html +#else +# echo '

Parameters at end of run:

' >> $awrdirectory$subdir$runnumber/index.html +# rwloadsim -q -i proccount:=$proccount -i show_changed_values:=1 parameters.rwl | while read x +# do +# echo "$x" '
' +# done >> $awrdirectory$subdir$runnumber/index.html +#fi +#echo "proccount=$proccount" >> $awrdirectory$subdir$runnumber/index.html + +cat <> $awrdirectory$subdir$runnumber/index.html +

Plots for $komment at $rundate

+
+
+END + +if test $ashcsvcount -gt 0 +then + echo '
' >> $awrdirectory$subdir$runnumber/index.html +fi + +cat <> $awrdirectory$subdir$runnumber/index.html +
+END + diff --git a/bin/mtitxcrun b/bin/mtitxcrun new file mode 100755 index 00000000..e677e82f --- /dev/null +++ b/bin/mtitxcrun @@ -0,0 +1,103 @@ +#!/bin/bash +# Copyright (c) 2021 Oracle Corporation +# Licensed under the Universal Permissive License v 1.0 +# as shown at https://oss.oracle.com/licenses/upl/ + +# Make continouous runs with external control +# +# Changes +# +# bengsig 10-may-2023 Creation + +. oltp-setup-env + +options="i:d:gGk:HaR:hHr:n:t: -l help,threadcount:,processcount:,key:,integer:,double:runperiod:,no-default,default,no-awr" +usage="$commandname [-H] [-g|-G] [-a] [-n|--processcount n] [--default] [--no-awr] [-k|--key key] [-R file] [-r runperiod] [komment text ...]" + +help=no +key="$RWLOLTP_NAME" +hostname=`hostname` + +getopt -Q -o $options -- "$@" || exit 1 +set -- `getopt -u -n $commandname -o $options -- "$@"` + +copyargs='' +myproccount='' +help=no +key=$RWLOLTP_NAME +hostname=`hostname` +runperiod=3590 # just under 1h +default=no + +while test $1 != '--' +do + case $1 in + -t|--threadcount|-i|--integer|-d|--double|-K|-R) copyargs="$copyargs $1 $2"; shift; shift; + ;; + -n|--processcount) myproccount=$2; shift; shift; + ;; + --default) default=yes; shift; + ;; + --no-default) default=no; shift; + ;; + -r|--runperiod) runperiod=$2; shift; shift; + ;; + -k|--key) key=$2; shift; shift; + ;; + --no-awr) copyargs="$copyargs --no-awr"; shift; + ;; + -W|-a|-g|-G) copyargs="$copyargs $1"; shift; + ;; + -H|--help|-h ) help=yes; shift; + ;; + esac; +done +shift +komment="$*" + +if test x$help = xyes +then +echo "$usage" +cat <&2 +fi + +if test x$mtittype != x +then + rwloadsim -q xcchange.rwl --myhost=$hostname --mykey=$key --mtittype=$mtittype; +fi + +if test x$rowspins != x +then + rwloadsim -q xcchange.rwl --myhost=$hostname --mykey=$key --rowspins=$rowspins; +fi + +if test x$arraysize != x +then + rwloadsim -q xcchange.rwl --myhost=$hostname --mykey=$key --myarraysize=$arraysize; +fi + +if test x$affinity != x +then + rwloadsim -q xcchange.rwl --myhost=$hostname --mykey=$key --affinity=$affinity; +fi + +if test x$proccount != x +then + rwloadsim -q xcchange.rwl --myhost=$hostname --mykey=$key --myproccount=$proccount; +fi + +if test x$stopnow != x +then + rwloadsim -q xcchange.rwl --myhost=$hostname --mykey=$key --stopnow=$stopnow; +fi + +if test x$default = xyes +then + rwloadsim -q xcdefault.rwl --myhost=$hostname --mykey=$key +fi + +if test x$showsettings = xyes +then + rwloadsim -u xcvalues.rwl --myhost=$hostname --mykey=$key --mtit +fi diff --git a/bin/oltpcore b/bin/oltpcore index 795e2565..731eeead 100755 --- a/bin/oltpcore +++ b/bin/oltpcore @@ -11,6 +11,7 @@ # Changes # +# bengsig 9-may-2023 - --oltp-xc option to turn on external control # bengsig 30-mar-2023 - qegraphs # bengsig 21-mar-2023 - Connection pool # bengsig 15-feb-2023 - show actual key @@ -25,7 +26,7 @@ # show how we were called tty -s || echo $0 $* -options="i:d:bo:gGn:k:r:hHp:s:a2x:R:WK: -l integer:,double:,xc_run_dedicated,simulatebatch,help,extraout:,runfile:,runnumberfile:,startseconds:,processcount:,key:,runperiod:,preallocate,awrwait,awrkill:,qegraphs,graphs,no-awr" +options="i:d:bo:gGn:k:r:hHp:s:a2x:R:WK: -l integer:,double:,xc_run_dedicated,simulatebatch,help,extraout:,runfile:,runnumberfile:,startseconds:,processcount:,key:,runperiod:,preallocate,awrwait,awrkill:,qegraphs,graphs,no-awr,oltp-xc,xc-run-dedicated" usage="$commandname [-h|H] [-g|-G] [-a] [-W] [-K n] [-n processes] [-k key] [-r runperiod] [-R runfile] [-p file] [-s file] [-o file] komment text ..." runperiod=295 @@ -33,6 +34,7 @@ awrWait=no awrKill=15 extraout='' doawr=1 +oltpxc=no procs=1 runnumberfile=runnumber.txt @@ -71,7 +73,7 @@ do ;; -k|--key) key=$2; shift; shift; ;; - --xc_run_dedicated) xc_run_dedicated=1 ; shift; + --xc_run_dedicated|--xc-run-dedicated) xc_run_dedicated=1 ; shift; ;; -b|--simulatebatch) simulatebatch=1; shift; ;; @@ -87,6 +89,8 @@ do ;; --no-awr) doawr=0; shift; ;; + --oltp-xc) oltpxc=yes; shift; + ;; -G|--qegraphs) graphs=qe; shift; ;; -g|--graphs) graphs=yes; shift; @@ -117,7 +121,8 @@ cat < $resultsdir/$subdir/$runnumber/parmatstart.txt # Start ping gather and also ask for event notification -rwloadsim $mute59 -u -E -q -R $prepfile -i simulatebatch:=$simulatebatch -i runperiod:=$runperiod runping.rwl & +rwloadsim $oltpsetxc $mute59 -u -E -q -R $prepfile -i simulatebatch:=$simulatebatch -i runperiod:=$runperiod runping.rwl & if test x$killfile != x then @@ -242,7 +250,7 @@ fi quiet='' # Start sys gather -rwloadsim $mute59 -u -A 1 -r -q -i procnumber:=99999 -i simulatebatch:=$simulatebatch -i runperiod:=$runperiod -i proccount:=$procs -R $prepfile -i doawr:=$doawr runsys.rwl $starttime & +rwloadsim $mute59 $oltpsetxc -u -A 1 -r -q -i procnumber:=99999 -i simulatebatch:=$simulatebatch -i runperiod:=$runperiod -i proccount:=$procs -R $prepfile -i doawr:=$doawr runsys.rwl $starttime & awrpid=$! if test x$killfile != x @@ -265,7 +273,7 @@ do echo -n " "`expr $procs - $procnumber` rwloadsim $mute59 -u -r -i simulatebatch:=$simulatebatch -i procnumber:=$procnumber \ --flush-stop=$runperiod --flush-every=2 -v -i runperiod:=$runperiod \ - -W -i xc_run_dedicated:=$xc_run_dedicated -i doawr:=$doawr $extra_args -i proccount:=$procs -R $prepfile $quiet $runfile & + -W -i xc_run_dedicated:=$xc_run_dedicated -i doawr:=$doawr $oltpsetxc $extra_args -i proccount:=$procs -R $prepfile $quiet $runfile & quiet='-q' # only messages from first procnumber=`expr $procnumber + 1` if test x$killfile != x @@ -279,16 +287,16 @@ echo '****' started all background jobs at `date` sleep 3 # show running graph of dbcpu and dbtime -test $graphs != no && rwloadsim -u -q -R $prepfile plotfigures.rwl -i runperiod:=$runperiod ';' $runnumber | gnuplot $RWLOLTP_GNUPLOT1 & +test $graphs != no && rwloadsim $oltpsetxc -u -q -R $prepfile plotfigures.rwl -i runperiod:=$runperiod ';' $runnumber | gnuplot $RWLOLTP_GNUPLOT1 & # show running graph of throughput -test $graphs = yes && rwloadsim -u -q -R $prepfile plotruntp.rwl -i runperiod:=$runperiod ';' $runnumber | gnuplot $RWLOLTP_GNUPLOT2 & +test $graphs = yes && rwloadsim $oltpsetxc -u -q -R $prepfile plotruntp.rwl -i runperiod:=$runperiod ';' $runnumber | gnuplot $RWLOLTP_GNUPLOT2 & # show running graph of queue/exec time -test $graphs = qe && rwloadsim -u -q -R $prepfile plotrunwetim.rwl -i runperiod:=$runperiod ';' $runnumber | gnuplot $RWLOLTP_GNUPLOT2 & +test $graphs = qe && rwloadsim $oltpsetxc -u -q -R $prepfile plotrunwetim.rwl -i runperiod:=$runperiod ';' $runnumber | gnuplot $RWLOLTP_GNUPLOT2 & # with external control, we simply wait -if test $xc_enabled = 0 +if test $oltpxc = no then sleep $runperiod echo '****' runperiod=$runperiod over at `date` @@ -343,7 +351,7 @@ fi wait # If running without external control, or run finished without stopnow -if test $xc_enabled = 0 || oltpxcset | grep -q stopnow=0 +if test $oltpxc = no || oltpxcset | grep -q stopnow=0 then # copy the ash data from systemdb to results db diff --git a/bin/oltpforever b/bin/oltpforever index 7607706e..cbcb986c 100755 --- a/bin/oltpforever +++ b/bin/oltpforever @@ -59,7 +59,7 @@ then fi -echo Workload started on `date` from `tty` > $runfile +echo Workload started on `date` from `tty` on `hostname` > $runfile # this is the normal runtime settings runtime=3590 # just under 1h diff --git a/bin/oltpplot b/bin/oltpplot index 3bcd5591..e7bea762 100755 --- a/bin/oltpplot +++ b/bin/oltpplot @@ -435,11 +435,18 @@ END # For the full/lemans types, the primary plot has # througput and dbtime +if test $showfail = yes +then + failline=" '$resultsdir$subdir${runnumber}/tps.csv' using 1:12 with lines lw $lw lc rgb 'pink' axes x1y2 title 'dropped', " +else + failline=' ' +fi + cat >> $resultsdir$subdir$runnumber/res.plot < - + @@ -311,7 +311,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/atclause.html b/docs/refman/atclause.html index df83537b..30f61f05 100644 --- a/docs/refman/atclause.html +++ b/docs/refman/atclause.html @@ -1,5 +1,5 @@ - + @@ -184,7 +184,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/awrdump.html b/docs/refman/awrdump.html index 076ea652..8608753b 100644 --- a/docs/refman/awrdump.html +++ b/docs/refman/awrdump.html @@ -1,5 +1,5 @@ - + @@ -289,7 +289,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/awrreport.html b/docs/refman/awrreport.html index eb9fcabd..7ee23c9c 100644 --- a/docs/refman/awrreport.html +++ b/docs/refman/awrreport.html @@ -1,5 +1,5 @@ - + @@ -259,7 +259,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/bengsig.html b/docs/refman/bengsig.html index 3f4d6dee..82c9a978 100644 --- a/docs/refman/bengsig.html +++ b/docs/refman/bengsig.html @@ -1,5 +1,5 @@ - + @@ -97,7 +97,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/compoundstatement.html b/docs/refman/compoundstatement.html index 30ea75ea..5f1f0334 100644 --- a/docs/refman/compoundstatement.html +++ b/docs/refman/compoundstatement.html @@ -1,5 +1,5 @@ - + @@ -181,7 +181,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/conditional.html b/docs/refman/conditional.html index 67685179..d201cc3a 100644 --- a/docs/refman/conditional.html +++ b/docs/refman/conditional.html @@ -1,5 +1,5 @@ - + @@ -168,7 +168,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/connping.html b/docs/refman/connping.html index 27494852..f75232f9 100644 --- a/docs/refman/connping.html +++ b/docs/refman/connping.html @@ -1,5 +1,5 @@ - + @@ -145,8 +145,8 @@

USAGE it will show the three times mentioned in addition to session id and instance number until the run period is over and at the end, show averages, standard deviation, min and -max values. You can kill execution prematurely by typing -ctrl-c.

+max values. The time output is in ms. You can kill execution +prematurely by typing ctrl-c.

EXAMPLE @@ -203,7 +203,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/controlloop.html b/docs/refman/controlloop.html index ef6bad31..75505f9d 100644 --- a/docs/refman/controlloop.html +++ b/docs/refman/controlloop.html @@ -1,5 +1,5 @@ - + @@ -241,13 +241,44 @@

EXAMPLE subsequent calls will be delayed although still 10s between each.

+

This third +example shows how a procedure marked with the statisticsonly +attribute can be used to count failures when simulating a +real queueing system with a time out.

+ +

procedure +doit_failed() statisticsonly
+# do nothing except counting executions
+null;
+end;

+ +

for queue every +erlang2(0.1) stop 300 loop
+if runseconds() > everyuntil+1.0 then
+# if we are more than 1 second late, this is a failure
+doit_failed();
+else
+# only do the actual work when there is no time out
+doit() at mydb;
+end if;
+end loop;

+ +

The +doit_failed() procedure will not attempt getting a database +session and will not actually do any work, so when the time +out happens (current time more than one second after the +expected start time), rather than calling the real +procedure, which would both need to get a database sesssion +and to execute some actual SQL, a simple count of the time +outs will happen.

+

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

@@ -258,7 +289,7 @@

SEE ALSO

threadexecution(1rwl), -statement(1rwl), expression(1rwl)

+statement(1rwl), expression(1rwl), controlloop(1rwl)


diff --git a/docs/refman/database.html b/docs/refman/database.html index 46fd50b6..cc09bb93 100644 --- a/docs/refman/database.html +++ b/docs/refman/database.html @@ -1,5 +1,5 @@ - + @@ -92,7 +92,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/databasedeclaration.html b/docs/refman/databasedeclaration.html index 162e9ede..afc63dbc 100644 --- a/docs/refman/databasedeclaration.html +++ b/docs/refman/databasedeclaration.html @@ -1,5 +1,5 @@ - + @@ -65,13 +65,12 @@

SYNTAX | [ threads ] dedicated [ requestmark | statemark ]
| cursorcache expression
-| sessionpool expression [ .. expression ] -
+| sessionpool expression [ .. expression ] [ +release expression ]
| connectionclass concatenation
| connectionpool expression [ .. expression ] -
-| connect connectionpool identifier
-| release expression

+[ release expression ]
+| connect connectionpool identifier

DESCRIPTION @@ -249,6 +248,13 @@

ATTRIBUTES Java does not have the counterpart of an OCIConnectionPool.

+

release +value

+ +

For a pool, set the timeout +value for idle sessions (OCI_ATTR_SPOOL_TIMEOUT) or +connections (OCI_ATTR_CONN_TIMEOUT); the default is 60s.

+

connect connectionpool identifier

@@ -257,13 +263,6 @@

ATTRIBUTES an ordinary connect string, use the named connection pool.

-

release -value

- -

For a pool, set the timeout -value for idle sessions (OCI_ATTR_SPOOL_TIMEOUT) or -connections (OCI_ATTR_CONN_TIMEOUT); the default is 60s.

-

connectionclass string

@@ -314,7 +313,7 @@

USAGE

If you have a default database declared as anything but dedicated, you need to wrap transactions in your main program with -execute and end.

+execute and end.

The RWP*Load Simulator uses several methods to prevent database @@ -351,7 +350,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/databasestatement.html b/docs/refman/databasestatement.html index 309590ed..a949d2f4 100644 --- a/docs/refman/databasestatement.html +++ b/docs/refman/databasestatement.html @@ -1,5 +1,5 @@ - + @@ -204,7 +204,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/declaration.html b/docs/refman/declaration.html index f6a74bd4..e6fe195a 100644 --- a/docs/refman/declaration.html +++ b/docs/refman/declaration.html @@ -1,5 +1,5 @@ - + @@ -81,7 +81,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/directive.html b/docs/refman/directive.html index d9638144..17b68c46 100644 --- a/docs/refman/directive.html +++ b/docs/refman/directive.html @@ -1,5 +1,5 @@ - + @@ -493,7 +493,36 @@

DIRECTIVES $queueeverytiming:on directive, this time is included in the waiting time. The waiting time therefore more correctly represent the waiting time that an emulated end -user whould have seen.

+user whould have seen. This is also the case if your +database is dedicated where some execution inside a control +loop starts after the calculated time.

+ + +

$musymbol:<text>

+ +

When using the m or +M conversion specifier in a printf statement, the +µ symbol is by default output as its UTF-8 +representation. This directive can be used to set any other +text string, including potentially other characters outside +the ASCII character set. There is no escape processing, so +you must be able to enter the appropriate value using and +editor.

+ + +

$hostname:<text>

+ +

Set a value for the hostname +rather than getting it from the Operating System; only +letters a-z or A-Z, numerals, hyphen, period and underscore +are allowed, and the initial character cannot be hyphen or +dot. The hostname is exposed in the variable of the same +name and is being inserted into the rwlrun table when +statistics are gathered.

+ +

The directive +is only available in a start-up file such as +~/.rwloadsim.rwl.

$useroption:name diff --git a/docs/refman/double.html b/docs/refman/double.html index b35b2dc2..e79da93b 100644 --- a/docs/refman/double.html +++ b/docs/refman/double.html @@ -1,5 +1,5 @@ - + @@ -59,7 +59,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/expression.html b/docs/refman/expression.html index 51a325d0..2aaeb3ed 100644 --- a/docs/refman/expression.html +++ b/docs/refman/expression.html @@ -1,5 +1,5 @@ - + @@ -27,7 +27,7 @@

expression

OPERATORS
FUNCTIONS
EXAMPLES
-NOTE
+NOTES
BUGS
COPYRIGHT
SEE ALSO
@@ -64,6 +64,8 @@

SYNTAX )
| erlangk ( expression , expression )
+| normalrandom ( expression , expression +)
| ( sqrt | round ) ( expression )
| ( exp | log ) ( [ expression @@ -78,6 +80,7 @@

SYNTAX ( identifier )
| ( serverrelease ) ( identifier | default | results )
+| ( runseconds | epochseconds ) ()
| getenv ( expression )
| system ( concatenation [ , identifier ] )
@@ -196,6 +199,11 @@

DESCRIPTION Therefore a:=1.0/2 will assign the double value 0.5 to a. The same rules apply to numeric comparisons.

+

If a double +result is assigned to an integer variable or used in another +context where an integer is expected, the standard function +trunc(3) is applied to the double value.

+

Strings are implicitly converted to integer or double without error handling similar to how atoi(3) or atof(3) do it. If @@ -505,24 +513,34 @@

FUNCTIONS

Return a random value with an average of a using an erlang k distribution. Only the integer part of k is used.

+ + +

normalrandom(a,s)

+ +

Return a normal distributed +random value with an average of a and a standard deviation +of s.

+ + - - + - - +
+

sqrt(a)

Return the square root of the argument.

+

round(a)

@@ -613,6 +631,32 @@

FUNCTIONS five element release of that database as a string in the format a.b.c.d.e.

+ + + + + + +
+ + +

runseconds()

+ + +

A double function taking no arguments, which returns the +time-stamp with microsecond resolution since the common +start time of all control loops in threads. It is available +in both the main and worker threads, and the value can be +negative.

+ +

epochseconds()

+ +

A double function taking no +arguments, which returns the UNIX epoch in seconds. The +resolution is normally microseconds, but it depends on the +resolution of the gettimeofday(2) system call.

+ @@ -707,8 +751,8 @@

EXAMPLES value of a, then a :, then the value of d.
printline a ":" d;

-

NOTE - +

NOTES +

@@ -733,6 +777,12 @@

NOTE

or alternatively simply omit the parenthesis.

+

For legacy +reasons, you can write runsecons and +epochseconds without the empty set of parantheses; +this usage is deprecated and will be desuported in some +future release.

+

BUGS

@@ -750,7 +800,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/filestatement.html b/docs/refman/filestatement.html index 4c1b5a7e..bcd821d7 100644 --- a/docs/refman/filestatement.html +++ b/docs/refman/filestatement.html @@ -1,5 +1,5 @@ - + @@ -148,8 +148,10 @@

USAGE environment expansion of $NAME or ${NAME} is done similar to how it is done in the shell, unless the --no-nameexpand option or the $namexpand:off -directive is in effect. This is not done for pipelines, -although the popen call is likely to do it.

+directive is in effect. You can also use $n where n is a +single digit beteen 1 and 9 to expand the value of a +positional argument to rwloadsim. This is not done for +pipelines, although the popen call is likely to do it.

If the concatenation is null the file will be closed or the @@ -316,7 +318,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/histogram.html b/docs/refman/histogram.html index 723cc3c8..9c762849 100644 --- a/docs/refman/histogram.html +++ b/docs/refman/histogram.html @@ -1,5 +1,5 @@ - + @@ -153,7 +153,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/identifier.html b/docs/refman/identifier.html index ceef0073..a5b92451 100644 --- a/docs/refman/identifier.html +++ b/docs/refman/identifier.html @@ -1,5 +1,5 @@ - + @@ -153,20 +153,6 @@

PREDEFINED VARIABLES

- - - - - - - - - -
-

runseconds

- - -

A double variable, which returns the time-stamp with -microsecond resolution since the common start time of all -control loops in threads. It is available in both the main -and worker threads, and the value can be negative.

- -

usrseconds

@@ -191,20 +177,6 @@

PREDEFINED VARIABLES

-

epochseconds

- - -

A double variable, which returns the UNIX epoch in -seconds. The resolution is normally microseconds, but it -depends on the resolution of the gettimeofday(2) system -call.

- -

oraerror

@@ -313,13 +285,12 @@

NOTES

-

Both -runseconds and epochseconds behave as read -only variables, but they are syntactically function calls. -They can therefore not be used to do SQL bind. If preferred, -you can use the syntax runseconds() or -epochseconds() in your code to clearly identify them -as function calls.

+

You can write +runseconds and epochseconds as if these two +were variables containing the same values as the functions +of the same name; this is deprecated and will be desupported +in some future release. Since they really are functions, +they cannot be used to do SQL bind.

COPYRIGHT @@ -327,7 +298,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/include.html b/docs/refman/include.html index 82677d7e..ee96e4c8 100644 --- a/docs/refman/include.html +++ b/docs/refman/include.html @@ -1,5 +1,5 @@ - + @@ -74,7 +74,9 @@

DESCRIPTION $include directive. Unless -no-nameexpand option or the $nameexpand:off directive is used, environment names in either $NAME or ${NAME} syntax will be expanded before -opening the include file.

+opening the include file. You can also use $n where n is a +single digit beteen 1 and 9 to expand the value of a +positional argument to rwloadsim.

If the filename is embedded within the characters < and > instead of @@ -145,7 +147,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/integer.html b/docs/refman/integer.html index bf92ae9c..a54a9342 100644 --- a/docs/refman/integer.html +++ b/docs/refman/integer.html @@ -1,5 +1,5 @@ - + @@ -60,7 +60,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/lob.html b/docs/refman/lob.html index 1d42770e..e1cd3c89 100644 --- a/docs/refman/lob.html +++ b/docs/refman/lob.html @@ -1,5 +1,5 @@ - + @@ -46,7 +46,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/lobdeclaration.html b/docs/refman/lobdeclaration.html index ca16eacc..400887de 100644 --- a/docs/refman/lobdeclaration.html +++ b/docs/refman/lobdeclaration.html @@ -1,5 +1,5 @@ - + @@ -119,7 +119,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/multiprocess.html b/docs/refman/multiprocess.html index 83382756..348bc59e 100644 --- a/docs/refman/multiprocess.html +++ b/docs/refman/multiprocess.html @@ -1,5 +1,5 @@ - + @@ -167,7 +167,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/nettest.html b/docs/refman/nettest.html index 802c054d..183a43e7 100644 --- a/docs/refman/nettest.html +++ b/docs/refman/nettest.html @@ -1,5 +1,5 @@ - + @@ -51,7 +51,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/netthroughput.html b/docs/refman/netthroughput.html index e795eca7..bdb18a5f 100644 --- a/docs/refman/netthroughput.html +++ b/docs/refman/netthroughput.html @@ -1,5 +1,5 @@ - + @@ -292,7 +292,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/ociping.html b/docs/refman/ociping.html index af5cf671..35c3613f 100644 --- a/docs/refman/ociping.html +++ b/docs/refman/ociping.html @@ -1,5 +1,5 @@ - + @@ -143,8 +143,8 @@

USAGE it will show timestamp (unless --no-timestamp is provided) and the time to perform an OCIPing until the run period is over, and at the end show averages, standard deviation, min -and max values. You can kill execution prematurely by typing -ctrl-c.

+and max values. The output is in ms. You can kill execution +prematurely by typing ctrl-c.

EXAMPLE @@ -170,7 +170,8 @@

EXAMPLE 0.051 7.0
0.064 8.0
0.048 9.0
-ociping mean=0.066, stddev=0.043, min=0.048, max=0.196

+ociping (ms) mean=0.066, stddev=0.043, min=0.048, +max=0.196

You could subsequently plot the results using gnuplot with an input @@ -200,7 +201,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/oerstats.html b/docs/refman/oerstats.html index 405cb810..ff53fe80 100644 --- a/docs/refman/oerstats.html +++ b/docs/refman/oerstats.html @@ -1,5 +1,5 @@ - + @@ -128,7 +128,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/oltp.html b/docs/refman/oltp.html index 9c0bb664..5d9b19c7 100644 --- a/docs/refman/oltp.html +++ b/docs/refman/oltp.html @@ -1,5 +1,5 @@ - + @@ -263,7 +263,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/oltpawcols.html b/docs/refman/oltpawcols.html index ff23853a..4e0ed472 100644 --- a/docs/refman/oltpawcols.html +++ b/docs/refman/oltpawcols.html @@ -1,5 +1,5 @@ - + @@ -63,7 +63,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/oltpcheckkey.html b/docs/refman/oltpcheckkey.html index 708a6fa6..300068e6 100644 --- a/docs/refman/oltpcheckkey.html +++ b/docs/refman/oltpcheckkey.html @@ -1,5 +1,5 @@ - + @@ -55,8 +55,9 @@

USAGE oltpcheckkey command that take one or more keys as arguments and runs a query to see if these keys already exist in the repository from runs made from the same host. -If they do, the latest entry with that key will be -shown.

+If they do, the latest entry with that key will be shown, +and the command exits with the exit code 1. If not, the exit +code will be 0.

You typically use this before running oltpscale which requires a @@ -68,7 +69,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/oltpcore.html b/docs/refman/oltpcore.html index 1c14545b..b71929dc 100644 --- a/docs/refman/oltpcore.html +++ b/docs/refman/oltpcore.html @@ -1,5 +1,5 @@ - + @@ -44,7 +44,7 @@

SYNOPSIS

-

[-H] [-g] +

[-H] [-g|-G] [-a] [-n processes] [-k key] [-r runperiod] [-b] [-R runfile] [-W] [-K nn] [-p file] [-s file] [-o file] komment text ...

@@ -102,7 +102,7 @@

OPTIONS

In stead of the normal simulation of an average arrival rate, run everything in a -busy loop without any waiting/queueing taking place. You +busy loop without any waiting/queuing taking place. You typically do this with much fewer threads (and/or processes) as each thread in each process constantly will be executing emulated business transactions.

@@ -116,11 +116,12 @@

OPTIONS acquired and released.

-

-g|--graphs

+

-g|--graphs|-G|--qegraphs

Show graphs during the run using gnuplot’s output to X-Windows. This requires a -properly set DISPLAY environment variable.

+properly set DISPLAY environment variable. The two latter +options causes an alternative graph; see oltprun(2rwl).

-p|--runnumberfile @@ -236,7 +237,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/oltpcreate.html b/docs/refman/oltpcreate.html index 5605090f..0c9881ce 100644 --- a/docs/refman/oltpcreate.html +++ b/docs/refman/oltpcreate.html @@ -1,5 +1,5 @@ - + @@ -62,7 +62,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/oltpday.html b/docs/refman/oltpday.html index 9d7105a9..a51ac332 100644 --- a/docs/refman/oltpday.html +++ b/docs/refman/oltpday.html @@ -1,5 +1,5 @@ - + @@ -134,7 +134,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/oltpdirectory.html b/docs/refman/oltpdirectory.html new file mode 100644 index 00000000..5a72155e --- /dev/null +++ b/docs/refman/oltpdirectory.html @@ -0,0 +1,141 @@ + + + + + + + + + +oltpdirecotry + + + + +

oltpdirecotry

+ +NAME
+SYNOPSIS
+OPTIONS
+USAGE
+EXAMPLE
+COPYRIGHT
+SEE ALSO
+ +
+ + +

NAME + +

+ + +

oltpdirectory +− Print the name of a directory

+ +

SYNOPSIS + +

+ + + +

oltpdirectory +[-a|--awrdirectory] [-h|-H|--help] [-s|--scalekey key] +[-l|--latest] [-r|--runnumber N]

+ +

OPTIONS + +

+ + + +

-a|--awrdirectory

+ +

By default, the name of the +results directory will be output, use this option to output +the name of the directory where html and generated graphics +is stored.

+ + +

-s|--scalekey +key

+ +

Output the name of the +directory where gnuplot input, csv files, etc. for some +specific scale run is found.

+ + +

-r|--runnumber +NNN

+ +

Output the name of the +directory where gnuplot input, csv files, etc. for some +specific run is found.

+ + +

-l|--latest

+ +

Output the name of the +directory where gnuplot input, csv files, etc. for the +latest run from the current host is found.

+ + +

-h|-H|--help

+ +

Only output a short help.

+ +

USAGE + +

+ + +

The +oltpdirectory command will output nothing but the +name of a directory and is typically used to provide an +argument for the cd command. By default, the directory +output will be the top level results directory, but +providing the -a option, the top level awr directory will be +output. If you provide either of the -r option with a +runnumber as argument or the -s option with a key used for +oltpscale, the complete directory name where the actual +files are stored will be output.

+ +

EXAMPLE + +

+ + +

If you did an +oltpscale with a key of ’myscale1’ you can +change your current directory to the directory where all +input for e.g. gnuplot is by doing:

+ +

cd +‘oltpdirectory -s myscale1‘

+ +

COPYRIGHT + +

+ + +

Copyright +© 2023 Oracle Corporation
+Licensed under the Universal Permissive License v 1.0 as +shown at https://oss.oracle.com/licenses/upl

+ +

SEE ALSO + +

+ + + +

oltpparams(2rwl)

+
+ + diff --git a/docs/refman/oltpdrop.html b/docs/refman/oltpdrop.html index f07dec0e..473e47b7 100644 --- a/docs/refman/oltpdrop.html +++ b/docs/refman/oltpdrop.html @@ -1,5 +1,5 @@ - + @@ -63,7 +63,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/oltpfilloe.html b/docs/refman/oltpfilloe.html index 525bbd78..01d0b4fc 100644 --- a/docs/refman/oltpfilloe.html +++ b/docs/refman/oltpfilloe.html @@ -1,5 +1,5 @@ - + @@ -63,7 +63,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/oltpforever.html b/docs/refman/oltpforever.html index 03965fd2..a79969c7 100644 --- a/docs/refman/oltpforever.html +++ b/docs/refman/oltpforever.html @@ -1,5 +1,5 @@ - + @@ -44,8 +44,8 @@

SYNOPSIS

oltpforever -[-H] [-g] [-a] [-k key] [-R file] [-K n] [-W] [komment text -...]

+[-H] [-g|-G] [-a] [-k key] [-R file] [-K n] [-W] [komment +text ...]

oltpforever2

@@ -69,11 +69,13 @@

OPTIONS when storing results in the repository database. The default is the same as the project name.

-

-g

+ +

-g|-G

Show graphs during the runs using gnuplot’s output to X-Windows. This requires a -properly set DISPLAY environment variable.

+properly set DISPLAY environment variable. For the -G +option, see oltprun(2rwl).

-R file

@@ -141,7 +143,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/oltpkomment.html b/docs/refman/oltpkomment.html new file mode 100644 index 00000000..456e8acf --- /dev/null +++ b/docs/refman/oltpkomment.html @@ -0,0 +1,116 @@ + + + + + + + + + +oltpkomment + + + + +

oltpkomment

+ +NAME
+SYNOPSIS
+OPTIONS
+USAGE
+NOTES
+COPYRIGHT
+SEE ALSO
+ +
+ + +

NAME + +

+ + +

oltpkomment +− Show or change the komment for an oltp run

+ +

SYNOPSIS + +

+ + +

oltpkomment +[-H|--help] runnumber [--newkomment ’ ... +’]

+ +

OPTIONS + +

+ + + +

-H|--help

+ +

Show short help.

+ + +

--newkomment +’ ... ’

+ +

Set a new komment for the +runnumber provided; the new komment must be a single shell +argument and therefore typically embedded within quotes.

+ +

USAGE + +

+ + +

The +oltpkomment will output the current komment for some +oltprun done from the host where the command is called from; +the actual runnumber must be provide as the first argument +to the oltpkomment command.

+ +

If you also +provide the --newkomment option, the komment will be set to +a new value in both the repository and in the results +directory, where it is contained in a text file. After +changing the komment, you will typically call oltpplot to +regenerate the output in the awr directory.

+ +

NOTES + +

+ + +

This command +exists as it is not sufficient to change the value of the +KOMMENT column of the RWLRUN table, as the komment is also +found in a text file in the results directory.

+ +

COPYRIGHT + +

+ + +

Copyright +© 2023 Oracle Corporation
+Licensed under the Universal Permissive License v 1.0 as +shown at https://oss.oracle.com/licenses/upl

+ +

SEE ALSO + +

+ + +

oltprun(2rwl), +oltpplot(2rwl), oltpdirectory(2rwl)

+
+ + diff --git a/docs/refman/oltpparams.html b/docs/refman/oltpparams.html index 3b7c9fb8..03499fe7 100644 --- a/docs/refman/oltpparams.html +++ b/docs/refman/oltpparams.html @@ -1,5 +1,5 @@ - + @@ -99,7 +99,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

@@ -107,8 +107,10 @@

SEE ALSO

- -

oltp(2rwl)

+ + +

oltpdirectory(2rwl), +oltp(2rwl)


diff --git a/docs/refman/oltpplot.html b/docs/refman/oltpplot.html index 2544abd8..199698f7 100644 --- a/docs/refman/oltpplot.html +++ b/docs/refman/oltpplot.html @@ -1,5 +1,5 @@ - + @@ -25,6 +25,7 @@

oltpplot

OPTIONS
USAGE
EXAMPLES
+NOTES
COPYRIGHT
SEE ALSO
@@ -45,8 +46,9 @@

SYNOPSIS

oltpplot -[-x|-X|--xmarker|--xline ’time text’] -[-c|--xcolor rgbname] runnumber

+[--xfile|--Xfile filename] [-x|-X|--xmarker|--xline +’time text’] [-c|--xcolor rgbname] +[-l|--latest|[-r] runnumber]

Recreate the report that was created using oltprun potentially @@ -89,8 +91,23 @@

OPTIONS a vertical line spanning the whole range of the y-axis is printed.

+ +

--xfile|--Xfile +filename

+ +

In stead of providing the time +and the text as a shell argument, you can have a number of +these combinations stored on individual lines in a text +file. Each line must have a time per the above (seconds or +UTC) followed by a blank and the wanted text. No other +contents may be in the file.

+ +

The difference +between --xfile and --Xfile is like the difference between +--xmarker and --xline.

+

You can use -either of the two options repeatedly.

+either of the four options repeatedly.

-c|--xcolor rgbname

@@ -100,6 +117,13 @@

OPTIONS ’blue’; you can use this option to choose any other valid rgb name.

+ +

-l|--latest

+ +

You can provide this option as +an alternative to an actual runnumber, which causes the +latest run from the current host to be used.

+

USAGE

@@ -135,14 +159,27 @@

EXAMPLES 12345

If you know -that 110s and 140s into a run with runnumber 54321 there -were some external events and you want those external event -to be shown on the graphs in red, you can recreate graphs +that 110s and 140s into the last run you did, there were +some external events and you want those external event to be +shown on the graphs in red, you can recreate graphs using

-

oltpplus -x +

oltpplot -x ’110 Something happened’ -x ’140 Something -else’ -c red 54321

+else’ -c red -l

+ +

The previous +example could alternatively be created via a file named +m.txt with just these two lines:

+ +

110 Something +happened
+140 Something else

+ +

and running

+ +

oltpplot -xfile +m.txt -c red -l

If you are using srvctl to relocate a service during a run, and you @@ -161,13 +198,23 @@

EXAMPLES from the two calls to date in your shell script as the time in the --xmarker options to oltprun.

+

NOTES + +

+ + +

If you want to +provide an actual runnumber, this can be done either using +the -r option or simply as (the only) non option +argument.

+

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

@@ -177,7 +224,7 @@

SEE ALSO

oltp(2rwl), -oltprun(2rwl)

+oltprun(2rwl), oltpkomment(2rwl)


diff --git a/docs/refman/oltpplus.html b/docs/refman/oltpplus.html index d7e532e0..8c45007c 100644 --- a/docs/refman/oltpplus.html +++ b/docs/refman/oltpplus.html @@ -1,5 +1,5 @@ - + @@ -147,7 +147,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/oltprun.html b/docs/refman/oltprun.html index 37d7541e..d4697b67 100644 --- a/docs/refman/oltprun.html +++ b/docs/refman/oltprun.html @@ -1,5 +1,5 @@ - + @@ -44,8 +44,9 @@

SYNOPSIS

oltprun [-H] -[-g] [-a] [-2] [-k key] [-r runperiod] [-R file] [-n procs] -[-x script] [-o file] [-K n] [-W] [komment text ...]

+[-g|-G] [-a] [-2] [-k key] [-r runperiod] [-R file] [-n +procs] [-x script] [-o file] [-K n] [-W] [komment text +...]

Execute one run using the oltp workload, saving intermediate results in the @@ -98,7 +99,7 @@

OPTIONS

In stead of the normal simulation of an average arrival rate, run everything in a -busy loop without any waiting/queueing taking place. You +busy loop without any waiting/queuing taking place. You typically do this with much fewer threads (and/or processes) as each thread in each process constantly will be executing emulated business transactions.

@@ -114,9 +115,23 @@

OPTIONS

-g|--graphs

-

Show graphs during the run -using gnuplot’s output to X-Windows. This requires a -properly set DISPLAY environment variable.

+

Show two graphs during the run +using gnuplot’s output to X-Windows; this requires a +properly set DISPLAY environment variable. One graph will +show distribution of sessions on database instances together +with counts of open and active sessions when a session pool +is in use. The other graph will show the throughput of the +various emulated business transactions.

+ + +

-G|--gegraphs

+ +

An alternative to the previous, +where the second running graph will show total throughput +and queue time respectively total time per transaction for a +few selected emulated business transactions. This is +particularly useful when using external control to +immediately see the effect of any changes.

-2

@@ -192,7 +207,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

@@ -202,7 +217,8 @@

SEE ALSO

oltp(2rwl), -oltpcore(2rwl), oltpscale(2rwl), oltpforever(2rwl)

+oltpcore(2rwl), oltpscale(2rwl), oltpforever(2rwl), +oltpkomment(2rwl)


diff --git a/docs/refman/oltpscale.html b/docs/refman/oltpscale.html index 78f3ad70..47245b69 100644 --- a/docs/refman/oltpscale.html +++ b/docs/refman/oltpscale.html @@ -1,5 +1,5 @@ - + @@ -44,8 +44,8 @@

SYNOPSIS

oltpscale -[-H] [-g] [-a] [-A] [-k key] [-r runperiod] [-b] [-l lo] [-h -hi] [-i int] [-K n] [-W] [-R file] [komment text +[-H] [-g|-G] [-a] [-A] [-k key] [-r runperiod] [-b] [-l lo] +[-h hi] [-i int] [-K n] [-W] [-R file] [komment text ...]

Execute a @@ -120,7 +120,7 @@

OPTIONS

In stead of the normal simulation of an average arrival rate, run everything in a -busy loop without any waiting/queueing taking place. You +busy loop without any waiting/queuing taking place. You typically do this with much fewer threads (and/or processes) as each thread in each process constantly will be executing emulated business transactions.

@@ -133,15 +133,16 @@

OPTIONS if you do use e.g. sessionpool, sessions will constantly be acquired and released.

-

-g ---graphs

+ +

-g|--graphs|-G|--qegraphs

Show graphs during the run using gnuplot’s output to X-Windows. This requires a -properly set DISPLAY environment variable.

+properly set DISPLAY environment variable. The two latter +options causes an alternative graph; see oltprun(2rwl).

+ -

-a ---preallocate

+

-a|--preallocate

If your orders and order_items tables are partitioned, you can use the -a option to make @@ -188,7 +189,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/oltpscalereport.html b/docs/refman/oltpscalereport.html index f6fd2e11..d35c784f 100644 --- a/docs/refman/oltpscalereport.html +++ b/docs/refman/oltpscalereport.html @@ -1,5 +1,5 @@ - + @@ -112,7 +112,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/oltpsetup.html b/docs/refman/oltpsetup.html index 26fcdad3..662efded 100644 --- a/docs/refman/oltpsetup.html +++ b/docs/refman/oltpsetup.html @@ -1,5 +1,5 @@ - + @@ -28,6 +28,7 @@

oltpsetup

PARAMETERS
BURSTS
VERIFICATION
+UNDOCUMENTED PARAMETERS
BUGS
COPYRIGHT
SEE ALSO
@@ -488,6 +489,59 @@

PARAMETERS processes.

+

time_out

+ +

When time_out is set to an +actual value of 0 or more, any transaction that is delayed +by more than the value of time_out seconds will be +dropped in stead of being actually executed. When a +transaction is dropped, no database session will be +acquired, and the transaction is not executed. In stead, the +drop count will be increased by 1. This is only likely to +happen when the datbase is under pressure and when the +actual time to get a database session and execute a +transaction is higher than the inverse of the arrival rate. +The drop count is visible in the persec table with a vname +of ’call_failure’.

+ +

The following +parameters with names starting with fix_ have effect when +the execution is fixed at starttime, i.e. when external +control is not used.

+ + +

fix_logoffrate

+ +

This is a double value that can +be set to increase the logon activity by causing session +release to also disconnect. By default, this does not +happen, but if set to a value in the range ]0;1], the value +sets the proportion of sessions doing the make_order +transaction that will disconnect during session release. The +parameter only has effect when the normal pool is a session +pool.

+ + +

fix_cursorleak

+ +

This is a double value that can +be set to make the application leak cursors at a certain +rate. By default, this does not happen, but if set to a +value in the range ]0;1], the value sets the proportion of +cursors that will be leaked. If you want to experiment with +the, start with very low values such as 0.001 and be +prepared that you will receive ORA-01000 errors.

+ + +

fix_hardparse

+ +

This is a double value that can +be set to make hard parse take place. By default, no hard +parse takes place, but if the parameter is set to a value +higher than zero, hard parse will take place. The valid +range is [0;1].

+ +

orders_hashcount

If your database does not have @@ -496,6 +550,14 @@

PARAMETERS oltpcreate(2rwl).

+

runplot_width

+ +

If you are using -g or -G to +show running graphs, they will by default show the latest +60s of activity, unless this parameter is set to a different +value.

+ +

gnuplotjs

To generate clickable svg @@ -514,11 +576,15 @@

BURSTS

You can include -three different types of "bursts" in your run; one +four different types of "bursts" in your run; one does a burst using a higher average transaction arrival rate, the other does a burst using a higher number of worker -threads, and the third is an implicit burst being the result -of a period with reduced session pool sizes. For the first, +threads, the third does an activity burst by changing +(logged on) sessions from being idle to being active, and +the last is an implicit burst being the result of a period +with reduced session pool sizes.

+ +

For the first, you must provide a factor, by which the arrival rate increases, and for the second, you must provide the count of extra worker threads. For both, you provide the time in @@ -535,7 +601,7 @@

BURSTS burst_factor

The two first parameters set -the time to start and length of the burst, and the second +the time to start and length of the burst, and the third parameter is the factor that is applied to the arrival rate during the burst.

@@ -550,16 +616,51 @@

BURSTS wburst_count

The two first parameters set -the time to start and length of the burst, and the second +the time to start and length of the burst, and the third parameter is the number of extra worker threads during the -burst.

+burst. To prevent all processes from increasing the worker +thread count at the same time, you can include procnumber in +your calculation for wburst_start. As an example, if you set +wburst_start to 200+procnumber, the increase in worker +threads will be at 200s for process 1, 201s for process 2, +etc.

All parameters are double except wburst_count that is an integer, and you can very well include both types of burst.

-

Third type of -bursts comes due to a backlog of transactions that are +

The third type +of burst is provided by spedifying a point in time during +the run where the activity changes. All workers are +connected (assuming no pooling is in place), but before that +point in time, only some workers are active. When the point +in time for the change is reached, all workers get active, +which will cause an activity burst, which results in e.g. +many cursors being (soft) parsed at the same time. The four +parameters controlling this are:

+ + +

aburst_workers +
+aburst_pre_factor
+aburst_post_factor
+aburst_start

+ +

In the period until +aburst_start, only aburst_workers do actual work while the +remaining (i.e. threadcount-aburst_workers) are connected +but are idle. The arrival rate in the active workers during +this period is a factor aburst_pre_factor higher than +normal. If the value +aburst_pre_factor*aburst_workes/threadcount is 1.0, the +effective arrival rate during this period is the same as it +would have been without an activity burst. In the period +after aburst_start, all workers are active, in the arrival +rate of these is the normal arrival rate multiplied by +aburst_post_factor. The default for both factors is 1.0.

+ +

The last type +of bursts comes due to a backlog of transactions that are delayed during a period with reduced sessions in the normal pool. It only has effect when using session pools.

@@ -602,6 +703,17 @@

VERIFICATION

To verify schemas are properly created, run oltpverify -u.

+

UNDOCUMENTED PARAMETERS + +

+ + +

There are some +extra parameters, that you can set in either your +key.rwl file or using -i or -d on the oltprun command +line. To get documentation for these, you need to look at +the parameters.rwl file in the oltp directory.

+

BUGS

@@ -627,7 +739,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

@@ -638,7 +750,8 @@

SEE ALSO

oltp(2rwl), oltpcreate(2rwl), oltpdrop(2rwl), oltpawcols(2rwl), -oltprun(2rwl), oltpforever(2rwl), oltpday(2rwl)

+oltprun(2rwl), oltpforever(2rwl), oltpday(2rwl), +oltxcrun(2rwl)


diff --git a/docs/refman/oltpverify.html b/docs/refman/oltpverify.html index 1b7b10a2..c0e5d0b9 100644 --- a/docs/refman/oltpverify.html +++ b/docs/refman/oltpverify.html @@ -1,5 +1,5 @@ - + @@ -44,41 +44,83 @@

SYNOPSIS

oltpverify -[-H] [-u] [-u] [-s] [-d]

+[-H|--help] [-a|--all] [-d|--directories] [-u|--runuser] +[--awuser] [--oeuser] [-r|--repository] [-s] [--system] +[--cruser] [-2]

OPTIONS

-

-H

+ +

-H|--help

Show short help

-

-d

+ +

-d|--directories

Verify results and awr directories are fine.

-s

-

Verify system databases can +

Verify all system databases can connect.

-

-r

+ +

--system

+ +

Verify the system and awr +databases can connect.

+ + +

--cruser

+ +

Verify the system database used +for schema creation can connect.

+ + +

-r|--repository

Verify repository database can connect.

-

-u

+

-2

+ +

For the relevant tests, verify +side 2.

+ + +

--awuser

+ +

Verify the aw schema user +database can connect.

+ + +

--oeuser

+ +

Verify the oe schema user +database can connect.

+ + +

-u|--runuser

Verify the run user database can connect.

-

-a

+ +

-a|--all

Perform all verifications

+ +

-q|--quiet

+ +

Do not output banners from +invocations of rwloadsim.

+

USAGE

@@ -87,7 +129,11 @@

USAGE

The oltpverify command is used while you prepare your parameter file to verify settings are correct for your oltp -workload.

+workload. When executed before running oltpcreate, suggested +options are -d -s -r to verify directories, system +and repository databases can connect. After oltpcreate has +been executed, you should run oltpverify twice with +respectively -a and -a -2 options.

COPYRIGHT @@ -95,7 +141,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/oltpxc.html b/docs/refman/oltpxc.html index b94c0f89..f5507eee 100644 --- a/docs/refman/oltpxc.html +++ b/docs/refman/oltpxc.html @@ -1,5 +1,5 @@ - + @@ -169,7 +169,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/oltpxcrun.html b/docs/refman/oltpxcrun.html index d76a1b62..0e6429c8 100644 --- a/docs/refman/oltpxcrun.html +++ b/docs/refman/oltpxcrun.html @@ -1,5 +1,5 @@ - + @@ -24,6 +24,7 @@

oltpxcrun

SYNOPSIS
OPTIONS
USAGE
+NOTES
COPYRIGHT
SEE ALSO
@@ -44,8 +45,8 @@

SYNOPSIS

oltpxcrun -[-H] [-g] [-a] [-k key] [-R file] [-r runperiod] [--no-awr] -[--default] [komment text ...]

+[-H] [-g|-G] [-a] [-k key] [-R file] [-r runperiod] +[--no-awr] [--default] [komment text ...]

Continuously make long runs with external control.

@@ -93,11 +94,13 @@

OPTIONS

Do not generate awr snapshots, awr report and other run results.

-

-g

+ +

-g|-G

Show graphs during the runs using gnuplot’s output to X-Windows. This requires a -properly set DISPLAY environment variable.

+properly set DISPLAY environment variable. For -G, see +oltprun(2rwl).

-R file

@@ -132,13 +135,26 @@

USAGE recommended that you redirect stderr from oltpxcrun to a file that you show using tail -f.

+

NOTES + +

+ + +

External +control primarily exists for use internally by Oracle +Corporation, and it is on purpose vaguely documented. It is +not guaranteed that external control will be +consistent over time, nor that it will continue to be +available. Further, it may impact other parts of the oltp +workload, and such impact may change in the future.

+

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

@@ -148,7 +164,7 @@

SEE ALSO

oltp(2rwl), -oltpcore(2rwl), oltpxset(2rwl)

+oltpcore(2rwl), oltpxcset(2rwl)


diff --git a/docs/refman/oltpxcset.html b/docs/refman/oltpxcset.html index 20c797b8..3ea9d3b6 100644 --- a/docs/refman/oltpxcset.html +++ b/docs/refman/oltpxcset.html @@ -1,5 +1,5 @@ - + @@ -249,7 +249,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/ovid2.html b/docs/refman/ovid2.html index b475a769..73b82d92 100644 --- a/docs/refman/ovid2.html +++ b/docs/refman/ovid2.html @@ -1,5 +1,5 @@ - + @@ -111,7 +111,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/percentiles.html b/docs/refman/percentiles.html index 048e0711..603cdb49 100644 --- a/docs/refman/percentiles.html +++ b/docs/refman/percentiles.html @@ -1,5 +1,5 @@ - + @@ -116,7 +116,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/persec.html b/docs/refman/persec.html index 85956ac7..3d02b56d 100644 --- a/docs/refman/persec.html +++ b/docs/refman/persec.html @@ -1,5 +1,5 @@ - + @@ -153,7 +153,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/printfstatement.html b/docs/refman/printfstatement.html index b99ec618..f087812a 100644 --- a/docs/refman/printfstatement.html +++ b/docs/refman/printfstatement.html @@ -1,5 +1,5 @@ - + @@ -24,6 +24,7 @@

printfstatement

SYNTAX
DESCRIPTION
USAGE
+ENGINEERING NOTATION
NULL
EXAMPLES
COPYRIGHT
@@ -105,9 +106,43 @@

USAGE specific argument.

Only a limited -set of conversion specifiers are useful: d, i -or x for integers, e, f, g for -doubles and s for strings.

+set of standard conversion specifiers are useful: d, +i or x for integers, e, f, +g for doubles and s for strings.

+ +

ENGINEERING NOTATION + +

+ + +

You can output +double values using engineering notation, i.e. with an SI +prefix such as k for kilo, n for nano, etc. This is done +using the m or M conversion specifier, and is +useful when the absolute value is in the range +[1.0e-30;9.99e+32] or is exactly zero. The precision has the +same effect as for the standard e conversion implying +the output will be rounded and have one more significant +digit than given by the precision. The precision must be 2 +or higher, and the field width should not be set.

+ +

The symbol for +micro, µ, i.e. 1e-6 is by default using the UTF-8 +encoding, which is the two hexadecimal values 0xc2 and 0xb5; +you must use the $musymbol direrective to change this if +your terminal is not using the UTF-8 (or compatible) +character set.

+ +

The difference +between the two specifiers is that M outputs one +space character between the number and the SI-prefix, while +the m outputs the SI-prefix directly after the +number.

+ +

The decimal +point is not output if no significant digits are output +after it. This can only happen if the precision is 2 and the +absolute value to be output is at least 100.

NULL @@ -179,13 +214,27 @@

EXAMPLES

|NULL|nothing|

+

This example +shows how the m specifier can be used:

+ +

double tt := +12.34e-6;
+printf "the time is %.3ms\n", tt;

+ +

while will +produce this output with the µ symbol in its UTF-8 +representation.

+ +

the time is +12.34µs

+

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

@@ -196,7 +245,7 @@

SEE ALSO

statement(1rwl), -filestatement(1rwl), expression(1rwl)

+filestatement(1rwl), expression(1rwl), directive(1rwl)


diff --git a/docs/refman/procedure.html b/docs/refman/procedure.html index 412fb364..45002fe3 100644 --- a/docs/refman/procedure.html +++ b/docs/refman/procedure.html @@ -1,5 +1,5 @@ - + @@ -45,7 +45,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/proceduredeclaration.html b/docs/refman/proceduredeclaration.html index 4492e512..1bdcc649 100644 --- a/docs/refman/proceduredeclaration.html +++ b/docs/refman/proceduredeclaration.html @@ -1,5 +1,5 @@ - + @@ -48,8 +48,10 @@

SYNTAX

proceduredeclaration ::=
[ private ] procedure identifier
-(
[ argumentlist ] ) [ statistics | -nostatistics ] [ is ]
+( [ argumentlist ] )
+[ statistics | nostatistics | +statisticsonly ]
+[ is ]
statementlist
end
[ procedure | identifier ]

@@ -97,7 +99,7 @@

DESCRIPTION simulated business logic and are as such called repeatedly using control loops to simulate some workload. They can therefore have statistics associated with them, which -includes thing like execution times, number of executions, +includes things like execution times, number of executions, etc. If the procedure contains any execution of SQL, such statistics are collected by default; using the nostatistics keyword turns this off. If the procedure @@ -105,9 +107,15 @@

DESCRIPTION statistics keyword; doing so will enable statistics collection for the procedure and will additionally make rwloadsim treat the procedure as if it were doing SQL -execution. This again will imply the procedure will ensure a +execution. This again implies the procedure will ensure a database connection exists (e.g. by getting on from a -session pool).

+session pool). If the procedure does not contain any +execution of SQL, you can alternatively provide the +statisticsonly attribute. This implies statistics +such as execution counts is being gathered, but the +procedure will not ensure or require a database +connection. See controlloop(1rwl) for an example of how this +can be used.

Functions never have statistics collected, even if they contain SQL @@ -192,7 +200,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/random.html b/docs/refman/random.html index b0984b8e..141d162c 100644 --- a/docs/refman/random.html +++ b/docs/refman/random.html @@ -1,5 +1,5 @@ - + @@ -46,7 +46,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/randomproceduredeclaration.html b/docs/refman/randomproceduredeclaration.html index 620b4ec8..3d8da514 100644 --- a/docs/refman/randomproceduredeclaration.html +++ b/docs/refman/randomproceduredeclaration.html @@ -1,5 +1,5 @@ - + @@ -140,7 +140,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/randomstringdeclaration.html b/docs/refman/randomstringdeclaration.html index 36b44492..2c4fe219 100644 --- a/docs/refman/randomstringdeclaration.html +++ b/docs/refman/randomstringdeclaration.html @@ -1,5 +1,5 @@ - + @@ -133,7 +133,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/regex.html b/docs/refman/regex.html index 6a7b0910..bb5e9e97 100644 --- a/docs/refman/regex.html +++ b/docs/refman/regex.html @@ -1,5 +1,5 @@ - + @@ -206,7 +206,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/runres.html b/docs/refman/runres.html index 8ac31eb1..95a0326f 100644 --- a/docs/refman/runres.html +++ b/docs/refman/runres.html @@ -1,5 +1,5 @@ - + @@ -139,7 +139,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/rwlcpu.html b/docs/refman/rwlcpu.html index de632863..ea00b50b 100644 --- a/docs/refman/rwlcpu.html +++ b/docs/refman/rwlcpu.html @@ -1,5 +1,5 @@ - + @@ -162,7 +162,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/rwlerror.html b/docs/refman/rwlerror.html index 87365275..5b35ef5d 100644 --- a/docs/refman/rwlerror.html +++ b/docs/refman/rwlerror.html @@ -1,5 +1,5 @@ - + @@ -141,7 +141,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/rwlman.html b/docs/refman/rwlman.html index 0b39cf8f..07855afd 100644 --- a/docs/refman/rwlman.html +++ b/docs/refman/rwlman.html @@ -1,5 +1,5 @@ - + @@ -141,7 +141,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/rwloadsim.html b/docs/refman/rwloadsim.html index 71914359..74096c66 100644 --- a/docs/refman/rwloadsim.html +++ b/docs/refman/rwloadsim.html @@ -1,5 +1,5 @@ - + @@ -1001,7 +1001,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/rwlprogram.html b/docs/refman/rwlprogram.html index 5198b8fc..0e303818 100644 --- a/docs/refman/rwlprogram.html +++ b/docs/refman/rwlprogram.html @@ -1,5 +1,5 @@ - + @@ -239,7 +239,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/rwlrun.html b/docs/refman/rwlrun.html index 548f8cd7..212154ed 100644 --- a/docs/refman/rwlrun.html +++ b/docs/refman/rwlrun.html @@ -1,5 +1,5 @@ - + @@ -145,7 +145,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/simpledeclaration.html b/docs/refman/simpledeclaration.html index b7da06b5..253a5a27 100644 --- a/docs/refman/simpledeclaration.html +++ b/docs/refman/simpledeclaration.html @@ -1,5 +1,5 @@ - + @@ -196,7 +196,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/sqldeclaration.html b/docs/refman/sqldeclaration.html index 385ef1d4..eb6a82aa 100644 --- a/docs/refman/sqldeclaration.html +++ b/docs/refman/sqldeclaration.html @@ -1,5 +1,5 @@ - + @@ -851,7 +851,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/sqlexecution.html b/docs/refman/sqlexecution.html index 6a6ce954..f5479dac 100644 --- a/docs/refman/sqlexecution.html +++ b/docs/refman/sqlexecution.html @@ -1,5 +1,5 @@ - + @@ -293,7 +293,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/sqlid2file.html b/docs/refman/sqlid2file.html index 82be3236..455ab62d 100644 --- a/docs/refman/sqlid2file.html +++ b/docs/refman/sqlid2file.html @@ -1,5 +1,5 @@ - + @@ -115,7 +115,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/sqlmonitor.html b/docs/refman/sqlmonitor.html index 0cd0162b..efd060ea 100644 --- a/docs/refman/sqlmonitor.html +++ b/docs/refman/sqlmonitor.html @@ -1,5 +1,5 @@ - + @@ -151,7 +151,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/sqlmonitorawr.html b/docs/refman/sqlmonitorawr.html index 4cdf97c3..7e942d73 100644 --- a/docs/refman/sqlmonitorawr.html +++ b/docs/refman/sqlmonitorawr.html @@ -1,5 +1,5 @@ - + @@ -181,7 +181,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/sqlreport.html b/docs/refman/sqlreport.html index d7dfa3e5..62a5f0d4 100644 --- a/docs/refman/sqlreport.html +++ b/docs/refman/sqlreport.html @@ -1,5 +1,5 @@ - + @@ -119,7 +119,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/sqlstatement.html b/docs/refman/sqlstatement.html index 3a66ec6c..8141bf06 100644 --- a/docs/refman/sqlstatement.html +++ b/docs/refman/sqlstatement.html @@ -1,5 +1,5 @@ - + @@ -234,7 +234,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/statement.html b/docs/refman/statement.html index d3f3dc4c..7fd03c1f 100644 --- a/docs/refman/statement.html +++ b/docs/refman/statement.html @@ -1,5 +1,5 @@ - + @@ -181,7 +181,8 @@

SIMPLE STATEMENTS

Suspend execution for a number of seconds which is a double. If a database session is held, -the session will not be released during the wait.

+the session will not be released during the wait. If the +expression is zero or less, there is no wait.

system

@@ -229,7 +230,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/statistics.html b/docs/refman/statistics.html index 96f4c5c3..d76da33f 100644 --- a/docs/refman/statistics.html +++ b/docs/refman/statistics.html @@ -1,5 +1,5 @@ - + @@ -242,7 +242,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/string.html b/docs/refman/string.html index 6772db46..8c766138 100644 --- a/docs/refman/string.html +++ b/docs/refman/string.html @@ -1,5 +1,5 @@ - + @@ -61,7 +61,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation
+© 2023 Oracle Corporation
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

diff --git a/docs/refman/sysres.html b/docs/refman/sysres.html index 59f350a4..b295f444 100644 --- a/docs/refman/sysres.html +++ b/docs/refman/sysres.html @@ -1,5 +1,5 @@ - + @@ -154,7 +154,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/useroption.html b/docs/refman/useroption.html index f320bd85..7eff2375 100644 --- a/docs/refman/useroption.html +++ b/docs/refman/useroption.html @@ -1,5 +1,5 @@ - + @@ -286,7 +286,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/docs/refman/utilities.html b/docs/refman/utilities.html index 3515be5a..035c0b79 100644 --- a/docs/refman/utilities.html +++ b/docs/refman/utilities.html @@ -1,5 +1,5 @@ - + @@ -152,7 +152,7 @@

COPYRIGHT

Copyright -© 2022 Oracle Corporation

+© 2023 Oracle Corporation

Licensed under the Universal Permissive License v 1.0 as shown at diff --git a/man/man1rwl/controlloop.1rwl b/man/man1rwl/controlloop.1rwl index f6f017c5..ee501f61 100644 --- a/man/man1rwl/controlloop.1rwl +++ b/man/man1rwl/controlloop.1rwl @@ -170,10 +170,35 @@ Due to the omission of the keyword, if any call to save_data() takes longer than 10s, all subsequent calls will be delayed although still 10s between each. .P +This third example shows how a procedure marked with the statisticsonly attribute can be +used to count failures when simulating a real queueing system with a time out. +.P +.nf +procedure doit_failed() statisticsonly + # do nothing except counting executions + null; +end; + +for queue every erlang2(0.1) stop 300 loop + if runseconds() > everyuntil+1.0 then + # if we are more than 1 second late, this is a failure + doit_failed(); + else + # only do the actual work when there is no time out + doit() at mydb; + end if; +end loop; +.fi +.P +The doit_failed() procedure will not attempt getting a database session and will not +actually do any work, so when the time out happens (current time more than one second after +the expected start time), rather than calling the real procedure, which would both +need to get a database sesssion and to execute some actual SQL, a simple count of the +time outs will happen. .SH COPYRIGHT Copyright \(co 2023 Oracle Corporation .br Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl .SH "SEE ALSO" -threadexecution(1rwl), statement(1rwl), expression(1rwl) +threadexecution(1rwl), statement(1rwl), expression(1rwl), controlloop(1rwl) diff --git a/man/man1rwl/proceduredeclaration.1rwl b/man/man1rwl/proceduredeclaration.1rwl index 0e0a9156..a0123dec 100644 --- a/man/man1rwl/proceduredeclaration.1rwl +++ b/man/man1rwl/proceduredeclaration.1rwl @@ -5,7 +5,9 @@ procedure declaration, function declaration \- RWP*Load Simulator declaration of .nf proceduredeclaration ::= [ \fBprivate\fR ] \fBprocedure\fR identifier - \fB(\fR [ argumentlist ] \fB)\fR [ \fBstatistics\fR | \fBnostatistics\fR ] [ \fBis\fR ] + \fB(\fR [ argumentlist ] \fB)\fR + [ \fBstatistics\fR | \fBnostatistics\fR | \fBstatisticsonly\fR ] + [ \fBis\fR ] statementlist \fBend\fR [ \fBprocedure\fR | identifier ] @@ -39,7 +41,7 @@ keyword is optional. .P Procedures are often created such that they implement some type of simulated business logic and are as such called repeatedly using control loops to simulate some workload. -They can therefore have statistics associated with them, which includes thing like execution times, +They can therefore have statistics associated with them, which includes things like execution times, number of executions, etc. If the procedure contains any execution of SQL, such statistics are collected by default; using the @@ -50,8 +52,17 @@ If the procedure does not contain any execution of SQL, you can provide the keyword; doing so will enable statistics collection for the procedure and will additionally make rwloadsim treat the procedure as if it were doing SQL execution. -This again will imply the procedure will ensure a database connection exists (e.g. by +This again implies the procedure will ensure a database connection exists (e.g. by getting on from a session pool). +If the procedure does not contain any execution of SQL, you can alternatively +provide the +.B statisticsonly +attribute. +This implies statistics such as execution counts is being gathered, but the procedure +will +.I not +ensure or require a database connection. +See controlloop(1rwl) for an example of how this can be used. .P Functions never have statistics collected, even if they contain SQL execution. Functions must have a return type and must have at least one diff --git a/man/man2rwl/mtit.2rwl b/man/man2rwl/mtit.2rwl new file mode 100644 index 00000000..02802b68 --- /dev/null +++ b/man/man2rwl/mtit.2rwl @@ -0,0 +1,68 @@ +.TH mtit "2rwl" "July 2022" "RWP*Load Simulator" "Workload Usage" +.SH NAME +mtit \- The RWP*Load Simulator mtit Workload +.SH DESCRIPTION +The mtit - Maximum Throughput Insert Transaction - workload +is used to show the behavior of different approaches for +massive inserts. +It is built as an addition to the oltp(2rwl) workload, +which must be setup before using mtit. +It is created to be used with external control, similar to how +that is done using the oltp workload. +.P +There is currently only this very brief documentation. +.SH COMMANDS +The following commands exist, all accepts a --help option to show brief usage. +.P +.B mtitcreate +.RS 4 +Creates the necessary tables and indexes in the existing schemas +used by the oltp workload. +.RE +.P +.B mtitdrop +.RS 4 +Drop the tables from the existing schemas, but does not otherwise +change the schemas. +.RE +.P +.B mtitcore +.RS 4 +Executes a single run just like oltpcore does. +.RE +.P +.B mtitxcrun +.RS 4 +Continuously runs 1 hour long runs until explicitly stopped. +It is strongly recommended that it is always called with -n and -t options +to specify the number of processes and the number of threads per process. +Note that all threads are constantly busy and that each will have a dedicated +database connection. +The process count has a maxium value of 8, but a high threadcount can be used +if high workloads are wanted. +.RE +.P +.B mtitxcset +.RS 4 +Change a value for some parameter while mtitxcrun is executing. +.RE +.P +.B mtitplot +.RS 4 +Recreate the polt for an mtit run. +.RE +.P +.SH ENVIRONMENT +These environment variables used by the oltp workload are also used by the mtit workload: +\fBRWLOLTP_NAME\fR, +\fBRWLOLTP_GNUPLOT1\fR, +\fBRWLOLTP_GNUPLOT2\fR +.SH BUGS +Lack of any further documentation. +.SH COPYRIGHT +Copyright \(co 2023 Oracle Corporation +.br +Licensed under the Universal Permissive License v 1.0 +as shown at https://oss.oracle.com/licenses/upl +.SH "SEE ALSO" +oltpcore(2rwl), oltpcreate(2rwl), oltpdrop(2rwl), oltpplot(2rwl), oltpsetup(2rwl) diff --git a/man/man2rwl/oltpsetup.2rwl b/man/man2rwl/oltpsetup.2rwl index 67507647..9cad9e9b 100644 --- a/man/man2rwl/oltpsetup.2rwl +++ b/man/man2rwl/oltpsetup.2rwl @@ -334,6 +334,21 @@ Values outside the range [0;1] will be adjusted to either 0 or 1. This is an integer value (default 50) that sets the number of worker threads per process. If you want to experiment with, as an example, twice the load, you can do so by doubling either of \fBratefactor\fR, \fBthreadcount\fR, or the number of processes. +.P +.RE +.nf +\fBtime_out\fR +.fi +.RS 4 +When time_out is set to an actual value of 0 or more, any transaction that is delayed by more than the +value of \fBtime_out\fR seconds will be +.I dropped +in stead of being actually executed. +When a transaction is dropped, no database session will be acquired, and the transaction is not executed. +In stead, the drop count will be increased by 1. +This is only likely to happen when the datbase is under pressure and when the actual time to +get a database session and execute a transaction is higher than the inverse of the arrival rate. +The drop count is visible in the persec table with a vname of 'call_failure'. .RE .P The following parameters with names starting with fix_ have effect when the execution is fixed at @@ -360,10 +375,10 @@ that you will receive ORA-01000 errors. .P \fBfix_hardparse\fR .RS 4 -This is an integer value that can be set to make hard parse take place. +This is a double value that can be set to make hard parse take place. By default, no hard parse takes place, but if the parameter is set to a value higher than zero, hard parse will take place. -The higher the value, the more hard parse. +The valid range is [0;1]. .RE .P \fBorders_hashcount\fR diff --git a/oltp/csvdata.rwl b/oltp/csvdata.rwl index 404d6121..5298eb8d 100644 --- a/oltp/csvdata.rwl +++ b/oltp/csvdata.rwl @@ -227,7 +227,7 @@ execute at rwloadsim end; # And get the counts of the procedures - double val1, val2, val3, val4, val5, val6, val7, val8, val9; + double val1, val2, val3, val4, val5, val6, val7, val8, val9, calf; sql seltps_sql select nvl(make_order,0) @@ -240,6 +240,7 @@ execute at rwloadsim , nvl(query_order,0) , nvl(awindex_query,0) , second + , nvl(call_failure,0) from ( select vname, second, scount from @@ -255,6 +256,7 @@ execute at rwloadsim , 'stockup' as stockup , 'aw_transaction' as aw_transaction , 'awindex_query' as awindex_query + , 'call_failure' as call_failure , 'query_order' as query_order ) ) order by second @@ -265,6 +267,7 @@ execute at rwloadsim define 8 val8; define 9 val9; define 10 second; + define 11 calf; array 100; end; @@ -328,7 +331,7 @@ execute at rwloadsim # For runtype 2 and 3 (the network chatty tests), the wmean # value really is the same as the absolute number of "query order" transactions. plotfile := resultsdir subdir runno "/tps.csv"; - writeline plotfile, "sec wmean make_order ship_order make_invoices search_products complex_query stockup aw_transaction query_order awindex_query"; + writeline plotfile, "sec wmean make_order ship_order make_invoices search_products complex_query stockup aw_transaction query_order awindex_query failures"; for seltps_sql loop wmean := val1 # make_order @@ -348,10 +351,10 @@ execute at rwloadsim end if; fprintf plotfile - , "%.2f %.1f %.1f %.1f %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n" + , "%.2f %.1f %.1f %.1f %.1f %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n" , second , wmean - , val1, val2, val3, val4, val5, val6, val7, val8, val9; + , val1, val2, val3, val4, val5, val6, val7, val8, val9, calf; end loop; plotfile := null; double wmavg, wma10; diff --git a/oltp/csvmtit.rwl b/oltp/csvmtit.rwl new file mode 100644 index 00000000..901f5da6 --- /dev/null +++ b/oltp/csvmtit.rwl @@ -0,0 +1,459 @@ +# Copyright (c) 2023 Oracle Corporation +# Licensed under the Universal Permissive License v 1.0 +# as shown at https://oss.oracle.com/licenses/upl/ + +# bengsig 26-apr-2023 - Creation with many parts from csvdata.rwl + +$include:"parameters.rwl" +$include:"results.rwl" + +integer runno := 0, oercount; +subdir:="/r" runno/1000 "/"; + +file plotfile, plotfil2; + +string(1000) csvline; +string(5000) plotline; +string(1000) markerfile; $useroption:markerfile +private string starttime; $useroption:starttime +private string xcolor := "blue"; $useroption:xcolor + +# This function takes a string that must be either +# in DDDD.MM.YYYY"T"HH24:MI:SS format or must be +# a plain double and returns either the double itself +# or the number of seconds after starttime +function xseconds(string xtim) return double + string tmatch; + double retval := null; + + regex "([0-9]{4,4})\\.([0-9]{2,2})\\.([0-9]{2,2})T([0-9]{2,2}):([0-9]{2,2}):([0-9]{2,2})" + , xtim, tmatch; + if tmatch is not null then + sql datediff + begin + :retval := (to_date(:tmatch,'YYYY.MM.DD"T"HH24:MI:SS') + - to_date(:starttime,'YYYY.MM.DD"T"HH24:MI:SS') + ) * 86400; + end; + / + bindout : retval; + bind sql; + end; + datediff; rollback; # shut up RWL-046 + else + regex "^[0-9]+(\\.[0-9]*)?$", xtim, retval; + end if; + + if retval is null then + writeline stderr, xtim " is not a positive double or in YYYY.MM.DD\"T\"HH24:MI:SS format"; + return null; + end if; + if retval < 0 or retval > runperiod then + writeline stderr, retval " is outside the range [0;" runperiod "]"; + return null; + end if; + + return retval; +end xseconds; + +# generate the gnuplot files +execute at rwloadsim + + # Note that you could NOT create one query with + # a join on second column of the various tables + # as the actual values are with µs resolution. + # + # However, as the primary purpose of these csv + # files are to provide input for gnuplot + # this is fine. + + + double sumdbtime := 0.0; + integer countentries := 0; + + # Plot the database side time model data + # Query to generate plot data for time model info + # see timemodel.rwl for more information + double second, dbcpu, dbtime, bgcpu, msping; + sql seltimm_sql + select second, val1 dbcpu, val2 dbtime, val3 bgcpu, val4 msping from sysres + where runnumber=:runno + and resname = 'TIMM' + order by second + / + bind sql; + define sql; + array 100; + end; + + plotfile := resultsdir subdir runno "/dbtime.csv"; + writeline plotfile, "second dbcpu dbtime bgcpu msping"; + for seltimm_sql loop + fprintf plotfile, "%.2f %.2f %.2f %.2f %.2f\n", second, dbcpu, dbtime, bgcpu, msping; + if dbtime >= 0 then # exclude bogus data < 0 + sumdbtime += dbtime; + countentries += 1; + end if; + end loop; + + plotfile := null; + + # modify and overwrite runperiod in env file + if second < runperiod-60 then + plotfile >>= resultsdir subdir runno "/env"; + fprintf plotfile, "runperiod=%d\n", second+10; + plotfile := null; + runperiod := second+10; + end if; + + # set a few defaults for plots + plotfile := resultsdir subdir runno "/header.plot"; + if second > 295 then + writeline plotfile, "imgwidth=1024"; + writeline plotfile, "set key bottom left outside"; + else + writeline plotfile, "imgwidth=640"; + writeline plotfile, "set key bottom left"; + end if; + + # Now handle the markers on the x-axis + if markerfile != "" then + string mtyp, mtim, mtxt; + double msec; + file mfil <= markerfile; + for readline mfil,mtyp,mtim,mtxt loop + msec := xseconds(mtim); + if msec is not null then + # Conversion OK, add gnuplot lines + if mtyp = "m" then + writeline plotfile, + "set label '" mtxt "' at " + msec ", graph 0.12 rotate by 90 textcolor rgb '" xcolor "'"; + writeline plotfile, + "set arrow from " msec ", graph 0.10 to " + msec ", graph -0.01 lw 2 lc rgb '" xcolor "' nohead"; + elseif mtyp = "l" then + writeline plotfile, + "set label '" mtxt "' at " + msec + runperiod/100.0 ", graph 0.98 right rotate by 90 textcolor rgb '" xcolor "'"; + writeline plotfile, + "set arrow from " msec ", graph 1 to " + msec ", graph 0 lc rgb '" xcolor "' nohead"; + else + writeline stderr, "csvmtit.rwl unexpected: " mtyp, mtim, mtxt; + end if; + end if; + end loop; + mfil := null; + end if; + + # And deal with the awr gather periods + double bb := 0, be := 0, eb := 0, ee := 0; + sql qry_awrtim + select val1 bb,val2 be,val3 eb,val4 ee + from sysres + where runnumber = :runno + and resname = 'AWRTIM' + / + define sql; + bind sql; + ignoreerror; + end; + + qry_awrtim; + if oraerror then + if oraerror != 1403 then + writeline stderr, "csvdata.rwl: getting awr markers: " oraerrortext; + end; + else + writeline plotfile, "# awr markers:"; + writeline plotfile, + "set arrow from " bb ", graph -0.01 to " be ", graph -0.01 lc rgb 'dark-red' heads size graph 0.005,90"; + writeline plotfile, + "set arrow from " eb ", graph -0.01 to " ee ", graph -0.01 lc rgb 'dark-red' heads size graph 0.005,90"; + end if; + + plotfile := null; + + integer maxyrange; + # and a good y-axis for the normal res.plot + plotfile := resultsdir subdir runno "/res.plot"; + #if countentries and sumdbtime / countentries > 2.0 then + # maxyrange := 1.8 * sumdbtime / countentries; + # writeline plotfile, "set yrange [0:" maxyrange "]"; + #else + # writeline plotfile, "set yrange [0:4]"; + #end if; + writeline plotfile, "set yrange [0:*]"; + plotfile := null; + + # and instance distribution + # Query to generate plot data for instance distribution + # see instdist.rwl for more information + + integer i1, i2, i3, i4, i5, i6, i7, i8; + sql selinst_sql + select val1 i1, val2 i2, val3 i3, val4 i4 + , val5 i5, val6 i6, val7 i7, val8 i8 + , second from sysres + where runnumber=:runno + and resname = 'INSTCNT' + order by second + / + bind sql; + define sql; + array 100; + end; + + plotfile := resultsdir subdir runno "/instdist.csv"; + writeline plotfile, "second i1 i2 i3 i4 i5 i6 i7 i8"; + for selinst_sql loop + writeline plotfile, second, i1, i2, i3, i4, i5, i6, i7, i8; + end loop; + plotfile := null; + + # get the client side CPU stuff + double cliusr, clisys; + sql selcli select second, cliusr, clisys + from rwlcpu_a + where runnumber=:runno + order by second; + bind sql; define sql; + array 100; + end; + + # And get the counts of the processes + double cnt1, cnt2, cnt3, cnt4, cnt5, cnt6, cnt7, cnt8; + + sql getres_sql + select second + , nvl(cnt1,0) cnt1 + , nvl(cnt2,0) cnt2 + , nvl(cnt3,0) cnt3 + , nvl(cnt4,0) cnt4 + , nvl(cnt5,0) cnt5 + , nvl(cnt6,0) cnt6 + , nvl(cnt7,0) cnt7 + , nvl(cnt8,0) cnt8 + from + ( + select procno + , second + , scount + --, wtime + --, etime/scount avge + from persec where vname = 'mtit_count_ins_rows' + and runnumber = :runno + ) + pivot (sum(scount) + for procno in + ( 1 as cnt1 + , 2 as cnt2 + , 3 as cnt3 + , 4 as cnt4 + , 5 as cnt5 + , 6 as cnt6 + , 7 as cnt7 + , 8 as cnt8 + )) + order by second + / + bind sql; + define sql; + array 65; + end; + + # Create the CPU plot file + plotfile := resultsdir subdir runno "/cli.csv"; + writeline plotfile, "sec cliusr clisys"; + for selcli loop + fprintf plotfile, "%.2f %.3f %.3f\n", second, cliusr, clisys; + end loop; + plotfile := null; + + double wmean, wmeantot := 0.0; + integer entries, wmcount := 0; + # And the througput plot file + plotfile >= resultsdir || subdir || runno||"/mtit.csv"; + entries := 0; + for getres_sql loop + fprintf plotfile, "%.1f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f\n" + , second + , cnt1*0.001, cnt2*0.001 + , cnt3*0.001, cnt4*0.001 + , cnt5*0.001, cnt6*0.001 + , cnt7*0.001, cnt8*0.001; + entries += 1; + end loop; + plotfile := null; + + # create the ash csv file + + double ashcpu; + + integer esum; + integer maxesum := 0; + + sql ashcsv + select second||' '||cpu||' ' + ||e1||' ' + ||e2||' ' + ||e3||' ' + ||e4||' ' + ||e5||' ' + ||e6||' ' + ||e7||' ' + ||e8||' ' + ||other||' ' + , cpu + , e1+e2+e3+e4+e5+e6+e7+e8 esum + from ashdata + where runnumber = :1 + order by second + / + bind 1 runno; + define 1 csvline; + define 2 ashcpu, 3 esum; + array 100; + end; + + string event; + + # The data in this table, i.e. the event names + # matching E1 .. E8 comes from ashstep1.rwl + # We use this query both to write a comment + # to the csv file such that a human will know + # which events E1 .. E8 are, and to assemble + # the plotline for gnuplot + sql ashevents + select '# '||to_char(enum+2,'FM9')||': '||ename + , ename + from rwlash + where runnumber = :1 + order by enum; + bind 1 runno; + define 1 csvline, 2 event; + array 10; + end; + + plotfile := resultsdir subdir runno "/ash.csv"; + # first write the comments for human use + # and at the same time create the actual plot command for gnuplot + # which must be done here so the En numbers match the real event + # names + integer d, lc:=1; + writeline plotfile, "# columns are\n# 1: second\n# 2: CPU"; + sprintf plotline, "plot '%s%s%d/ash.csv' using 1:($2+$3+$4+$5+$6+$7+$8+$9+$10+$11) with boxes lc rgb 'gray' title 'Other'\\\n" + , resultsdir,subdir,runno ; + for ashevents loop + writeline plotfile, csvline; # Write comment to csv file for human understanding + sprintf || plotline, ", '%s%s%d/ash.csv' using 1:($2" + , resultsdir,subdir,runno; + for d:= lc..8 loop + sprintf || plotline , "+$%d",d+2; + end loop; + plotline ||= ") with boxes lc rgb '"; + # if there is resmgr:cpu quantum, make it bright green + if event = "resmgr:cpu quantum" then + plotline ||= "green"; + else + # otherwise + # well rwloadsim needs a switch or an array type..... + if lc=1 then plotline ||= "purple"; end if; + if lc=2 then plotline ||= "red"; end if; + if lc=3 then plotline ||= "orange"; end if; + if lc=4 then plotline ||= "blue"; end if; + if lc=5 then plotline ||= "light-blue"; end if; + if lc=6 then plotline ||= "salmon"; end if; + if lc=7 then plotline ||= "gold"; end if; + if lc=8 then plotline ||= "cyan"; end if; + end if; + plotline ||= "' title '" event "' \\\n"; + lc += 1; + end loop; + writeline plotfile, "# 11: Other"; + # note that CPU always gets a somewhat darker green + plotline ||= ", '" resultsdir subdir runno "/ash.csv' using 1:2 with boxes lc rgb 'forest-green' title 'CPU'"; + + integer ashcsvcount := 0; + double totashcpu := 0; + integer highcount := 0; # See if there are many with extreme counts + + # Now write the real data columns to the csv file + for ashcsv loop + writeline plotfile, csvline; + if ashcpu > 0 then + totashcpu += ashcpu; + end if; + if esum + ashcpu > maxesum then + maxesum := esum + ashcpu ; + end if; + + # what is "high" + if esum > 5 * ashcpu then + # Kind of arbitrary that waits > 5*cpu means high + highcount += 1; + end if; + ashcsvcount+= 1; + end loop; + plotfile := null; + + # Add the count of entries to csvmtitvars.sh such that + # runplot.sh later can avoid calling gnuplot if it + # doesn't make sense + plotfile >= resultsdir subdir runno "/csvmtitvars.sh"; + if ashcsvcount>2 then + fprintf plotfile, "ashcsvcount='%d'\n",ashcsvcount; + else + writeline plotfile, "ashcsvcount=0"; + end if; + plotfile := null; + + + maxyrange := null; + # Create a file that contains nothing but the plot line + # runplot.sh will later create the full input for gnuplot + plotfile := resultsdir subdir runno "/ashplotline.txt"; + #if ashcsvcount>10 then + # if highcount > 200 then + # # Very many are very high, let gnuplot decide + # # so true max is shown + # writeline plotfile, "set yrange [0:*]"; + # else + # if highcount > 100 then + # # Allow for some high + # maxyrange := round(0.75 * maxesum); + # else + # # Few very high, set cpu at 10% to see some others + # maxyrange := round(10.0 * totashcpu/ashcsvcount); + # end if; + # writeline plotfile, "set yrange [0:" maxyrange "]"; + # end if; + #else + writeline plotfile, "set yrange [0:*]"; + #end if; + writeline plotfile, plotline; + plotfile := null; + + plotfile >>= resultsdir subdir runno "/csvmtitvars.sh"; + #if maxyrange is not null and maxesum > maxyrange then + # fprintf plotfile,"ashnotice=' (max %d off scale)'\n", maxesum; + #else + writeline plotfile, "ashnotice=''"; + #end if; + + integer highinst; + + select max(greatest(val1, val2, val3, val4 + , val5, val6, val7, val8)) highinst + from sysres + where runnumber=:runno + and resname = 'INSTCNT' + / + + if highinst is not null then + fprintf plotfile,"highinst='%d'\n", highinst+1; + end if; + plotfile := null; + +end execute; diff --git a/oltp/mtit_create.sql b/oltp/mtit_create.sql new file mode 100644 index 00000000..26af3657 --- /dev/null +++ b/oltp/mtit_create.sql @@ -0,0 +1,72 @@ +rem +rem Copyright (c) 2023 Oracle Corporation +rem Licensed under the Universal Permissive License v 1.0 +rem as shown at https://oss.oracle.com/licenses/upl/ + +rem +rem Owner : bengsig +rem +rem Name +rem mtit_create.sql - Create Max Throughput Insert Tranaction +rem +rem History +rem bengsig 13-jun-2023 - set sequence max to 2^63 to fit in sb8 +rem bengsig 10-may-2023 - Creation + +create table aw_mtit_noix +( seq number not null +, rno number not null +, val number not null +, payload varchar2(2000) +) +/ + +create table aw_mtit_ix +( seq number not null +, rno number not null +, val number not null +, payload varchar2(2000) +, primary key (seq, rno) +) +/ + +create table aw_mtit_revix +( seq number not null +, rno number not null +, val number not null +, payload varchar2(2000) +, primary key (seq, rno) using index reverse +) +/ + +create table aw_mtit_ixp8 +( seq number not null +, rno number not null +, val number not null +, payload varchar2(2000) +, primary key (seq, rno) using index + global partition by hash(seq) + partitions 8 +) +/ + +create table aw_mtit_cdr +( typ number not null +, fno number not null +, seq number not null +, val number not null +, payload varchar2(2000) +, primary key (typ, fno, seq) +) +/ + +create sequence aw_mit_seq_small cache 20 maxvalue 9223372036854775800 +/ + +create sequence aw_mit_seq_large cache 20000 maxvalue 9223372036854775800 +/ + +create sequence aw_mit_seq_scale cache 20000 maxvalue 9223372036854775800 scale +/ + +exit diff --git a/oltp/mtit_declarations.rwl b/oltp/mtit_declarations.rwl new file mode 100644 index 00000000..887f8052 --- /dev/null +++ b/oltp/mtit_declarations.rwl @@ -0,0 +1,97 @@ +# Copyright (c) 2023 Oracle Corporation +# Licensed under the Universal Permissive License v 1.0 +# as shown at https://oss.oracle.com/licenses/upl/ + +# bengsig 23-apr-2023 - Creation + +# declare the mtit procedures + +# mtit_type values: + +integer mtit_max_payload := 400; + +# We want to show the actualy number of rows inserted +# so use this dummy procedure to gather statistics +procedure mtit_count_ins_rows() statistics + null; +end; + +private string(100) threads global mtit_tab, mtit_seq; + +procedure mtit_set_type() nostatistics + string seqplace; + if mtit_type/100 = 1 then + seqplace := " (preget)"; + else + seqplace := " (values)"; + end if; + if mtit_type%100 = 0 then + mtit_tab := "aw_mtit_noix"; mtit_seq := "aw_mit_seq_small"; + mtit_type_text := "no ix, sml seq" seqplace; + elseif mtit_type%100 = 1 then + mtit_tab := "aw_mtit_noix"; mtit_seq := "aw_mit_seq_large"; + mtit_type_text := "no ix, lrg seq" seqplace; + elseif mtit_type%100 = 2 then + mtit_tab := "aw_mtit_ix"; mtit_seq := "aw_mit_seq_large"; + mtit_type_text := "std ix, lrg seq" seqplace; + elseif mtit_type%100 = 3 then + mtit_tab := "aw_mtit_revix"; mtit_seq := "aw_mit_seq_large"; + mtit_type_text := "rev ix, lrg seq" seqplace; + elseif mtit_type%100 = 4 then + mtit_tab := "aw_mtit_ixp8"; mtit_seq := "aw_mit_seq_large"; + mtit_type_text := "part ix, lrg seq" seqplace; + elseif mtit_type%100 = 5 then + mtit_tab := "aw_mtit_ix"; mtit_seq := "aw_mit_seq_scale"; + mtit_type_text := "std ix, scl seq" seqplace; + else + mtit_tab := "aw_mtit_noix"; mtit_seq := "aw_mit_seq_small"; + mtit_type_text := "bad type=" mtit_type ": no ix, sml seq" seqplace; + end; +end; + +# don't gather statistics in the real procedure +procedure mtit_ins_rows() nostatistics + integer rno; + double val; + string(2000) payload; + string(2000) ovid2load; + ovid2load := ovidstring2(mtit_max_payload); + integer seq; # fits in sb8 - see mtit_create.sql + + sql mtit_get_seq + define sql; + end; + + sql mtit_ins_sql + bind sql; + end; + + if mtit_type / 100 = 1 then + # pre-get sequence + modify sql mtit_get_seq for + "select " mtit_seq ".nextval seq from dual"; + mtit_get_seq; + + # and make it unique via rno + modify sql mtit_ins_sql for + "insert into " mtit_tab " (seq, rno, val, payload) + values (:seq, :rno, :val, :payload)"; + else + # include seq in values clause + # and set rno to 0 + modify sql mtit_ins_sql for + "insert into " mtit_tab " (seq, rno, val, payload) + values (" mtit_seq ".nextval, 0, :val, :payload)"; + end if; + + modify sql mtit_ins_sql array mtit_array_size; + + # do the inserts + for rno := 1 .. mtit_rows_per_exec loop + val := uniform(0.0,1000.0); + sprintf payload, "%05d-%s-%05d", uniform(0,99999), ovid2load, uniform(0,99999); + mtit_ins_sql; + mtit_count_ins_rows(); + end loop; + commit; +end; diff --git a/oltp/mtit_drop.sql b/oltp/mtit_drop.sql new file mode 100644 index 00000000..26b0f50d --- /dev/null +++ b/oltp/mtit_drop.sql @@ -0,0 +1,39 @@ +rem +rem Copyright (c) 2023 Oracle Corporation +rem Licensed under the Universal Permissive License v 1.0 +rem as shown at https://oss.oracle.com/licenses/upl/ + +rem +rem Owner : bengsig +rem +rem Name +rem mtit_drop.sql - Drop Max Throughput Insert Tranaction objects +rem +rem History +rem bengsig 10-may-2023 - Creation + +drop table aw_mtit_noix purge +/ + +drop table aw_mtit_ix purge +/ + +drop table aw_mtit_revix purge +/ + +drop table aw_mtit_ixp8 purge +/ + +drop table aw_mtit_cdr purge +/ + +drop sequence aw_mit_seq_small +/ + +drop sequence aw_mit_seq_large +/ + +drop sequence aw_mit_seq_scale +/ + +exit diff --git a/oltp/mtit_grant.sql b/oltp/mtit_grant.sql new file mode 100644 index 00000000..66de5dff --- /dev/null +++ b/oltp/mtit_grant.sql @@ -0,0 +1,39 @@ +rem +rem Copyright (c) 2023 Oracle Corporation +rem Licensed under the Universal Permissive License v 1.0 +rem as shown at https://oss.oracle.com/licenses/upl/ + +rem +rem Owner : bengsig +rem +rem Name +rem mtit_grant.sql - Grant MTIT +rem +rem History +rem bengsig 10-may-2023 - Creation + +grant all on aw_mtit_noix to &&1 +/ + +grant all on aw_mtit_ix to &&1 +/ + +grant all on aw_mtit_revix to &&1 +/ + +grant all on aw_mtit_ixp8 to &&1 +/ + +grant all on aw_mtit_cdr to &&1 +/ + +grant all on aw_mit_seq_small to &&1 +/ + +grant all on aw_mit_seq_large to &&1 +/ + +grant all on aw_mit_seq_scale to &&1 +/ + +exit diff --git a/oltp/mtit_showparam.rwl b/oltp/mtit_showparam.rwl new file mode 100644 index 00000000..f74a72c9 --- /dev/null +++ b/oltp/mtit_showparam.rwl @@ -0,0 +1,39 @@ +# Copyright (c) 2023 Oracle Corporation +# Licensed under the Universal Permissive License v 1.0 +# as shown at https://oss.oracle.com/licenses/upl/ + +# bengsig 23-apr-2023 - Creation + +# show MTIT parameters + +integer htmlformat:=0; $userswitch:htmlformat + +$include:"parameters.rwl" +$include: +$include:"results.rwl" + +$include:"mtit_user.rwl" +$include:"mtit_declarations.rwl" + +$if mtit_xc $then + $include:"xc_implementation.rwl" + xc_read(0) at rwloadsim; +$endif + mtit_set_type(); + +if htmlformat then + printf "\n"; + printf "\n", mtit_threads; + printf "\n", mtit_type, mtit_type_text; + printf "\n", mtit_rows_per_exec; + printf "\n", mtit_array_size; + printf "\n", mtit_affinity; + printf "
mtit_threads%Nd
mtittype%Nd%s
rowspins%Nd
arraysize%Nd
affinity%N.3f
\n"; +else + printf "mtit_threads=%Nd\n", mtit_threads; + printf "mtittype='%s (%Nd)'\n", mtit_type_text, mtit_type; + printf "rowspins=%Nd\n", mtit_rows_per_exec; + printf "arraysize=%Nd\n", mtit_array_size; + printf "affinity=%N.3f\n", mtit_affinity; +end if; + diff --git a/oltp/mtit_synonym.sql b/oltp/mtit_synonym.sql new file mode 100644 index 00000000..025f2585 --- /dev/null +++ b/oltp/mtit_synonym.sql @@ -0,0 +1,39 @@ +rem +rem Copyright (c) 2023 Oracle Corporation +rem Licensed under the Universal Permissive License v 1.0 +rem as shown at https://oss.oracle.com/licenses/upl/ + +rem +rem Owner : bengsig +rem +rem Name +rem mtit_create.sql - Create mtit synonyms +rem +rem History +rem bengsig 10-may-2023 - Creation + +create or replace synonym aw_mtit_noix for &&1..aw_mtit_noix +/ + +create or replace synonym aw_mtit_ix for &&1..aw_mtit_ix +/ + +create or replace synonym aw_mtit_revix for &&1..aw_mtit_revix +/ + +create or replace synonym aw_mtit_ixp8 for &&1..aw_mtit_ixp8 +/ + +create or replace synonym aw_mtit_cdr for &&1..aw_mtit_cdr +/ + +create or replace synonym aw_mit_seq_small for &&1..aw_mit_seq_small +/ + +create or replace synonym aw_mit_seq_large for &&1..aw_mit_seq_large +/ + +create or replace synonym aw_mit_seq_scale for &&1..aw_mit_seq_scale +/ + +exit diff --git a/oltp/mtit_truncate.rwl b/oltp/mtit_truncate.rwl new file mode 100644 index 00000000..617857c5 --- /dev/null +++ b/oltp/mtit_truncate.rwl @@ -0,0 +1,40 @@ +# Copyright (c) 2023 Oracle Corporation +# Licensed under the Universal Permissive License v 1.0 +# as shown at https://oss.oracle.com/licenses/upl/ + +# bengsig 23-apr-2023 - Creation + +# truncate the MTIT tables + +$include:"parameters.rwl" +$include:"aw_user.rwl" + +execute at rwl_aw + + printline "Truncating mtit tables, restart sequences"; + + truncate table aw_mtit_noix reuse storage + / + + truncate table aw_mtit_ix reuse storage + / + + truncate table aw_mtit_revix reuse storage + / + + truncate table aw_mtit_ixp8 reuse storage + / + + truncate table aw_mtit_cdr reuse storage + / + + alter sequence aw_mit_seq_small restart + / + + alter sequence aw_mit_seq_large restart + / + + alter sequence aw_mit_seq_scale restart + / +end; + diff --git a/oltp/mtit_user.rwl b/oltp/mtit_user.rwl new file mode 100644 index 00000000..887de305 --- /dev/null +++ b/oltp/mtit_user.rwl @@ -0,0 +1,15 @@ +# Copyright (c) 2023 Oracle Corporation +# Licensed under the Universal Permissive License v 1.0 +# as shown at https://oss.oracle.com/licenses/upl/ + +# bengsig 23-apr-2023 - Creation + +# Create the ordinary database +# used for the mtit workload +# + +database rwl_run_mtit + username rwl_run1_username + password rwl_run1_password + connect pool_connect + dedicated; diff --git a/oltp/mtitplotwe.rwl b/oltp/mtitplotwe.rwl new file mode 100644 index 00000000..0d32bc87 --- /dev/null +++ b/oltp/mtitplotwe.rwl @@ -0,0 +1,131 @@ +# Copyright (c) 2023 Oracle Corporation +# Licensed under the Universal Permissive License v 1.0 +# as shown at https://oss.oracle.com/licenses/upl/ + +# bengsig 25-apr-2023 - Creation + +# running gnuplot of selected throughput + +$include:"parameters.rwl" +$include:"results.rwl" +$if mtit_xc $then + $include:"ovid2.rwl" + $include:"mtit_declarations.rwl" + $include:"xc_implementation.rwl" +$endif + + +private integer runno := $1; +subdir := "/r"||runno/1000||"/"; +private file plotfile; + +procedure plotweres(double xwidth) + + double minsec := 0.0; + integer ientries, entries; + + select max(second) minsec from sysres where runnumber=:runno + / + + if minsec is not null and minsec > xwidth+2 then + minsec := minsec - xwidth; + else + minsec := 0; + end if; + + # Query to generate plot data for throughput + double second; + double cnt1, cnt2, cnt3, cnt4, cnt5, cnt6, cnt7, cnt8; + + sql getres_sql + select second + , nvl(cnt1,0) cnt1 + , nvl(cnt2,0) cnt2 + , nvl(cnt3,0) cnt3 + , nvl(cnt4,0) cnt4 + , nvl(cnt5,0) cnt5 + , nvl(cnt6,0) cnt6 + , nvl(cnt7,0) cnt7 + , nvl(cnt8,0) cnt8 + from + ( + select procno + , second + , scount + --, wtime + --, etime/scount avge + from persec where vname = 'mtit_count_ins_rows' + and second > :minsec + and runnumber = :runno + ) + pivot (sum(scount) + for procno in + ( 1 as cnt1 + , 2 as cnt2 + , 3 as cnt3 + , 4 as cnt4 + , 5 as cnt5 + , 6 as cnt6 + , 7 as cnt7 + , 8 as cnt8 + )) + order by second + / + bind sql; + define sql; + array 65; +end; + +plotfile >= resultsdir || subdir || runno||"/mtit_we.csv"; +entries := 0; + for getres_sql loop + fprintf plotfile, "%.1f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f\n" + , second + , cnt1*0.001, cnt2*0.001 + , cnt3*0.001, cnt4*0.001 + , cnt5*0.001, cnt6*0.001 + , cnt7*0.001, cnt8*0.001; + entries += 1; + end loop; + plotfile := null; + + printline "## "; + if minsec<1.0 then + printline "set xrange [0:", xwidth, "]"; + else + printline "set xrange [", minsec, ":", minsec+xwidth, "]"; + end if; + printline "set yrange [0:*]"; + printline "#set y2range [0:*]"; + printline "set ytics nomirror"; + printline "#set y2tics"; + printline "set key bmargin horizontal"; + printline "set xlabel 'seconds since start'"; + printline "set ylabel 'thousand rows per second per process'"; + printline "#set y2label 'total throughput'"; + # Avoid really starting plots until there is at least three lines of data + if entries>=3 then + + printline + "plot '"||resultsdir || subdir||runno||"/mtit_we.csv' using 1:2 with lines lc rgb 'blue' title '1'" + || ", '"||resultsdir || subdir||runno||"/mtit_we.csv' using 1:3 with lines lc rgb 'cyan' title '2'" + || ", '"||resultsdir || subdir||runno||"/mtit_we.csv' using 1:4 with lines lc rgb 'dark-green' title '3'" + || ", '"||resultsdir || subdir||runno||"/mtit_we.csv' using 1:5 with lines lc rgb 'light-green' title '4'" + || ", '"||resultsdir || subdir||runno||"/mtit_we.csv' using 1:6 with lines lc rgb 'red' title '5'" + || ", '"||resultsdir || subdir||runno||"/mtit_we.csv' using 1:7 with lines lc rgb 'dark-orange' title '6'" + || ", '"||resultsdir || subdir||runno||"/mtit_we.csv' using 1:8 with lines lc rgb 'orange' title '7'" + || ", '"||resultsdir || subdir||runno||"/mtit_we.csv' using 1:9 with lines lc rgb 'green' title '8'" + ; + end; + fflush stdout; +end; + +execute at rwloadsim + for every 2 stop runperiod loop + plotweres(runplot_width); + $if mtit_xc $then xc_read(0); if xc_stopnow=1 or xc_stopnow=2 then break; end; $endif + end; + wait(2); + plotweres(runperiod); +end; + diff --git a/oltp/mtitrun.rwl b/oltp/mtitrun.rwl new file mode 100644 index 00000000..2f6025a6 --- /dev/null +++ b/oltp/mtitrun.rwl @@ -0,0 +1,100 @@ +# Copyright (c) 2023 Oracle Corporation +# Licensed under the Universal Permissive License v 1.0 +# as shown at https://oss.oracle.com/licenses/upl/ + +# bengsig 23-apr-2023 - Creation + +# make the MTIT run + +$statistics:all + +$include:"parameters.rwl" + +$include:"results.rwl" + +$include:"ovid2.rwl" + +$include:"mtit_user.rwl" +$include:"mtit_declarations.rwl" + +$if mtit_xc $then + $include:"xc_implementation.rwl" + +xc_read(procnumber=1) at rwloadsim; + +$endif + +mtit_set_type(); +if procnumber=1 then + printline mtit_type_text; +end if; + +# printline ">>>>>runperiod=" runperiod "<<<<<"; + +# This is the command that really does everything! +run + +$if mtit_xc $then + threads 1 at rwloadsim + for start uniform(0.0,xc_refresh) every xc_refresh stop runperiod loop + xc_read(procnumber=1); + if xc_stopnow=1 or xc_stopnow=2 then break; end if; + end loop; + if xc_stopnow=1 or xc_stopnow=2 then + if doawr then + wait 20; # Allow some time for flushing things + else + wait 1; + end if; + xc_kill("process " procnumber); + end if; + end; +$endif + + # start the real workers + + # This is the large number of common threads that emulate + # online users doing stuff + threads mtit_threads at rwl_run_mtit + for + start threadnumber * rampfactor # ramp up + stop runperiod + loop + # printline "thread " threadnumber " calling mtit_ins_rows at " runseconds(); + mtit_ins_rows(); +$if mtit_xc $then + if xc_stopnow=1 or xc_stopnow=2 then break; end if; +$endif + end loop; + end; + + # Have a thread collecting own usr/sys + threads 1 at rwloadsim + double lastusr, lastsys, lastsec, thisusr, thissys, thissec; + double usr,sys,sec; + integer actpool := 0, actbatch := 0, openpool := 0; + # note that you must create the table rwlcpu in the + # repository schema using rwl_rwlcpu.sql + sql insrwlcpu insert into rwlcpu(runnumber,procno,cliusr,clisys,second) + values (:1,:2,:3,:4,:5); + bind 1 runnumber, 2 procnumber, 3 usr, 4 sys, 5 thissec; + end; + getrusage; # Call is necessary to make usrseconds, sysseconds recent + lastusr := usrseconds; lastsys:= sysseconds; lastsec := runseconds(); + wait 1; + for + every 1 stop runperiod+2 + loop + getrusage; + thisusr := usrseconds; thissys:= sysseconds; thissec := runseconds(); + usr:=(thisusr-lastusr)/(thissec-lastsec); sys:=(thissys-lastsys)/(thissec-lastsec); + insrwlcpu; commit; + lastusr := thisusr; lastsys:= thissys; lastsec :=thissec; +$if mtit_xc $then + if xc_stopnow=1 or xc_stopnow=2 then break; end if; +$endif + end loop; + end; + +end run; + diff --git a/oltp/oe_handle_orders.rwl b/oltp/oe_handle_orders.rwl index 9bc396bb..7c8b3b86 100644 --- a/oltp/oe_handle_orders.rwl +++ b/oltp/oe_handle_orders.rwl @@ -793,7 +793,7 @@ procedure query_order(integer withdesc) #withdesc true means to fetch product_de order_id := uniform(min_order_query, max_order_id); $if xc_enabled $then - if uniform(1.0,2.0) < xc_hardparse then + if uniform(0.0,1.0) < xc_hardparse then for sql execute "select to_char(order_date,'DD.MM.YYYY') @@ -870,7 +870,7 @@ $if xc_enabled $then end loop; end if; $else - if uniform(1.0,2.0) < fix_hardparse then + if uniform(0.0,1.0) < fix_hardparse then for sql execute "select to_char(order_date,'DD.MM.YYYY') diff --git a/oltp/oltp.rwl b/oltp/oltp.rwl index 40b5a479..a80f502c 100644 --- a/oltp/oltp.rwl +++ b/oltp/oltp.rwl @@ -287,6 +287,12 @@ gnuplotjs := "/usr/share/gnuplot/4.6/js"; # the workload. Initially, leave it at the default. # ratefactor := 0.2; # proportionally changes load (default 0.2) +# Without time_out (i.e. default/null) the queue may grow very long +# If set to a value of 0 or more, transaction that are too late +# will fail and registered as vname=call_failure +# time_out := null; + + # Rather than a constant workload, you can make it gradually increase # during the run by setting rategradient. # If set to NULL or 0, same rate through whole run; this is the default @@ -345,7 +351,7 @@ rwl_daily_html := "daily.html"; # xc_logoffrate := 0.0; # logoff rate, used to cause increased logon rate # Some can also be set when xc_control is not used -# fix_hardparse := 0.0; # set hard parse level range [0;2] +# fix_hardparse := 0.0; # set hard parse level range [0;1] # fix_logoffrate := 0.0; # in the range [0;1], default null (don't do it) # fix_cursorleak := 0.0; # in the range ]0;1[ - start with very low values, default null diff --git a/oltp/parameters.rwl b/oltp/parameters.rwl index fae87464..f41f19ea 100644 --- a/oltp/parameters.rwl +++ b/oltp/parameters.rwl @@ -2,6 +2,7 @@ # Licensed under the Universal Permissive License v 1.0 # as shown at https://oss.oracle.com/licenses/upl/ +# bengsig 15-may-2023 - Add time_out # bengsig 9-may-2023 - Gradual badplan and hardparse # bengsig 24-apr-2023 - mtit # bengsig 21-mar-2023 - Connection pool @@ -28,6 +29,11 @@ $errortime:on # per process on a 2GHz CPU. Higher values means proportionally higher load double ratefactor := 0.2; +# Do we time out? +double time_out;# NULL (default) means don't do it otherwise + # time out if runseconds() > everyuntil + time_out; + + double rategradient; # NULL or 0, same rate through whole run # otherwise multiply ratefactor by 1+gradient*(runseconds()-runperiod/2)/(runperiod/2) @@ -584,6 +590,9 @@ if show_changed_values then if xc_enabled then printline "External Control is enabled"; end if; + if time_out is not null then + printf "Time out in stead of call when runseconds() > everyuntil+%.2f\n", time_out; + end if; end if; string svgmouse ; diff --git a/oltp/parameters2shell.rwl b/oltp/parameters2shell.rwl index ab3c12c4..886e448f 100644 --- a/oltp/parameters2shell.rwl +++ b/oltp/parameters2shell.rwl @@ -79,6 +79,12 @@ if not only_plus and not only_directories then printline "largeashok=no"; end if; + if time_out is not null then + printline "showfail=yes"; + else + printline "showfail=no"; + end if; + printline "svgmouse=\"" svgmouse "\""; printline "xc_enabled='"||xc_enabled||"'"; diff --git a/oltp/plotfigures.rwl b/oltp/plotfigures.rwl index 07c4961e..192c87c8 100644 --- a/oltp/plotfigures.rwl +++ b/oltp/plotfigures.rwl @@ -134,6 +134,9 @@ procedure plotfigures(double xwidth) else printline "set xrange [", minsec, ":", minsec+xwidth, "]"; end if; +$if xc_enabled $then + printline "set y2range [0:*]"; +$else if entries > 3 and ! plot_cpu_only then double ymax; ymax := 3.0*dbcpusum/entries; @@ -144,6 +147,7 @@ procedure plotfigures(double xwidth) else printline "set y2range [0:*]"; end if; +$endif printline "set yrange [0:*]"; printline "set y2tics"; printline "set ytics nomirror"; diff --git a/oltp/plotruntp.rwl b/oltp/plotruntp.rwl index 11f61930..c81db5be 100644 --- a/oltp/plotruntp.rwl +++ b/oltp/plotruntp.rwl @@ -40,7 +40,7 @@ procedure plotruntp(double xwidth) end if; # Query to generate plot data for throughput - double second, count1, count2, count3, count4, count5, count6, count7, count8, count9; + double second, count1, count2, count3, count4, count5, count6, count7, count8, cntfail; sql seltps_sql select @@ -53,6 +53,7 @@ procedure plotruntp(double xwidth) , nvl(aw_transaction,0) , nvl(query_order,0) , second + , nvl(call_failure,0) from ( select vname, second, scount from @@ -68,6 +69,7 @@ procedure plotruntp(double xwidth) , 'complex_query' as complex_query , 'awindex_query' as awindex_query , 'aw_transaction' as aw_transaction + , 'call_failure' as call_failure , 'query_order' as query_order ) ) order by second @@ -77,6 +79,7 @@ procedure plotruntp(double xwidth) define 4 count4, 5 count5, 6 count6, 7 count7; define 8 count8; define 9 second; + define 10 cntfail; array 65; end; @@ -84,7 +87,7 @@ procedure plotruntp(double xwidth) entries := 0; for seltps_sql loop writeline plotfile, second - , count1, count2, count3, count4, count5, count6, count7, count8, count9; + , count1, count2, count3, count4, count5, count6, count7, count8, cntfail; entries += 1; end loop; plotfile := null; @@ -122,6 +125,9 @@ procedure plotruntp(double xwidth) || ", '"||resultsdir || subdir||runno||"/run_tput.csv' using 1:5 with lines lc 6 axes x1y1 title 'searchproducts'" || ", '"||resultsdir || subdir||runno||"/run_tput.csv' using 1:7 with lines lc 7 axes x1y1 title 'awindex_query'" || ", '"||resultsdir || subdir||runno||"/run_tput.csv' using 1:8 with lines lc 8 title 'aw_transaction'" +$if time_out is not null $then + || ", '"||resultsdir || subdir||runno||"/run_tput.csv' using 1:10 with lines lc rgb 'black' title 'dropped'" +$endif ; end; fflush stdout; diff --git a/oltp/plotrunwetim.rwl b/oltp/plotrunwetim.rwl index 561f0f12..22ba546b 100644 --- a/oltp/plotrunwetim.rwl +++ b/oltp/plotrunwetim.rwl @@ -42,7 +42,7 @@ procedure plotweres(double xwidth) double second, mo_wt, mo_et, mo_cnt; double qo_wt, qo_et, qo_cnt; double ai_wt, ai_et, ai_cnt; - double total_cnt; + double total_cnt, fail_cnt; sql getres_sql select @@ -57,6 +57,7 @@ procedure plotweres(double xwidth) + nvl(complex_query_cnt,0) + nvl(awindex_query_cnt,0) + nvl(aw_transaction_cnt,0) total_cnt + , nvl(call_failure_cnt,0) fail_cnt , second from ( select vname, second, wtime, etime, scount @@ -77,7 +78,8 @@ procedure plotweres(double xwidth) , 'complex_query' as complex_query , 'awindex_query' as awindex_query , 'aw_transaction' as aw_transaction - , 'query_order' as query_order ) + , 'query_order' as query_order + , 'call_failure' as call_failure) ) order by second / @@ -90,12 +92,12 @@ procedure plotweres(double xwidth) entries := 0; for getres_sql loop if mo_cnt > 0 and qo_cnt > 0 and ai_cnt > 0 then - fprintf plotfile, "%.1f %.3f %.3f %.3f %.3f %.3f %.3f %.0f\n" + fprintf plotfile, "%.1f %.3f %.3f %.3f %.3f %.3f %.3f %.0f %.0f\n" , second , 1e3*mo_wt/mo_cnt, 1e3*mo_et/mo_cnt , 1e3*qo_wt/qo_cnt, 1e3*qo_et/qo_cnt , 1e3*ai_wt/ai_cnt, 1e3*ai_et/ai_cnt - , total_cnt; + , total_cnt, fail_cnt; entries += 1; end if; end loop; @@ -126,6 +128,9 @@ procedure plotweres(double xwidth) || ", '"||resultsdir || subdir||runno||"/run_we.csv' using 1:($6+$7) with lines lc rgb 'dark-orange' title 'awqry total'" || ", '"||resultsdir || subdir||runno||"/run_we.csv' using 1:6 with lines lc rgb 'orange' title 'awqry queue'" || ", '"||resultsdir || subdir||runno||"/run_we.csv' using 1:8 with lines lc rgb 'red' axes x1y2 title 'throughput'" +$if time_out is not null $then + || ", '"||resultsdir || subdir||runno||"/run_we.csv' using 1:9 with lines lc rgb 'pink' axes x1y2 title 'dropped'" +$endif ; end; fflush stdout; diff --git a/oltp/run.rwl b/oltp/run.rwl index 5b453e59..18b357f6 100644 --- a/oltp/run.rwl +++ b/oltp/run.rwl @@ -74,7 +74,7 @@ procedure stockup() statistics warehouse_received := warehouse_received + 1; end; -random procedure array doeither +random procedure array call_real ( makeorder makeorder_weight , shiporders shiporder_weight , makeinvoices makeinvoices_weight @@ -86,6 +86,23 @@ random procedure array doeither , queryorder queryorder_weight ); +procedure call_failure() statisticsonly + null; +end; + +procedure doeither() +$if time_out is not null $then + if runseconds() > everyuntil+time_out then + call_failure(); + else + call_real(); + end if; +$else + call_real(); +$endif +end; + + # Called in the beginning of each process # if you observe that it returns a number larger than 0.00 diff --git a/oltp/tags b/oltp/tags index abedc24d..df046952 100644 --- a/oltp/tags +++ b/oltp/tags @@ -27,111 +27,145 @@ a8sum col_averages.rwl 26 a9 col_averages.rwl 18 a9cnt col_averages.rwl 36 a9sum col_averages.rwl 27 -aburst_post_factor parameters.rwl 158 -aburst_pre_factor parameters.rwl 157 -aburst_start parameters.rwl 159 -aburst_workers parameters.rwl 156 -actbatch csvdata.rwl 218 -actbatch run.rwl 407 -action runsys.rwl 48 -activeses plotfigures.rwl 55 -actpool csvdata.rwl 218 -actpool run.rwl 407 +aburst_post_factor parameters.rwl 161 +aburst_pre_factor parameters.rwl 160 +aburst_start parameters.rwl 162 +aburst_workers parameters.rwl 159 +actbatch csvdata.rwl 219 +actbatch mtitrun.rwl 75 +actbatch run.rwl 408 +action runsys.rwl 49 +activeses plotfigures.rwl 56 +actpool csvdata.rwl 219 +actpool mtitrun.rwl 75 +actpool run.rwl 408 add_inventory oe_handle_products.rwl 57 -ai_exec csvdata.rwl 366 -ai_wait csvdata.rwl 366 +affinity xcchange.rwl 37 +ai_cnt plotrunwetim.rwl 44 +ai_et plotrunwetim.rwl 44 +ai_exec csvdata.rwl 367 +ai_sleep_avg parameters.rwl 292 +ai_sleep_fac parameters.rwl 296 +ai_wait csvdata.rwl 367 +ai_wt plotrunwetim.rwl 44 al1 oe_fillcustomers.rwl 11 al2 oe_fillcustomers.rwl 11 al3 oe_fillcustomers.rwl 11 -aosecond plotfigures.rwl 55 -ashcpu csvdata.rwl 496 -ashcsv csvdata.rwl 501 -ashcsvcount csvdata.rwl 578 -ashevents csvdata.rwl 530 -ashstep1 ashstep1.rwl 28 +aosecond plotfigures.rwl 56 +ashcpu csvdata.rwl 497 +ashcpu csvmtit.rwl 292 +ashcsv csvdata.rwl 502 +ashcsv csvmtit.rwl 297 +ashcsvcount csvdata.rwl 583 +ashcsvcount csvmtit.rwl 378 +ashevents csvdata.rwl 533 +ashevents csvmtit.rwl 328 +ashstep1 ashstep1.rwl 31 avgw histdata.rwl 78 avgw scalefract.rwl 33 -aw_cols_256MB_doublings parameters.rwl 122 +aw_cols_256MB_doublings parameters.rwl 125 aw_cols_dbl aw_cols.rwl 15 aw_cols_mb aw_cols.rwl 228 aw_cols_mb aw_sizeinfo.rwl 15 aw_cols_mb_qry aw_cols.rwl 229 -aw_cols_query_factor parameters.rwl 131 -aw_cols_skew parameters.rwl 129 -aw_exec csvdata.rwl 366 -aw_instances aw_declarations.rwl 98 -aw_instances parameters.rwl 142 -aw_myinst aw_declarations.rwl 100 +aw_cols_query_factor parameters.rwl 134 +aw_cols_skew parameters.rwl 132 +aw_exec csvdata.rwl 367 +aw_instances aw_declarations.rwl 99 +aw_instances parameters.rwl 145 +aw_myinst aw_declarations.rwl 101 +aw_sleep_avg parameters.rwl 292 +aw_sleep_fac parameters.rwl 295 aw_stats aw_cols.rwl 221 -aw_transaction aw_declarations.rwl 106 -aw_transaction_weight parameters.rwl 87 -aw_transactions_made aw_declarations.rwl 13 +aw_transaction aw_declarations.rwl 107 +aw_transaction_weight parameters.rwl 90 +aw_transactions_made aw_declarations.rwl 14 aw_truncate aw_truncate.rwl 13 -aw_verbose parameters.rwl 135 -aw_wait csvdata.rwl 366 +aw_verbose parameters.rwl 138 +aw_wait csvdata.rwl 367 awc_parallel aw_cols.rwl 185 -awindex_query aw_declarations.rwl 237 -awindex_query_weight parameters.rwl 88 -awlen aw_declarations.rwl 235 -awqry aw_declarations.rwl 243 -awrbb_tim runsys.rwl 177 -awrbe_tim runsys.rwl 177 -awrdirectory parameters.rwl 208 -awreb_tim runsys.rwl 177 -awree_tim runsys.rwl 177 +awindex_query aw_declarations.rwl 241 +awindex_query_weight parameters.rwl 91 +awlen aw_declarations.rwl 239 +awqry aw_declarations.rwl 247 +awrbb_tim runsys.rwl 178 +awrbe_tim runsys.rwl 178 +awrdirectory parameters.rwl 214 +awreb_tim runsys.rwl 178 +awree_tim runsys.rwl 178 awrinfo oltpawr.rwl 102 awrinfo oltpawr.rwl 89 -awrinstfile parameters.rwl 173 +awrinstfile parameters.rwl 176 awrline oltpawr.rwl 53 awrmode oltpawr.rwl 20 awrout oltpawr.rwl 18 awrtim_save oltpawr.rwl 194 -b_fill aw_declarations.rwl 19 -b_rwnum aw_declarations.rwl 16 -b_tokid aw_declarations.rwl 15 -b_val aw_declarations.rwl 18 -badplan xcchange.rwl 22 -batch_connect parameters.rwl 229 -batch_type parameters.rwl 230 -bb csvdata.rwl 153 +b_fill aw_declarations.rwl 20 +b_rwnum aw_declarations.rwl 17 +b_tokid aw_declarations.rwl 16 +b_val aw_declarations.rwl 19 +badplan xcchange.rwl 24 +batch_connect parameters.rwl 235 +batch_type parameters.rwl 236 +bb csvdata.rwl 154 +bb csvmtit.rwl 151 bb oltpawr.rwl 194 -be csvdata.rwl 153 +be csvdata.rwl 154 +be csvmtit.rwl 151 be oltpawr.rwl 194 begawrsql oltpawr.rwl 24 beginawr oltpawr.rwl 75 begsnap oltpawr.rwl 17 -bgcpu csvdata.rwl 87 -bgcpu plotfigures.rwl 86 -blockcontention xcchange.rwl 23 +bgcpu csvdata.rwl 88 +bgcpu csvmtit.rwl 77 +bgcpu plotfigures.rwl 87 bucktim histdata.rwl 19 -burst_factor parameters.rwl 148 -burst_length parameters.rwl 147 -burst_start parameters.rwl 146 -c aw_declarations.rwl 241 -can_ship oe_handle_orders.rwl 443 +burst_factor parameters.rwl 151 +burst_length parameters.rwl 150 +burst_start parameters.rwl 149 +c aw_declarations.rwl 245 +can_ship oe_handle_orders.rwl 451 category_id oe_handle_products.rwl 21 ccnt oe_fillcustomers.rwl 15 check_results create_schemas.rwl 52 -chi aw_declarations.rwl 240 +chi aw_declarations.rwl 244 cid oe_fillcustomers.rwl 8 cid oe_fillproducts.rwl 11 clim oe_fillcustomers.rwl 12 -clisys csvdata.rwl 217 -cliusr csvdata.rwl 217 -clo aw_declarations.rwl 240 +clisys csvdata.rwl 218 +clisys csvmtit.rwl 216 +cliusr csvdata.rwl 218 +cliusr csvmtit.rwl 216 +clo aw_declarations.rwl 244 cnt aw_cols.rwl 206 -cnt aw_declarations.rwl 241 +cnt aw_declarations.rwl 245 cnt check_for_key.rwl 18 cnt oe_long_session.rwl 11 cnt oerhtml.rwl 16 -cntl oe_handle_orders.rwl 639 +cnt1 csvmtit.rwl 226 +cnt1 mtitplotwe.rwl 38 +cnt2 csvmtit.rwl 226 +cnt2 mtitplotwe.rwl 38 +cnt3 csvmtit.rwl 226 +cnt3 mtitplotwe.rwl 38 +cnt4 csvmtit.rwl 226 +cnt4 mtitplotwe.rwl 38 +cnt5 csvmtit.rwl 226 +cnt5 mtitplotwe.rwl 38 +cnt6 csvmtit.rwl 226 +cnt6 mtitplotwe.rwl 38 +cnt7 csvmtit.rwl 226 +cnt7 mtitplotwe.rwl 38 +cnt8 csvmtit.rwl 226 +cnt8 mtitplotwe.rwl 38 +cntl oe_handle_orders.rwl 647 comment aw_cols.rwl 25 -complex_count oe_handle_orders.rwl 631 -complex_query oe_handle_orders.rwl 633 -complex_query_weight parameters.rwl 85 -complex_sum oe_handle_orders.rwl 630 -cone aw_declarations.rwl 240 -could_not_ship oe_handle_orders.rwl 323 +complex_count oe_handle_orders.rwl 639 +complex_query oe_handle_orders.rwl 641 +complex_query_weight parameters.rwl 88 +complex_sum oe_handle_orders.rwl 638 +cone aw_declarations.rwl 244 +could_not_ship oe_handle_orders.rwl 331 count1 histdata.rwl 19 count1 plotruntp.rwl 43 count2 histdata.rwl 19 @@ -149,179 +183,213 @@ count7 plotruntp.rwl 43 count8 histdata.rwl 19 count8 plotruntp.rwl 43 count9 plotruntp.rwl 43 -countentries csvdata.rwl 82 -countres plotfigures.rwl 27 +countentries csvdata.rwl 83 +countentries csvmtit.rwl 72 +countres plotfigures.rwl 28 country oe_fillcustomers.rwl 42 -cq_exec csvdata.rwl 365 -cq_wait csvdata.rwl 366 +cq_exec csvdata.rwl 366 +cq_wait csvdata.rwl 367 create_aw_cols aw_cols.rwl 51 create_aw_seq aw_cols.rwl 47 -cruser_connect parameters.rwl 214 -cruser_password parameters.rwl 216 +cruser_connect parameters.rwl 220 +cruser_password parameters.rwl 222 cruser_username command line 1 -cruser_username parameters.rwl 215 +cruser_username parameters.rwl 221 cruserdb cruserdb.rwl 8 -csvline csvdata.rwl 491 +csvline csvdata.rwl 492 +csvline csvmtit.rwl 15 csvname scalefract.rwl 21 -ctwo aw_declarations.rwl 240 -cursor_cache_size parameters.rwl 43 -cursorleak xcchange.rwl 18 -customer_id oe_handle_orders.rwl 328 -customer_id oe_handle_orders.rwl 568 -customer_id oe_handle_orders.rwl 697 +ctwo aw_declarations.rwl 244 +cursor_cache_size parameters.rwl 46 +cursorleak xcchange.rwl 20 +customer_id oe_handle_orders.rwl 336 +customer_id oe_handle_orders.rwl 576 +customer_id oe_handle_orders.rwl 705 customer_id oe_handle_orders.rwl 73 -d csvdata.rwl 546 -d_fill aw_declarations.rwl 19 -d_rwnum aw_declarations.rwl 16 -d_tokid aw_declarations.rwl 15 -d_val aw_declarations.rwl 18 -datediff csvdata.rwl 42 -dbcpu csvdata.rwl 87 -dbcpu plotfigures.rwl 86 -dbcpusum plotfigures.rwl 21 +d csvdata.rwl 549 +d csvmtit.rwl 344 +d_fill aw_declarations.rwl 20 +d_rwnum aw_declarations.rwl 17 +d_tokid aw_declarations.rwl 16 +d_val aw_declarations.rwl 19 +datediff csvdata.rwl 43 +datediff csvmtit.rwl 32 +dbcpu csvdata.rwl 88 +dbcpu csvmtit.rwl 77 +dbcpu plotfigures.rwl 87 +dbcpusum plotfigures.rwl 22 dbdomain prepare.rwl 69 dbid oltpawr.rwl 17 dbl aw_cols.rwl 206 dbname prepare.rwl 68 -dbtime csvdata.rwl 87 -dbtime plotfigures.rwl 86 -dbtimesum plotfigures.rwl 21 +dbtime csvdata.rwl 88 +dbtime csvmtit.rwl 77 +dbtime plotfigures.rwl 87 +dbtimesum plotfigures.rwl 22 dbversion prepare.rwl 63 ddl aw_cols.rwl 25 ddl create_schemas.rwl 19 ddl drop_schemas.rwl 15 debug_products oe_handle_products.rwl 12 -default_tablespace parameters.rwl 220 -delay_length parameters.rwl 163 -delay_max_pool parameters.rwl 166 -delay_min_pool parameters.rwl 165 -delay_start parameters.rwl 164 +default_tablespace parameters.rwl 226 +delay_length parameters.rwl 166 +delay_max_pool parameters.rwl 169 +delay_min_pool parameters.rwl 168 +delay_start parameters.rwl 167 deltmpitem oepartalloc.rwl 43 deltmpord oepartalloc.rwl 37 -descl oe_handle_orders.rwl 697 +descl oe_handle_orders.rwl 705 disable_bloom oltpawr.rwl 46 -dist_count runsys.rwl 46 -dist_inst runsys.rwl 46 -dist_usrn runsys.rwl 47 -doawr parameters.rwl 168 -doeither run.rwl 76 -dontdo_batch1 parameters.rwl 306 -dontdo_batch2 parameters.rwl 307 -dontdo_batch3 parameters.rwl 308 -dontdo_batch4 parameters.rwl 309 -dontdolong parameters.rwl 72 -doociping run.rwl 142 +dist_count runsys.rwl 47 +dist_inst runsys.rwl 47 +dist_usrn runsys.rwl 48 +doawr parameters.rwl 171 +doeither run.rwl 77 +dontdo_batch1 parameters.rwl 341 +dontdo_batch2 parameters.rwl 342 +dontdo_batch3 parameters.rwl 343 +dontdo_batch4 parameters.rwl 344 +dontdolong parameters.rwl 75 +doociping run.rwl 143 drop_aw_cols aw_cols.rwl 37 drop_aw_seq aw_cols.rwl 42 dropuser drop_schemas.rwl 13 duping runping.rwl 34 -eb csvdata.rwl 153 +eb csvdata.rwl 154 +eb csvmtit.rwl 151 eb oltpawr.rwl 194 -ecount ashstep1.rwl 31 -ee csvdata.rwl 153 +ecount ashstep1.rwl 34 +ee csvdata.rwl 154 +ee csvmtit.rwl 151 ee oltpawr.rwl 194 email oe_fillcustomers.rwl 13 endawr oltpawr.rwl 83 endawrsql oltpawr.rwl 37 endsnap oltpawr.rwl 17 -entries plotfigures.rwl 28 +entries csvmtit.rwl 275 +entries mtitplotwe.rwl 25 +entries plotfigures.rwl 29 entries plotruntp.rwl 25 -enum ashstep1.rwl 48 -esum csvdata.rwl 498 -event ashstep1.rwl 30 -event csvdata.rwl 522 -evgroup ashstep1.rwl 33 -extrapct aw_declarations.rwl 95 +entries plotrunwetim.rwl 24 +enum ashstep1.rwl 51 +envline kommentops.rwl 18 +esum csvdata.rwl 499 +esum csvmtit.rwl 294 +event ashstep1.rwl 33 +event csvdata.rwl 525 +event csvmtit.rwl 320 +evgroup ashstep1.rwl 36 +extrapct aw_declarations.rwl 96 finishtime prepare.rwl 16 first1530 aw_cols.rwl 79 first_instances oerhtmlday.rwl 25 -fix_cursorleak parameters.rwl 267 -fix_hardparse parameters.rwl 266 -fix_logoffrate parameters.rwl 268 +fix_cursorleak parameters.rwl 272 +fix_hardparse parameters.rwl 271 +fix_logoffrate parameters.rwl 273 fna oe_fillcustomers.rwl 9 -forever_proccount parameters.rwl 55 +forever_proccount parameters.rwl 58 +found kommentops.rwl 17 +fulldir kommentops.rwl 20 fullname prepare.rwl 62 fulltitle prepare.rwl 9 -g_fill aw_declarations.rwl 19 -g_rwnum aw_declarations.rwl 16 -g_tokid aw_declarations.rwl 15 -g_val aw_declarations.rwl 18 +g_fill aw_declarations.rwl 20 +g_rwnum aw_declarations.rwl 17 +g_tokid aw_declarations.rwl 16 +g_val aw_declarations.rwl 19 generateawr oltpawr.rwl 99 -get_inst aw_declarations.rwl 102 +get_inst aw_declarations.rwl 103 get_pcount runtrunc.rwl 42 get_pref_inst oltpawr.rwl 114 getawrhtml oltpawr.rwl 64 getawrtext oltpawr.rwl 56 getdbname prepare.rwl 70 -getpoolsizes runsys.rwl 91 +getpoolsizes runsys.rwl 92 getrdate prepare.rwl 24 -gnuplotjs parameters.rwl 199 +getres_sql csvmtit.rwl 228 +getres_sql mtitplotwe.rwl 40 +getres_sql plotrunwetim.rwl 47 +gnuplotjs parameters.rwl 205 grp check_directories.rwl 10 hadit oerhtmlday.rwl 92 -halfperiod parameters.rwl 312 -hardparse xcchange.rwl 21 -heartbeat run.rwl 134 -highcount csvdata.rwl 580 +halfperiod parameters.rwl 347 +hardparse xcchange.rwl 23 +heartbeat run.rwl 135 +highcount csvdata.rwl 585 +highcount csvmtit.rwl 380 +highinst csvmtit.rwl 445 histrow histdata.rwl 60 -htmlline csvdata.rwl 673 +htmlformat mtit_showparam.rwl 9 +htmlline csvdata.rwl 678 htmlxtra oltpawr.rwl 72 -human parameters2shell.rwl 23 +human parameters2shell.rwl 24 +i /home/bengsig/rwloadsim/public/ovid2.rwl 7077 i aw_cols.rwl 206 -i1 csvdata.rwl 195 +i1 csvdata.rwl 196 +i1 csvmtit.rwl 194 i1 instdist.rwl 12 i1 oerhtmlday.rwl 17 -i2 csvdata.rwl 195 +i2 csvdata.rwl 196 +i2 csvmtit.rwl 194 i2 instdist.rwl 12 i2 oerhtmlday.rwl 17 -i3 csvdata.rwl 195 +i3 csvdata.rwl 196 +i3 csvmtit.rwl 194 i3 instdist.rwl 12 i3 oerhtmlday.rwl 17 -i4 csvdata.rwl 195 +i4 csvdata.rwl 196 +i4 csvmtit.rwl 194 i4 instdist.rwl 12 i4 oerhtmlday.rwl 17 -i5 csvdata.rwl 195 +i5 csvdata.rwl 196 +i5 csvmtit.rwl 194 i5 instdist.rwl 12 i5 oerhtmlday.rwl 17 -i6 csvdata.rwl 195 +i6 csvdata.rwl 196 +i6 csvmtit.rwl 194 i6 instdist.rwl 12 i6 oerhtmlday.rwl 17 -i7 csvdata.rwl 195 +i7 csvdata.rwl 196 +i7 csvmtit.rwl 194 i7 instdist.rwl 12 i7 oerhtmlday.rwl 17 -i8 csvdata.rwl 195 +i8 csvdata.rwl 196 +i8 csvmtit.rwl 194 i8 instdist.rwl 12 i8 oerhtmlday.rwl 17 icnt instdist.rwl 16 id check_directories.rwl 9 -ientries plotfigures.rwl 28 +ientries mtitplotwe.rwl 25 +ientries plotfigures.rwl 29 ientries plotruntp.rwl 25 -inacdist runsys.rwl 42 -inacdistfile runsys.rwl 38 +ientries plotrunwetim.rwl 24 +inacdist runsys.rwl 43 +inacdistfile runsys.rwl 39 input col_averages.rwl 17 ins_awrtim oltpawr.rwl 198 ins_customer oe_fillcustomers.rwl 20 -ins_det_sql aw_declarations.rwl 37 +ins_det_sql aw_declarations.rwl 38 ins_inventory oe_handle_products.rwl 91 ins_item oe_handle_orders.rwl 107 ins_order oe_handle_orders.rwl 79 ins_product oe_fillproducts.rwl 18 ins_warehouse oe_fillwarehouses.rwl 12 -ins_xin_sql aw_declarations.rwl 61 -ins_xtr_sql aw_declarations.rwl 79 -insevname ashstep1.rwl 50 +ins_xin_sql aw_declarations.rwl 62 +ins_xtr_sql aw_declarations.rwl 80 +insevname ashstep1.rwl 53 insinv oe_fillwarehouses.rwl 36 -inspoolsizes runsys.rwl 126 -insrwlcpu run.rwl 410 +inspoolsizes runsys.rwl 127 +insrwlcpu mtitrun.rwl 78 +insrwlcpu run.rwl 411 inst oerhtml.rwl 17 -inst1 plotfigures.rwl 70 -inst2 plotfigures.rwl 70 -inst3 plotfigures.rwl 70 -inst4 plotfigures.rwl 70 -inst5 plotfigures.rwl 70 -inst6 plotfigures.rwl 70 -inst7 plotfigures.rwl 70 -inst8 plotfigures.rwl 70 -inst_dist_sql runsys.rwl 49 +inst1 plotfigures.rwl 71 +inst2 plotfigures.rwl 71 +inst3 plotfigures.rwl 71 +inst4 plotfigures.rwl 71 +inst5 plotfigures.rwl 71 +inst6 plotfigures.rwl 71 +inst7 plotfigures.rwl 71 +inst8 plotfigures.rwl 71 +inst_dist_sql runsys.rwl 50 instdist_get instdist.rwl 14 instdist_qry instdist.rwl 18 instdist_sav instdist.rwl 47 @@ -331,79 +399,94 @@ instmpitem oepartalloc.rwl 30 instmpord oepartalloc.rwl 23 instnum oltpawr.rwl 17 inum instdist.rwl 16 -inv_rowid oe_handle_orders.rwl 395 +inv_rowid oe_handle_orders.rwl 403 inv_rowid oe_handle_products.rwl 63 -invoices_made oe_handle_orders.rwl 566 -ioer csvdata.rwl 418 -isecond plotfigures.rwl 70 -isgood check_directories.rwl 12 -item_count oe_handle_orders.rwl 329 +invoices_made oe_handle_orders.rwl 574 +ioer csvdata.rwl 419 +isecond plotfigures.rwl 71 +isgood check_directories.rwl 14 +item_count oe_handle_orders.rwl 337 key check_for_key.rwl 12 key oerhtmlday.rwl 11 key scalefract.rwl 16 -key_to_show parameters.rwl 20 -killmsg xc_implementation.rwl 194 +key_to_show parameters.rwl 23 +killmsg xc_implementation.rwl 246 kom check_for_key.rwl 15 +komment kommentops.rwl 18 komment oerhtmlday.rwl 11 -l_badp xc_implementation.rwl 22 -l_badp xcdefault.rwl 18 -l_badp xcvalues.rwl 18 -l_blcc xc_implementation.rwl 22 -l_blcc xcdefault.rwl 18 -l_blcc xcvalues.rwl 18 -l_ccch xc_implementation.rwl 21 -l_ccch xcdefault.rwl 17 -l_ccch xcvalues.rwl 17 -l_curl xc_implementation.rwl 20 -l_curl xcdefault.rwl 16 -l_curl xcvalues.rwl 16 -l_hard xc_implementation.rwl 21 +l /home/bengsig/rwloadsim/public/ovid2.rwl 7090 +l_afty xc_implementation.rwl 38 +l_afty xcdefault.rwl 17 +l_afty xcvalues.rwl 25 +l_arrs xc_implementation.rwl 40 +l_arrs xcdefault.rwl 19 +l_arrs xcvalues.rwl 27 +l_badp xc_implementation.rwl 38 +l_badp xcdefault.rwl 17 +l_badp xcvalues.rwl 25 +l_ccch xc_implementation.rwl 39 +l_ccch xcdefault.rwl 18 +l_ccch xcvalues.rwl 26 +l_curl xc_implementation.rwl 38 +l_curl xcdefault.rwl 17 +l_curl xcvalues.rwl 25 +l_hard xc_implementation.rwl 38 l_hard xcdefault.rwl 17 -l_hard xcvalues.rwl 17 -l_key xc_implementation.rwl 143 -l_load xc_implementation.rwl 20 -l_load xcdefault.rwl 16 -l_load xcvalues.rwl 16 -l_lofr xc_implementation.rwl 20 -l_lofr xcdefault.rwl 16 -l_lofr xcvalues.rwl 16 -l_maxp xc_implementation.rwl 21 -l_maxp xcdefault.rwl 17 -l_maxp xcvalues.rwl 17 -l_minp xc_implementation.rwl 21 -l_minp xcdefault.rwl 17 -l_minp xcvalues.rwl 17 -l_npoo xcvalues.rwl 18 -l_pcnt xcdefault.rwl 18 -l_pcnt xcvalues.rwl 18 +l_hard xcvalues.rwl 25 +l_key xc_implementation.rwl 192 +l_load xc_implementation.rwl 38 +l_load xcdefault.rwl 17 +l_load xcvalues.rwl 25 +l_lofr xc_implementation.rwl 38 +l_lofr xcdefault.rwl 17 +l_lofr xcvalues.rwl 25 +l_maxp xc_implementation.rwl 39 +l_maxp xcdefault.rwl 18 +l_maxp xcvalues.rwl 26 +l_minp xc_implementation.rwl 39 +l_minp xcdefault.rwl 18 +l_minp xcvalues.rwl 26 +l_mtty xc_implementation.rwl 40 +l_mtty xcdefault.rwl 19 +l_mtty xcvalues.rwl 27 +l_npoo xcvalues.rwl 27 +l_pcnt xcdefault.rwl 19 +l_pcnt xcvalues.rwl 27 l_price oe_long_session.rwl 12 -l_rate xc_implementation.rwl 20 -l_rate xcdefault.rwl 16 -l_rate xcvalues.rwl 16 -l_rc xc_implementation.rwl 23 -l_sesl xc_implementation.rwl 20 -l_sesl xcdefault.rwl 16 -l_sesl xcvalues.rwl 16 -l_stop xc_implementation.rwl 21 -l_stop xcdefault.rwl 17 -l_stop xcvalues.rwl 17 -largeashok parameters.rwl 182 -lastsec run.rwl 405 -lastsys run.rwl 405 -lastusr run.rwl 405 -lc csvdata.rwl 546 -li oe_handle_orders.rwl 214 +l_rate xc_implementation.rwl 38 +l_rate xcdefault.rwl 17 +l_rate xcvalues.rwl 25 +l_rc xc_implementation.rwl 41 +l_rpin xc_implementation.rwl 40 +l_rpin xcdefault.rwl 19 +l_rpin xcvalues.rwl 27 +l_sesl xc_implementation.rwl 38 +l_sesl xcdefault.rwl 17 +l_sesl xcvalues.rwl 25 +l_stop xc_implementation.rwl 39 +l_stop xcdefault.rwl 18 +l_stop xcvalues.rwl 26 +largeashok parameters.rwl 188 +lastsec mtitrun.rwl 73 +lastsec run.rwl 406 +lastsys mtitrun.rwl 73 +lastsys run.rwl 406 +lastusr mtitrun.rwl 73 +lastusr run.rwl 406 +lc csvdata.rwl 549 +lc csvmtit.rwl 344 +li oe_handle_orders.rwl 218 line_item_id oe_handle_orders.rwl 104 -line_item_id oe_handle_orders.rwl 328 -line_item_id oe_handle_orders.rwl 592 -line_item_id oe_handle_orders.rwl 639 -line_item_id oe_handle_orders.rwl 700 +line_item_id oe_handle_orders.rwl 336 +line_item_id oe_handle_orders.rwl 600 +line_item_id oe_handle_orders.rwl 647 +line_item_id oe_handle_orders.rwl 708 list_price oe_handle_orders.rwl 123 list_price oe_handle_products.rwl 22 lna oe_fillcustomers.rwl 10 -loadfactor xcchange.rwl 17 +loadfactor xcchange.rwl 19 loc oe_fillwarehouses.rwl 9 -logoffrate xcchange.rwl 30 +logoffrate xcchange.rwl 31 longdeddml oe_long_session.rwl 70 longdedqry oe_long_session.rwl 60 longpooldml oe_long_session.rwl 65 @@ -411,130 +494,178 @@ longpoolqry oe_long_session.rwl 55 longsession oe_long_session.rwl 9 lpri oe_fillproducts.rwl 13 m_price oe_long_session.rwl 12 -make_invoices oe_handle_orders.rwl 568 +make_invoices oe_handle_orders.rwl 576 make_order oe_handle_orders.rwl 73 makeawr oltpawr.rwl 189 -makeinvoices run.rwl 41 -makeinvoices_weight parameters.rwl 84 -makeorder run.rwl 37 -makeorder_weight parameters.rwl 81 -markerfile csvdata.rwl 27 -markrunning run.rwl 146 -max_customer parameters.rwl 100 +makeinvoices run.rwl 42 +makeinvoices_weight parameters.rwl 87 +makeorder run.rwl 38 +makeorder_weight parameters.rwl 84 +markerfile csvdata.rwl 28 +markerfile csvmtit.rwl 17 +markrunning run.rwl 147 +max_customer parameters.rwl 103 max_item oe_handle_orders.rwl 169 max_order_id oe_handle_orders.rwl 18 max_order_ship oe_handle_orders.rwl 19 -max_product parameters.rwl 99 -max_warehouse parameters.rwl 98 -maxactpool csvdata.rwl 270 -maxesum csvdata.rwl 499 -maxo oe_handle_orders.rwl 501 -maxpool xcchange.rwl 25 -maxsessions aw_declarations.rwl 90 +max_product parameters.rwl 102 +max_warehouse parameters.rwl 101 +maxactpool csvdata.rwl 271 +maxesum csvdata.rwl 500 +maxesum csvmtit.rwl 295 +maxl /home/bengsig/rwloadsim/public/ovid2.rwl 7085 +maxo oe_handle_orders.rwl 509 +maxpool xcchange.rwl 26 +maxsessions aw_declarations.rwl 91 maxsql oe_handle_orders.rwl 31 -maxtot run.rwl 102 -maxtot runsys.rwl 36 -maxyrange csvdata.rwl 180 -mfil csvdata.rwl 125 -mi_exec csvdata.rwl 365 -mi_wait csvdata.rwl 365 +maxtot run.rwl 103 +maxtot runsys.rwl 37 +maxyrange csvdata.rwl 181 +maxyrange csvmtit.rwl 178 +mf xc_implementation.rwl 30 +mfil csvdata.rwl 126 +mfil csvmtit.rwl 123 +mi_exec csvdata.rwl 366 +mi_wait csvdata.rwl 366 min_order_id oe_handle_orders.rwl 18 min_order_query oe_handle_orders.rwl 20 min_order_ship oe_handle_orders.rwl 19 min_price oe_handle_orders.rwl 123 -minpool xcchange.rwl 24 -minsec plotfigures.rwl 26 +minpool xcchange.rwl 25 +minsec mtitplotwe.rwl 24 +minsec plotfigures.rwl 27 minsec plotruntp.rwl 24 +minsec plotrunwetim.rwl 23 minsql oe_handle_orders.rwl 24 mkuser create_schemas.rwl 17 -mo_exec csvdata.rwl 365 -mo_wait csvdata.rwl 365 +mo_cnt plotrunwetim.rwl 42 +mo_et plotrunwetim.rwl 42 +mo_exec csvdata.rwl 366 +mo_sleep_avg parameters.rwl 292 +mo_sleep_fac parameters.rwl 293 +mo_wait csvdata.rwl 366 +mo_wt plotrunwetim.rwl 42 mpri oe_fillproducts.rwl 14 -msec csvdata.rwl 124 -msping csvdata.rwl 87 -msping plotfigures.rwl 86 +msec csvdata.rwl 125 +msec csvmtit.rwl 122 +msping csvdata.rwl 88 +msping csvmtit.rwl 77 +msping plotfigures.rwl 87 msping runping.rwl 34 -mtim csvdata.rwl 123 -mtxt csvdata.rwl 123 -mtyp csvdata.rwl 123 -my_loop aw_declarations.rwl 87 -my_thread aw_declarations.rwl 87 -mycursorcache xcchange.rwl 26 +mtim csvdata.rwl 124 +mtim csvmtit.rwl 121 +mtit xcvalues.rwl 18 +mtit_affinity parameters.rwl 305 +mtit_array_size parameters.rwl 303 +mtit_count_ins_rows mtit_declarations.rwl 15 +mtit_get_seq mtit_declarations.rwl 61 +mtit_ins_rows mtit_declarations.rwl 53 +mtit_ins_sql mtit_declarations.rwl 65 +mtit_max_payload mtit_declarations.rwl 11 +mtit_rows_per_exec parameters.rwl 302 +mtit_seq mtit_declarations.rwl 19 +mtit_set_type mtit_declarations.rwl 21 +mtit_tab mtit_declarations.rwl 19 +mtit_threads parameters.rwl 301 +mtit_type parameters.rwl 304 +mtit_type_text parameters.rwl 308 +mtit_xc parameters.rwl 307 +mtittype xcchange.rwl 34 +mtxt csvdata.rwl 124 +mtxt csvmtit.rwl 121 +mtyp csvdata.rwl 124 +mtyp csvmtit.rwl 121 +my_loop aw_declarations.rwl 88 +my_thread aw_declarations.rwl 88 +myarraysize xcchange.rwl 36 +mycursorcache xcchange.rwl 27 mydate oerhtmlday.rwl 11 -myhost xcchange.rwl 15 +myhost xcchange.rwl 17 myhost xccoreparam.rwl 14 -myhost xcdefault.rwl 14 -myhost xcvalues.rwl 14 +myhost xcdefault.rwl 15 +myhost xcvalues.rwl 16 +mykey latest.rwl 12 mykey oerhtmlday.rwl 11 -mykey xcchange.rwl 14 +mykey xcchange.rwl 16 mykey xccoreparam.rwl 13 -mykey xcdefault.rwl 13 -mykey xcvalues.rwl 13 -myproccount xcchange.rwl 27 -myratefactor xcchange.rwl 19 +mykey xcdefault.rwl 14 +mykey xcvalues.rwl 15 +myproccount xcchange.rwl 28 +myratefactor xcchange.rwl 21 +myrunnumber kommentops.rwl 16 mysec instdist.rwl 45 myurl oerhtmlday.rwl 12 nam oe_long_session.rwl 9 +newenv kommentops.rwl 56 +newkomment kommentops.rwl 14 nextdouble aw_cols.rwl 128 -nopool xcchange.rwl 29 +nopool xcchange.rwl 30 nopool xccoreparam.rwl 17 -normal_connect parameters.rwl 226 -normal_stddev parameters.rwl 273 -notused csvdata.rwl 419 -nvlstring csvdata.rwl 414 -o1 oe_handle_orders.rwl 639 -o2 oe_handle_orders.rwl 639 -oercount csvdata.rwl 19 -oerheader csvdata.rwl 25 -oerlist csvdata.rwl 24 +normal_connect parameters.rwl 232 +normal_stddev parameters.rwl 282 +notused csvdata.rwl 420 +nvlstring csvdata.rwl 415 +o1 oe_handle_orders.rwl 647 +o2 oe_handle_orders.rwl 647 +oercount csvdata.rwl 20 +oercount csvmtit.rwl 10 +oerheader csvdata.rwl 26 +oerlist csvdata.rwl 25 oerlist oerhtmlday.rwl 77 oerlisting oerhtmlday.rwl 75 -oerpivot csvdata.rwl 657 -oerpivotsql csvdata.rwl 462 -oerreverse csvdata.rwl 26 -oerrow csvdata.rwl 415 -oertable csvdata.rwl 676 -oertablesql csvdata.rwl 474 +oerpivot csvdata.rwl 662 +oerpivotsql csvdata.rwl 463 +oerreverse csvdata.rwl 27 +oerrow csvdata.rwl 416 +oertable csvdata.rwl 681 +oertablesql csvdata.rwl 475 +oldenv kommentops.rwl 57 olines oerhtmlday.rwl 15 one runping.rwl 30 one timemodel.rwl 95 -only_directories parameters2shell.rwl 17 -only_plus parameters2shell.rwl 14 +only_directories parameters2shell.rwl 18 +only_plus parameters2shell.rwl 15 onrac timemodel.rwl 36 -openpool csvdata.rwl 218 -openpool run.rwl 407 -openses plotfigures.rwl 55 -ord_rowid oe_handle_orders.rwl 330 -order_date oe_handle_orders.rwl 571 -order_date oe_handle_orders.rwl 698 -order_id oe_handle_orders.rwl 326 -order_id oe_handle_orders.rwl 505 -order_id oe_handle_orders.rwl 570 -order_id oe_handle_orders.rwl 639 -order_id oe_handle_orders.rwl 697 +openpool csvdata.rwl 219 +openpool mtitrun.rwl 75 +openpool run.rwl 408 +openses plotfigures.rwl 56 +ord_rowid oe_handle_orders.rwl 338 +order_date oe_handle_orders.rwl 579 +order_date oe_handle_orders.rwl 706 +order_id oe_handle_orders.rwl 334 +order_id oe_handle_orders.rwl 513 +order_id oe_handle_orders.rwl 578 +order_id oe_handle_orders.rwl 647 +order_id oe_handle_orders.rwl 705 order_id oe_handle_orders.rwl 76 -order_status oe_handle_orders.rwl 330 -order_status oe_handle_orders.rwl 642 -order_status oe_handle_orders.rwl 698 -order_total oe_handle_orders.rwl 572 -order_total oe_handle_orders.rwl 640 -order_total oe_handle_orders.rwl 699 +order_status oe_handle_orders.rwl 338 +order_status oe_handle_orders.rwl 650 +order_status oe_handle_orders.rwl 706 +order_total oe_handle_orders.rwl 580 +order_total oe_handle_orders.rwl 648 +order_total oe_handle_orders.rwl 707 order_total oe_handle_orders.rwl 77 -orders_hashcount parameters.rwl 108 +orders_hashcount parameters.rwl 111 orders_made oe_handle_orders.rwl 71 ordid oepartalloc.rwl 21 otherterm timemodel.rwl 34 out create_schemas.rwl 15 outf scalefract.rwl 24 +ovid2load mtit_declarations.rwl 57 +ovidarray /home/bengsig/rwloadsim/public/ovid2.rwl 69 +ovidstring /home/bengsig/rwloadsim/public/ovid2.rwl 7073 +ovidstring2 /home/bengsig/rwloadsim/public/ovid2.rwl 7085 p_pass create_schemas.rwl 17 p_user create_schemas.rwl 17 p_user drop_schemas.rwl 13 -passwords parameters2shell.rwl 20 +passwords parameters2shell.rwl 21 +payload mtit_declarations.rwl 56 pcnt oe_fillproducts.rwl 15 pcode oe_fillcustomers.rwl 14 pcount runtrunc.rwl 40 pcount scalefract.rwl 32 -pct oe_handle_orders.rwl 501 +pct oe_handle_orders.rwl 509 pct50 histdata.rwl 78 pct50 scalefract.rwl 33 pct90 histdata.rwl 78 @@ -549,48 +680,55 @@ pdesc oe_fillproducts.rwl 10 pid oe_fillproducts.rwl 8 pid oe_fillwarehouses.rwl 6 pingcsv runping.rwl 32 -pivotstring csvdata.rwl 416 -plot_cpu_only plotfigures.rwl 22 -plotfigures plotfigures.rwl 24 -plotfil2 csvdata.rwl 22 -plotfile csvdata.rwl 22 +pivotstring csvdata.rwl 417 +plot_cpu_only plotfigures.rwl 23 +plotfigures plotfigures.rwl 25 +plotfil2 csvdata.rwl 23 +plotfil2 csvmtit.rwl 13 +plotfile csvdata.rwl 23 +plotfile csvmtit.rwl 13 plotfile histdata.rwl 14 -plotfile plotfigures.rwl 20 +plotfile mtitplotwe.rwl 20 +plotfile plotfigures.rwl 21 plotfile plotruntp.rwl 20 +plotfile plotrunwetim.rwl 19 plotfile prepare.rwl 7 -plotfile run.rwl 100 -plotfile runsys.rwl 32 -plotline csvdata.rwl 492 +plotfile run.rwl 101 +plotfile runsys.rwl 33 +plotline csvdata.rwl 493 +plotline csvmtit.rwl 16 plotruntp plotruntp.rwl 22 +plotweres mtitplotwe.rwl 22 +plotweres plotrunwetim.rwl 21 pna oe_fillproducts.rwl 9 -pool_connect parameters.rwl 228 -pool_mb1 runsys.rwl 88 -pool_mb2 runsys.rwl 88 -pool_mb3 runsys.rwl 88 -pool_mb4 runsys.rwl 88 -pool_mb5 runsys.rwl 89 -pool_mb6 runsys.rwl 89 -pool_mb7 runsys.rwl 89 -pool_mb8 runsys.rwl 89 -pool_name runsys.rwl 90 -pool_rs runsys.rwl 88 -pool_size_interval parameters.rwl 204 -pool_type parameters.rwl 227 +pool_connect parameters.rwl 234 +pool_mb1 runsys.rwl 89 +pool_mb2 runsys.rwl 89 +pool_mb3 runsys.rwl 89 +pool_mb4 runsys.rwl 89 +pool_mb5 runsys.rwl 90 +pool_mb6 runsys.rwl 90 +pool_mb7 runsys.rwl 90 +pool_mb8 runsys.rwl 90 +pool_name runsys.rwl 91 +pool_rs runsys.rwl 89 +pool_size_interval parameters.rwl 210 +pool_type parameters.rwl 233 prefinst oltpawr.rwl 113 probystat oe_fillproducts.rwl 64 -proccount parameters.rwl 51 -procnumber parameters.rwl 50 +proccount parameters.rwl 54 +procnumber parameters.rwl 53 prod_id oe_long_session.rwl 11 -product_description oe_handle_orders.rwl 594 -product_description oe_handle_orders.rwl 641 -product_description oe_handle_orders.rwl 704 +product_description oe_handle_orders.rwl 602 +product_description oe_handle_orders.rwl 649 +product_description oe_handle_orders.rwl 712 product_description oe_handle_products.rwl 20 product_id oe_handle_orders.rwl 104 -product_id oe_handle_orders.rwl 328 -product_id oe_handle_orders.rwl 701 +product_id oe_handle_orders.rwl 336 +product_id oe_handle_orders.rwl 709 product_id oe_handle_products.rwl 18 product_id oe_handle_products.rwl 59 -product_name oe_handle_orders.rwl 593 +product_name oe_handle_orders.rwl 601 product_name oe_handle_products.rwl 19 product_status oe_fillproducts.rwl 38 product_status oe_handle_orders.rwl 124 @@ -598,211 +736,249 @@ products_found oe_handle_products.rwl 10 pstat oe_fillproducts.rwl 12 pstat oe_fillwarehouses.rwl 8 q aw_cols.rwl 27 -qo_exec csvdata.rwl 366 -qo_wait csvdata.rwl 366 -qry_awrtim csvdata.rwl 154 +qo_cnt plotrunwetim.rwl 43 +qo_et plotrunwetim.rwl 43 +qo_exec csvdata.rwl 367 +qo_sleep_avg parameters.rwl 292 +qo_sleep_fac parameters.rwl 294 +qo_wait csvdata.rwl 367 +qo_wt plotrunwetim.rwl 43 +qry_awrtim csvdata.rwl 155 +qry_awrtim csvmtit.rwl 152 qtt oe_fillwarehouses.rwl 33 quantity oe_handle_orders.rwl 105 -quantity oe_handle_orders.rwl 328 -quantity oe_handle_orders.rwl 596 -quantity oe_handle_orders.rwl 640 -quantity oe_handle_orders.rwl 703 +quantity oe_handle_orders.rwl 336 +quantity oe_handle_orders.rwl 604 +quantity oe_handle_orders.rwl 648 +quantity oe_handle_orders.rwl 711 quantity oe_handle_products.rwl 60 -quantity_on_hand oe_handle_orders.rwl 328 +quantity_on_hand oe_handle_orders.rwl 336 quantity_on_hand oe_handle_products.rwl 62 -query_factor parameters.rwl 77 -query_order oe_handle_orders.rwl 696 -query_order_count oe_handle_orders.rwl 692 -query_order_items oe_handle_orders.rwl 693 -query_order_max_limit parameters.rwl 115 -queryorder run.rwl 57 -queryorder_weight parameters.rwl 82 +query_factor parameters.rwl 80 +query_order oe_handle_orders.rwl 704 +query_order_count oe_handle_orders.rwl 700 +query_order_items oe_handle_orders.rwl 701 +query_order_max_limit parameters.rwl 118 +queryorder run.rwl 58 +queryorder_weight parameters.rwl 85 r_key prepare.rwl 18 -rampfactor parameters.rwl 33 -rampup parameters2shell.rwl 71 -ratefactor parameters.rwl 26 -ratefactor_divisor parameters.rwl 286 -ratefactor_multiplier parameters.rwl 284 -rategradient parameters.rwl 28 -rcnt xcdefault.rwl 33 +rampfactor parameters.rwl 36 +rampup parameters2shell.rwl 72 +ratefactor parameters.rwl 29 +ratefactor_divisor parameters.rwl 321 +ratefactor_multiplier parameters.rwl 319 +rategradient parameters.rwl 31 +rcnt xcdefault.rwl 38 rda check_for_key.rwl 16 +rdate kommentops.rwl 18 rdate oerhtmlday.rwl 11 rdate prepare.rwl 15 -repchg xc_implementation.rwl 19 +repchg xc_implementation.rwl 37 rescre create_schemas.rwl 51 -resname csvdata.rwl 288 -results_connect parameters.rwl 223 -results_in_test parameters.rwl 221 -results_password parameters.rwl 225 -results_username parameters.rwl 224 -resultsdir parameters.rwl 209 -retval csvdata.rwl 37 +resname csvdata.rwl 289 +results_connect parameters.rwl 229 +results_in_test parameters.rwl 227 +results_password parameters.rwl 231 +results_username parameters.rwl 230 +resultsdir parameters.rwl 215 +retval csvdata.rwl 38 +retval csvmtit.rwl 27 rn runping.rwl 41 rno check_for_key.rwl 14 -run run.rwl 171 +rno latest.rwl 15 +rno mtit_declarations.rwl 54 +rowspins xcchange.rwl 35 +run mtitrun.rwl 58 +run run.rwl 172 run runping.rwl 81 -run runsys.rwl 176 +run runsys.rwl 177 run runtrunc.rwl 58 -runno csvdata.rwl 19 +runmtitrun mtitrun.rwl 58 +runno csvdata.rwl 20 +runno csvmtit.rwl 10 runno histdata.rwl 11 runno markdone.rwl 8 +runno mtitplotwe.rwl 18 runno oerhtml.rwl 9 runno oerhtmlday.rwl 13 runno oltpawr.rwl 99 -runno plotfigures.rwl 18 +runno plotfigures.rwl 19 runno plotruntp.rwl 18 +runno plotrunwetim.rwl 17 runno scalefract.rwl 18 runno subdir.rwl 6 -runperiod parameters.rwl 105 -runrun run.rwl 171 +runperiod parameters.rwl 108 +runplot_width parameters.rwl 181 +runrun run.rwl 172 runrunping runping.rwl 81 -runrunsys runsys.rwl 176 +runrunsys runsys.rwl 177 runruntrunc runtrunc.rwl 58 rwl_aw aw_user.rwl 14 rwl_aw1 aw_sizeinfo.rwl 9 -rwl_aw1_password parameters.rwl 232 -rwl_aw1_username parameters.rwl 231 -rwl_aw2_password parameters.rwl 234 -rwl_aw2_username parameters.rwl 233 +rwl_aw1_password parameters.rwl 238 +rwl_aw1_username parameters.rwl 237 +rwl_aw2_password parameters.rwl 240 +rwl_aw2_username parameters.rwl 239 rwl_aw_create aw_cols.rwl 9 -rwl_daily_html parameters.rwl 59 -rwl_heading parameters.rwl 57 -rwl_max_batch parameters.rwl 68 -rwl_max_pool parameters.rwl 39 -rwl_min_batch parameters.rwl 67 -rwl_min_pool parameters.rwl 38 -rwl_oe_password parameters.rwl 236 +rwl_daily_html parameters.rwl 62 +rwl_heading parameters.rwl 60 +rwl_max_batch parameters.rwl 71 +rwl_max_pool parameters.rwl 42 +rwl_min_batch parameters.rwl 70 +rwl_min_pool parameters.rwl 41 +rwl_oe_password parameters.rwl 242 rwl_oe_pool oe_user.rwl 8 -rwl_oe_username parameters.rwl 235 +rwl_oe_username parameters.rwl 241 rwl_ping runping.rwl 24 -rwl_pool_release parameters.rwl 40 -rwl_run run_user.rwl 111 -rwl_run1_password parameters.rwl 238 -rwl_run1_username parameters.rwl 237 -rwl_run2_password parameters.rwl 240 -rwl_run2_username parameters.rwl 239 -rwl_run_batch run_user.rwl 149 -rwl_run_like parameters.rwl 241 -rwl_run_pool run_user.rwl 118 -rwl_title parameters.rwl 242 +rwl_pool_release parameters.rwl 43 +rwl_run run_user.rwl 110 +rwl_run1_password parameters.rwl 244 +rwl_run1_username parameters.rwl 243 +rwl_run2_password parameters.rwl 246 +rwl_run2_username parameters.rwl 245 +rwl_run_batch run_user.rwl 148 +rwl_run_like parameters.rwl 247 +rwl_run_mtit mtit_user.rwl 11 +rwl_run_pool run_user.rwl 117 +rwl_title parameters.rwl 248 rwloadsim results.rwl 8 -rwloadsimdir parameters.rwl 222 -s run.rwl 68 -s_col1 aw_declarations.rwl 17 -s_rowid aw_declarations.rwl 20 -s_tokid aw_declarations.rwl 15 -savecaches runsys.rwl 87 +rwloadsimdir parameters.rwl 228 +s /home/bengsig/rwloadsim/public/ovid2.rwl 7089 +s run.rwl 69 +s_col1 aw_declarations.rwl 18 +s_rowid aw_declarations.rwl 21 +s_tokid aw_declarations.rwl 16 +savecaches runsys.rwl 88 savtim oltpawr.rwl 196 -script_ramp parameters.rwl 46 +script_ramp parameters.rwl 49 search_products oe_handle_products.rwl 15 searches_made oe_handle_products.rwl 9 -searchproduct run.rwl 53 -searchproduct_weight parameters.rwl 83 +searchproduct run.rwl 54 +searchproduct_weight parameters.rwl 86 searchtext oe_handle_products.rwl 15 -sec run.rwl 406 -second csvdata.rwl 87 -second plotfigures.rwl 86 +sec mtitrun.rwl 74 +sec run.rwl 407 +second csvdata.rwl 88 +second csvmtit.rwl 77 +second mtitplotwe.rwl 37 +second plotfigures.rwl 87 second plotruntp.rwl 43 +second plotrunwetim.rwl 42 sel1dual runping.rwl 36 -sel_complex oe_handle_orders.rwl 644 -sel_icount oe_handle_orders.rwl 349 -sel_inventories oe_handle_orders.rwl 405 +sel_complex oe_handle_orders.rwl 652 +sel_icount oe_handle_orders.rwl 357 +sel_inventories oe_handle_orders.rwl 413 sel_inventory oe_handle_products.rwl 66 -sel_items oe_handle_orders.rwl 371 -sel_items oe_handle_orders.rwl 723 -sel_items_desc oe_handle_orders.rwl 741 -sel_items_wide oe_handle_orders.rwl 763 -sel_order oe_handle_orders.rwl 706 -sel_order_items oe_handle_orders.rwl 598 -sel_order_to_ship oe_handle_orders.rwl 333 +sel_items oe_handle_orders.rwl 379 +sel_items oe_handle_orders.rwl 731 +sel_items_desc oe_handle_orders.rwl 749 +sel_items_wide oe_handle_orders.rwl 771 +sel_order oe_handle_orders.rwl 714 +sel_order_items oe_handle_orders.rwl 606 +sel_order_to_ship oe_handle_orders.rwl 341 sel_product oe_handle_orders.rwl 126 -sel_shipped_orders oe_handle_orders.rwl 574 -sel_tok_sql aw_declarations.rwl 25 -sel_toship oe_handle_orders.rwl 521 -sel_tot_orders oe_handle_orders.rwl 509 -sel_xtr_sql aw_declarations.rwl 69 -selaos_sql plotfigures.rwl 56 -selcli csvdata.rwl 219 -selcountres_sql plotfigures.rwl 30 +sel_shipped_orders oe_handle_orders.rwl 582 +sel_tok_sql aw_declarations.rwl 26 +sel_toship oe_handle_orders.rwl 529 +sel_tot_orders oe_handle_orders.rwl 517 +sel_xtr_sql aw_declarations.rwl 70 +selaos_sql plotfigures.rwl 57 +selcli csvdata.rwl 220 +selcli csvmtit.rwl 217 +selcountres_sql plotfigures.rwl 31 selfract histdata.rwl 81 selhist_sql histdata.rwl 20 -selinst_sql csvdata.rwl 196 -selinst_sql plotfigures.rwl 71 +selinst_sql csvdata.rwl 197 +selinst_sql csvmtit.rwl 195 +selinst_sql plotfigures.rwl 72 selinv oe_fillwarehouses.rwl 93 selk check_for_key.rwl 21 sellow oe_fillwarehouses.rwl 76 -selminsec_sql plotfigures.rwl 39 +selminsec_sql plotfigures.rwl 40 selminsec_sql plotruntp.rwl 27 +selminsec_sql plotrunwetim.rwl 26 seloer oerhtml.rwl 19 -seloercnt csvdata.rwl 421 +seloercnt csvdata.rwl 422 selprod oe_long_session.rwl 14 selpstat oe_fillwarehouses.rwl 26 -seltimm_sql csvdata.rwl 88 -seltimm_sql plotfigures.rwl 87 -seltps_sql csvdata.rwl 230 +seltimm_sql csvdata.rwl 89 +seltimm_sql csvmtit.rwl 78 +seltimm_sql plotfigures.rwl 88 +seltps_sql csvdata.rwl 231 seltps_sql plotruntp.rwl 45 selvkdat scalefract.rwl 35 +seq mtit_declarations.rwl 59 +seqplace mtit_declarations.rwl 22 ses_parallel aw_cols.rwl 189 -sessionleak xcchange.rwl 20 +sessionleak xcchange.rwl 22 setdbname prepare.rwl 85 -ship_many_orders oe_handle_orders.rwl 501 -ship_order oe_handle_orders.rwl 326 -shiporder_weight parameters.rwl 92 -shiporders run.rwl 45 -shipped_items oe_handle_orders.rwl 444 -show_changed_values parameters.rwl 138 -showstart run.rwl 93 +ship_many_orders oe_handle_orders.rwl 509 +ship_order oe_handle_orders.rwl 334 +shiporder_weight parameters.rwl 95 +shiporders run.rwl 46 +shipped_items oe_handle_orders.rwl 452 +show_changed_values parameters.rwl 141 +showstart run.rwl 94 showthem oe_fillcustomers.rwl 71 -simulatebatch parameters.rwl 74 +simulatebatch parameters.rwl 77 skipnegative col_averages.rwl 11 -sltp oe_handle_orders.rwl 640 +sltp oe_handle_orders.rwl 648 snap oltpawr.rwl 17 -soer csvdata.rwl 417 -sp_exec csvdata.rwl 365 -sp_wait csvdata.rwl 365 +soer csvdata.rwl 418 +sp_exec csvdata.rwl 366 +sp_wait csvdata.rwl 366 space create_schemas.rwl 17 sqlddl create_schemas.rwl 20 sqlddl drop_schemas.rwl 16 -sqrt_query_factor parameters.rwl 360 +sqrt_query_factor parameters.rwl 395 src_products oe_handle_products.rwl 25 -starttime ashstep1.rwl 28 -starttime csvdata.rwl 28 +starttime ashstep1.rwl 31 +starttime csvdata.rwl 29 +starttime csvmtit.rwl 18 starttime prepare.rwl 17 stock_added oe_handle_products.rwl 54 stock_increased oe_handle_products.rwl 53 -stocks run.rwl 68 -stockup run.rwl 66 -stockup_weight parameters.rwl 86 -stopnow xcchange.rwl 28 +stocks run.rwl 69 +stockup run.rwl 67 +stockup_weight parameters.rwl 89 +stopnow xcchange.rwl 29 stopnow xccoreparam.rwl 16 -subdir parameters.rwl 210 -sumdbtime csvdata.rwl 81 -sume oe_handle_orders.rwl 640 -svgmouse parameters.rwl 526 -sys run.rwl 406 -sysawr_connect parameters.rwl 217 -sysawr_password parameters.rwl 219 -sysawr_username parameters.rwl 218 +str /home/bengsig/rwloadsim/public/ovid2.rwl 7076 +str /home/bengsig/rwloadsim/public/ovid2.rwl 7088 +subdir parameters.rwl 216 +suggest check_directories.rwl 12 +sumdbtime csvdata.rwl 82 +sumdbtime csvmtit.rwl 71 +sume oe_handle_orders.rwl 648 +svgmouse parameters.rwl 589 +sys mtitrun.rwl 74 +sys run.rwl 407 +sysawr_connect parameters.rwl 223 +sysawr_password parameters.rwl 225 +sysawr_username parameters.rwl 224 sysawrdb systemdb.rwl 14 sysres scalefract.rwl 95 -system_connect parameters.rwl 211 -system_password parameters.rwl 213 -system_username parameters.rwl 212 +system_connect parameters.rwl 217 +system_password parameters.rwl 219 +system_username parameters.rwl 218 systemdb systemdb.rwl 8 -takehere oe_handle_orders.rwl 422 -tellnoawr runsys.rwl 81 +takehere oe_handle_orders.rwl 430 +tellnoawr runsys.rwl 82 termdist timemodel.rwl 167 termdist_query timemodel.rwl 55 termdist_query_gv timemodel.rwl 83 -test_aw_transaction aw_declarations.rwl 206 -testdebug parameters.rwl 134 -thissec run.rwl 405 -thissys run.rwl 405 +test_aw_transaction aw_declarations.rwl 210 +testdebug parameters.rwl 137 +thissec mtitrun.rwl 73 +thissec run.rwl 406 +thissys mtitrun.rwl 73 +thissys run.rwl 406 thisterm timemodel.rwl 34 -thisusr run.rwl 405 -threadcount parameters.rwl 70 -threadcount_divisor parameters.rwl 287 -threadcount_multiplier parameters.rwl 285 +thisusr mtitrun.rwl 73 +thisusr run.rwl 406 +threadcount parameters.rwl 73 +threadcount_divisor parameters.rwl 322 +threadcount_multiplier parameters.rwl 320 tim1 runping.rwl 34 tim2 runping.rwl 34 tim3 runping.rwl 34 @@ -828,94 +1004,111 @@ timemodel_val timemodel.rwl 30 timemodel_val1 timemodel.rwl 167 timemodel_val2 timemodel.rwl 167 timemodel_val3 timemodel.rwl 167 -tmatch csvdata.rwl 36 -to_be_shipped oe_handle_orders.rwl 504 +tmatch csvdata.rwl 37 +tmatch csvmtit.rwl 26 +to_be_shipped oe_handle_orders.rwl 512 +tot /home/bengsig/rwloadsim/public/ovid2.rwl 7090 tot aw_cols.rwl 208 -tot runsys.rwl 46 -tot_orders oe_handle_orders.rwl 504 +tot runsys.rwl 47 +tot_orders oe_handle_orders.rwl 512 total oerhtml.rwl 15 -total_on_hand oe_handle_orders.rwl 369 +total_cnt plotrunwetim.rwl 45 +total_on_hand oe_handle_orders.rwl 377 totaltime prepare.rwl 23 -totashcpu csvdata.rwl 579 +totashcpu csvdata.rwl 584 +totashcpu csvmtit.rwl 379 totinv oe_fillwarehouses.rwl 92 trunctables runtrunc.rwl 20 txt aw_cols.rwl 25 -txt aw_declarations.rwl 239 +txt aw_declarations.rwl 243 txt oerhtml.rwl 17 +txt xc_implementation.rwl 25 uname instdist.rwl 14 uname instdist.rwl 43 unit_price oe_handle_orders.rwl 105 -unit_price oe_handle_orders.rwl 595 -unit_price oe_handle_orders.rwl 702 -upd_det_sql aw_declarations.rwl 53 -upd_inventory oe_handle_orders.rwl 425 +unit_price oe_handle_orders.rwl 603 +unit_price oe_handle_orders.rwl 710 +upd_det_sql aw_declarations.rwl 54 +upd_inventory oe_handle_orders.rwl 433 upd_inventory oe_handle_products.rwl 80 upd_order oe_handle_orders.rwl 95 -upd_ship_order oe_handle_orders.rwl 360 -upd_tok_sql aw_declarations.rwl 31 -upd_xtr_sql aw_declarations.rwl 45 +upd_ship_order oe_handle_orders.rwl 368 +upd_tok_sql aw_declarations.rwl 32 +upd_xtr_sql aw_declarations.rwl 46 updprod oe_long_session.rwl 28 usr check_directories.rwl 10 -usr run.rwl 406 -val1 csvdata.rwl 229 -val2 csvdata.rwl 229 -val3 csvdata.rwl 229 -val4 csvdata.rwl 229 -val5 csvdata.rwl 229 -val6 csvdata.rwl 229 -val7 csvdata.rwl 229 -val8 csvdata.rwl 229 -val9 csvdata.rwl 229 +usr mtitrun.rwl 74 +usr run.rwl 407 +val mtit_declarations.rwl 55 +val1 csvdata.rwl 230 +val2 csvdata.rwl 230 +val3 csvdata.rwl 230 +val4 csvdata.rwl 230 +val5 csvdata.rwl 230 +val6 csvdata.rwl 230 +val7 csvdata.rwl 230 +val8 csvdata.rwl 230 +val9 csvdata.rwl 230 vname histdata.rwl 79 vname scalefract.rwl 17 warehouse_id oe_handle_products.rwl 58 -warehouse_id run.rwl 67 -warehouse_received run.rwl 62 -was_shipped oe_handle_orders.rwl 324 +warehouse_id run.rwl 68 +warehouse_received run.rwl 63 +was_shipped oe_handle_orders.rwl 332 wburst_count command line 1 -wburst_count parameters.rwl 151 -wburst_length parameters.rwl 153 -wburst_run run.rwl 115 -wburst_start parameters.rwl 152 -wburst_wait run.rwl 108 +wburst_count parameters.rwl 154 +wburst_length parameters.rwl 156 +wburst_run run.rwl 116 +wburst_start parameters.rwl 155 +wburst_wait run.rwl 109 +wcount /home/bengsig/rwloadsim/public/ovid2.rwl 7073 wid oe_fillwarehouses.rwl 5 -withdesc oe_handle_orders.rwl 696 +withdesc oe_handle_orders.rwl 704 withdml oe_long_session.rwl 9 -wma10 csvdata.rwl 356 -wmavg csvdata.rwl 356 -wmcount csvdata.rwl 319 -wmean csvdata.rwl 318 -wmeantot csvdata.rwl 318 +wma10 csvdata.rwl 357 +wmavg csvdata.rwl 357 +wmcount csvdata.rwl 320 +wmcount csvmtit.rwl 275 +wmean csvdata.rwl 319 +wmean csvmtit.rwl 274 +wmeantot csvdata.rwl 319 +wmeantot csvmtit.rwl 274 wna oe_fillwarehouses.rwl 7 wrapfetch runping.rwl 42 writeping runping.rwl 48 -xc_badplan parameters.rwl 259 -xc_blockcontention parameters.rwl 260 -xc_cursorcache parameters.rwl 254 -xc_cursorleak parameters.rwl 255 -xc_enabled parameters.rwl 246 -xc_hardparse parameters.rwl 251 -xc_kill xc_implementation.rwl 194 -xc_loadfactor parameters.rwl 250 -xc_logoffrate parameters.rwl 258 -xc_maxpool parameters.rwl 253 -xc_minpool parameters.rwl 252 -xc_nopool parameters.rwl 262 -xc_proccount parameters.rwl 261 -xc_ratefactor parameters.rwl 249 -xc_read xc_implementation.rwl 19 -xc_refresh parameters.rwl 248 -xc_run_dedicated run.rwl 13 -xc_sessionleak parameters.rwl 256 -xc_sessionwait parameters.rwl 263 -xc_stopnow parameters.rwl 257 -xcolor csvdata.rwl 29 -xeqpsec parameters.rwl 388 -xeqpshi parameters.rwl 394 -xeqpslo parameters.rwl 393 -xseconds csvdata.rwl 35 -xtim csvdata.rwl 35 -xwidth plotfigures.rwl 24 +xc_badplan parameters.rwl 265 +xc_cursorcache parameters.rwl 260 +xc_cursorleak parameters.rwl 261 +xc_enabled parameters.rwl 252 +xc_hardparse parameters.rwl 257 +xc_kill xc_implementation.rwl 246 +xc_loadfactor parameters.rwl 256 +xc_logoffrate parameters.rwl 264 +xc_marker xc_implementation.rwl 25 +xc_marker_file xc_implementation.rwl 19 +xc_maxpool parameters.rwl 259 +xc_minpool parameters.rwl 258 +xc_nopool parameters.rwl 267 +xc_proccount parameters.rwl 266 +xc_ratefactor parameters.rwl 255 +xc_read xc_implementation.rwl 37 +xc_refresh parameters.rwl 254 +xc_run_dedicated run.rwl 14 +xc_sessionleak parameters.rwl 262 +xc_sessionwait parameters.rwl 268 +xc_stopnow parameters.rwl 263 +xcolor csvdata.rwl 30 +xcolor csvmtit.rwl 19 +xeqpsec parameters.rwl 423 +xeqpshi parameters.rwl 429 +xeqpslo parameters.rwl 428 +xseconds csvdata.rwl 36 +xseconds csvmtit.rwl 25 +xtim csvdata.rwl 36 +xtim csvmtit.rwl 25 +xwidth mtitplotwe.rwl 22 +xwidth plotfigures.rwl 25 xwidth plotruntp.rwl 22 -ymax plotfigures.rwl 137 -yt ashstep1.rwl 26 +xwidth plotrunwetim.rwl 21 +ymax plotfigures.rwl 138 +yt ashstep1.rwl 29 diff --git a/oltp/xc_implementation.rwl b/oltp/xc_implementation.rwl index 82fbf45d..af1fef2c 100644 --- a/oltp/xc_implementation.rwl +++ b/oltp/xc_implementation.rwl @@ -87,7 +87,7 @@ procedure xc_read(integer repchg) nostatistics end if; if l_badp is not null and l_badp != xc_badplan then if repchg then - fprintf stderr, "At %.2f: external control badplan is now %.3f", runseconds(), l_badp; + fprintf stderr, "At %.2f: external control badplan is now %.3f\n", runseconds(), l_badp; end if; xc_badplan := l_badp; end if; diff --git a/public/connping.rwl b/public/connping.rwl index 451c6bc8..cb64df74 100644 --- a/public/connping.rwl +++ b/public/connping.rwl @@ -5,6 +5,7 @@ # as shown at https://oss.oracle.com/licenses/upl/ # # History +# bengsig 23-feb-2023 - All add avg/std as comment to csvfile when not excel # bengsig 9-feb-2023 - Ensure ociping is as correct as possible # bengsig 5-sep-2022 - Min values were wrong # bengsig 9-aug-2022 - Timestamp as unixepoch or full time, min/max printed @@ -259,6 +260,14 @@ end run; # Print final results if csvoutput != "" then + if ! csvexcel then + fprintf csvfile, "# connect mean=%.2f, stddev=%.2f, min=%.2f, max=%.2f\n" + , t0sum/t0cnt, sqrt((t0sq-t0sum*t0sum/t0cnt)/t0cnt), cmin, cmax; + fprintf csvfile, "# ociping mean=%.2f, stddev=%.2f, min=%.2f, max=%.2f\n" + , tsum/tcnt, sqrt((tsq-tsum*tsum/tcnt)/tcnt), omin, omax; + fprintf csvfile, "# dualping mean=%.2f, stddev=%.2f, min=%.2f, max=%.2f\n" + , tdsum/tdcnt, sqrt((tdsq-tdsum*tdsum/tdcnt)/tdcnt), qmin, qmax; + end if; csvfile := null; end if; diff --git a/public/ociping.rwl b/public/ociping.rwl index bb6d98bb..9b978c2d 100644 --- a/public/ociping.rwl +++ b/public/ociping.rwl @@ -5,6 +5,7 @@ # as shown at https://oss.oracle.com/licenses/upl/ # # History +# bengsig 23-feb-2023 - All add avg/std as comment to csvfile when not excel # bengsig 9-feb-2023 - Ensure ociping is as correct as possible # bengsig 10-aug-2022 - improve output, csv, excel # bengsig 29-jun-2022 - Generate project @@ -195,6 +196,10 @@ end loop; # Print final results if csvoutput != "" then + if ! csvexcel then + fprintf csvfile, "#ociping (ms) mean=%.3f, stddev=%.3f, min=%.3f, max=%.3f\n" + ,tsum/tcnt,sqrt((tsq-tsum*tsum/tcnt)/tcnt), tmin, tmax; + end if; csvfile := null; end if; printf "ociping (ms) mean=%.3f, stddev=%.3f, min=%.3f, max=%.3f\n" diff --git a/src/rwl.h b/src/rwl.h index dbcc0a8d..b6f393e2 100644 --- a/src/rwl.h +++ b/src/rwl.h @@ -13,6 +13,8 @@ * * History * + * bengsig 25-may-2023 - make rwlprogram known to tags/cscope + * bengsig 15-may-2023 - statisticsonly * bengsig 1-may-2023 - $hostname: directive * bengsig 24-apr-2023 - Fix bug with plain every after queue every * bengsig 17-apr-2023 - Engineering notation output @@ -884,7 +886,7 @@ struct rwl_main #define RWL_P_PERSECSTAT 0x00004000 /* gather per second counts */ #define RWL_P_ONLYMAINTH 0x00008000 /* set when only main thread exists */ #define RWL_P_ISMAIN 0x00010000 /* set for thread used by main */ -#define RWL_P_PROCHASSQL 0x00020000 /* set when compiling a procedure that needs database */ +#define RWL_P_unused1 0x00020000 #define RWL_P_SQLWASPLS 0x00040000 /* last NAMEDSQL lexed was a PL/SQL block */ #define RWL_P_PRINTTOFILE 0x00080000 /* set when printing (write) is to a file */ #define RWL_P_PRINTBLANK 0x00100000 /* next print should include blank */ @@ -973,6 +975,10 @@ struct rwl_main #define RWL_P3_RWLI2SOK 0x40000000 // Use rwli2s to convert sb8 to string #define RWL_P3_RWLD2SOK 0x80000000 // Use rwld2s to convert double to string + ub4 m4flags; /* even more flags - only in main */ +#define RWL_P4_PROCHASSQL 0x00000001 // A procedure/function includes SQL +#define RWL_P4_STATSONLY 0x00000002 // Procedure declare with statisticsonly + int userexit; // value for user exit text *boname; // Prefix for automatic bind out name @@ -1407,6 +1413,7 @@ enum rwl_code_t , RWL_CODE_PRINTBLANK // print expression plus blank - ceptr1 is stack , RWL_CODE_RAPROC // call some random code - ceptr1 is variable name, ceint2 location guess , RWL_CODE_SQLHEAD // Code head for procedure with database calls */ +, RWL_CODE_HEADSTATS // Code head for procedure with statisticsonly , RWL_CODE_COMMIT // execute database commit - no arguments , RWL_CODE_ROLLBACK // execute database rollback - no arguments , RWL_CODE_ENDCUR // end of cursor loop */ @@ -1467,8 +1474,9 @@ enum rwl_code_t , RWL_CODE_CQNISCB // set is callback flag , RWL_CODE_CQNBREAK // break cqn -/* these MUST come last */ +// these MUST come last for rwlprintvar , RWL_CODE_END // return/finish */ +, RWL_CODE_STATEND // return from procedure with statisticsonly , RWL_CODE_SQLEND // return from something with database calls - ceptr1 is variable name (of procedure), ceint2 location guess }; @@ -1989,6 +1997,8 @@ extern const char rwlexecbanner[]; #define RWL_VERSION_DATE // undef to not include compile date extern ub4 rwlpatch; +// make rwlprogram a known symbol to tags/cscope +#define rwlprogram rwlyparse #define rwlcomp(s,x) const char s[] = "rwlwatermark: " rwlxstr(x) " " __FILE__ ; #define rwlxstr(x) #x diff --git a/src/rwlarglex.l b/src/rwlarglex.l index 5876485a..62c3afa9 100644 --- a/src/rwlarglex.l +++ b/src/rwlarglex.l @@ -12,6 +12,7 @@ * * History * + * bengsig 12-jun-2023 - Make rwm a variable in scanners * bengsig 10-aug-2022 - Output userhelp in order from rwl source file * bengsig 10-aug-2022 - Don't reorder useroption/userswitch * bengsig 04-jul-2022 - Restructure scan string, scan SQL code @@ -39,10 +40,9 @@ #include "rwldiprs.tab.h" #define YYSTYPE RWLZSTYPE #define YY_DECL sb4 rwlalex(void *yylval_param, void * yyscanner) +#define YY_USER_ACTION { rwm = (yyget_extra(yyscanner)); } -/* The rwm define is used to make code below legible */ -#define rwm (yyget_extra(yyscanner)) // to avoid flex generating some code: // #define YY_NO_INPUT @@ -59,6 +59,11 @@ %% +%{ + rwl_main *rwm = 0; // will be set using YY_USER_ACTION +%} + + (?i:administer[ \r\n]+key[ \r\n]+management) | (?i:associate[ \r\n]+statistics) | (?i:disassociate[ \r\n]+statistics) | diff --git a/src/rwlcodeadd.c b/src/rwlcodeadd.c index b0f98e01..fc4d5bdd 100644 --- a/src/rwlcodeadd.c +++ b/src/rwlcodeadd.c @@ -13,6 +13,7 @@ * * History * + * bengsig 15-may-2023 - statisticsonly, incorrect RWL-239 * bengsig 24-apr-2023 - Fix bug when every follows queue every * bengsig 7-feb-2023 - Proper servere text * bengsig 11-jan-2023 - CQN Project @@ -78,6 +79,7 @@ void rwlcodeadd(rwl_main *rwm, rwl_code_t ctype, void *parg1 { case RWL_CODE_HEAD: case RWL_CODE_SQLEND: + case RWL_CODE_STATEND: case RWL_CODE_END: break; default: @@ -92,6 +94,7 @@ void rwlcodeadd(rwl_main *rwm, rwl_code_t ctype, void *parg1 case RWL_CODE_CBLOCK_BEG: rwm->code[rwm->ccount].cname = "cbbeg"; break; case RWL_CODE_CBLOCK_END: rwm->code[rwm->ccount].cname = "cbend"; break; case RWL_CODE_SQLHEAD: rwm->code[rwm->ccount].cname = "hddb"; break; + case RWL_CODE_HEADSTATS: rwm->code[rwm->ccount].cname = "hdst"; break; case RWL_CODE_ASSIGN: rwm->code[rwm->ccount].cname = "assn"; break; case RWL_CODE_APPEND: rwm->code[rwm->ccount].cname = "appn"; break; case RWL_CODE_STACK: rwm->code[rwm->ccount].cname = "proc()"; break; @@ -141,6 +144,7 @@ void rwlcodeadd(rwl_main *rwm, rwl_code_t ctype, void *parg1 case RWL_CODE_CURBRK: rwm->code[rwm->ccount].cname = "curbrk"; break; case RWL_CODE_ABORT: rwm->code[rwm->ccount].cname = "abort"; break; case RWL_CODE_SQLEND: rwm->code[rwm->ccount].cname = "enddb"; break; + case RWL_CODE_STATEND: rwm->code[rwm->ccount].cname = "endst"; break; case RWL_CODE_ENDCUR: rwm->code[rwm->ccount].cname = "endcur"; break; case RWL_CODE_CANCELCUR: rwm->code[rwm->ccount].cname = "cancur"; break; case RWL_CODE_IF: rwm->code[rwm->ccount].cname = "if"; break; @@ -211,6 +215,7 @@ void rwlcodeadd(rwl_main *rwm, rwl_code_t ctype, void *parg1 case RWL_CODE_SQLHEAD: case RWL_CODE_HEAD: + case RWL_CODE_HEADSTATS: /* procedure begin - parg1 is the identifier */ //PARSER DOES THIS rwm->codeguess=rwladdvar(rwm, parg1, RWL_TYPE_PROC, rwm->addvarbits); /* set the start program counter of this procedure if valid */ @@ -487,6 +492,7 @@ void rwlcodeadd(rwl_main *rwm, rwl_code_t ctype, void *parg1 case RWL_CODE_RETURN: case RWL_CODE_EXIT: case RWL_CODE_SQLEND: + case RWL_CODE_STATEND: case RWL_CODE_SQLLEAK: case RWL_CODE_SQLCCON: case RWL_CODE_SQLCCOFF: @@ -847,7 +853,7 @@ void rwlloopfinish(rwl_main *rwm) * that procedure. It is used in three places: * 1) For building threads ! RWL_P_DXEQMAIN * 2) For building immediatedly executed code RWL_P_DXEQMAIN - * 3) For building immediatedly executed code with sql RWL_PDXEQMAIN and RWL_P_PROCHASSQL + * 3) For building immediatedly executed code with sql RWL_PDXEQMAIN and RWL_P4_PROCHASSQL */ void rwlcodehead(rwl_main *rwm, ub4 thrcount) @@ -871,12 +877,12 @@ void rwlcodehead(rwl_main *rwm, ub4 thrcount) snprintf((char *)thrnam, sizeof(thrnam), "thr#%05d", rwm->thritemno); rwm->codename = rwm->mythr->pname = rwlstrdup(rwm, thrnam); /* codeadd and addvar does not do this */ rwm->loc.errlin = rwm->lexlino; - bic(rwm->m3flags, RWL_P3_WARNSQLKW); + bic(rwm->m3flags, RWL_P3_WARNSQLKW|RWL_P3_FUTNOTIDENT); rwm->codeguess=rwladdvar(rwm, rwm->mythr->pname , bit(rwm->m3flags, RWL_P3_BNOXFUNC) ? RWL_TYPE_FUNC : RWL_TYPE_PROC , RWL_IDENT_INTERNAL|RWL_IDENT_NOSTATS); rwlcodeaddpu(rwm - , bit(rwm->mflags, RWL_P_PROCHASSQL) ? RWL_CODE_SQLHEAD : RWL_CODE_HEAD + , bit(rwm->m4flags, RWL_P4_PROCHASSQL) ? RWL_CODE_SQLHEAD : RWL_CODE_HEAD , rwm->mythr->pname, (ub4) rwm->codeguess); /* generate head */ rwm->loc.errlin = 0; rwm->mythr->lguess = rwm->codeguess; @@ -922,7 +928,7 @@ void rwlcodetail(rwl_main *rwm) } rwm->lvsav = 0; /* clean to avoid trouble */ - if (bit(rwm->mflags, RWL_P_PROCHASSQL)) + if (bit(rwm->m4flags, RWL_P4_PROCHASSQL)) { // modify RWL_CODE_HEAD to RWL_CODE_SQLHEAD if needed ub4 c = rwm->mxq->evar[l].vval; /* first pc in my procedure */ diff --git a/src/rwlcoderun.c b/src/rwlcoderun.c index f767e6f6..a2ec3711 100644 --- a/src/rwlcoderun.c +++ b/src/rwlcoderun.c @@ -14,6 +14,7 @@ * * History * + * bengsig 15-may-2023 - statisticsonly * bengsig 3-apr-2023 - Allow 0 cursorcache * bengsig 16-mar-2023 - Allow #undef RWL_USE_OCITHR * bengsig 9-mar-2023 - Fix tgotdb/thead calculation @@ -92,7 +93,11 @@ void *rwlcoderun ( rwl_xeqenv *xev) ub4 tookses = 0; sb4 alsoblank = 0; ub4 miscuse = 0; - double thead = 0.0, tgotdb = 0.0, tend = 0.0; + double thead = 0.0, tgotdb = 0.0, tend = 0.0, texec = 0.0; + // thead is the time at which we start the procedure + // tgotdb is the time at which we have gotten the database + // tend is the time at which the procedure terminates + // texec is the second the is the registration time, i.e. the second column of persec text *codename; rwl_identifier *pproc; @@ -110,6 +115,7 @@ void *rwlcoderun ( rwl_xeqenv *xev) switch (xev->rwm->code[pc].ctyp) { case RWL_CODE_HEAD: + case RWL_CODE_HEADSTATS: case RWL_CODE_SQLHEAD: { @@ -243,6 +249,26 @@ void *rwlcoderun ( rwl_xeqenv *xev) pc++; break; + case RWL_CODE_HEADSTATS: + if (bit(xev->rwm->mflags, RWL_DEBUG_EXECUTE)) + rwldebug(xev->rwm, "at recursive depth %d, pc=%d, pvar=%d executing HEADSTATS %s" + , xev->pcdepth + , pc + , xev->rwm->code[pc].ceint2 + , xev->rwm->code[pc].ceptr1); + // In a statisticsonly procedure, pretend we got the database + // when the procedure starts + tgotdb = rwlclock(xev, &xev->rwm->code[pc].cloc); + if (bit(xev->rwm->m3flags, RWL_P3_QETIMES) && *xev->pclflags) + // Set the start of the procedure to the time we really + // would have wanted it to start if we have + // $queueeverytime:on in effect + thead = *xev->parrivetime; + else + thead = tgotdb; + pc++; + break; + case RWL_CODE_SQLHEAD: { /* database calls needed */ @@ -267,6 +293,11 @@ void *rwlcoderun ( rwl_xeqenv *xev) ) { if (bit(xev->rwm->m3flags, RWL_P3_QETIMES) && *xev->pclflags) + // Set the start of the procedure to the time we really + // would have wanted it to start if we have + // $queueeverytime:on in effect + // Also set get tgotdb to the same value, it may be overwritten + // below tgotdb = thead = *xev->parrivetime; else tgotdb = thead = rwlclock(xev, &xev->rwm->code[pc].cloc); @@ -316,11 +347,15 @@ void *rwlcoderun ( rwl_xeqenv *xev) case RWL_DBPOOL_POOLED: case RWL_DBPOOL_SESSION: case RWL_DBPOOL_RECONNECT: + // Make tgotdb actually show when we got a real session in rwlensuresession tgotdb = rwlclock(xev, &xev->rwm->code[pc].cloc); break; case RWL_DBPOOL_DEDICATED: case RWL_DBPOOL_RETHRDED: + // When $queueeverytimes:on is in effect, we adjust the time + // when we say we got the database although it is possibly only + // a tiny bit more than what it was if (bit(xev->rwm->m3flags, RWL_P3_QETIMES) && *xev->pclflags) tgotdb = rwlclock(xev, &xev->rwm->code[pc].cloc); else @@ -392,12 +427,14 @@ void *rwlcoderun ( rwl_xeqenv *xev) , 0 /*rwl_sql*/, codename); } tookses = 0; + texec = tend = rwlclock(xev, &xev->rwm->code[pc].cloc); + // we count the procedure when its done, so texec=tend + dealwithjuststats: if (bit(xev->tflags, RWL_P_STATISTICS) && !bit(xev->tflags, RWL_P_ISMAIN) ) { sb4 l3; - tend = rwlclock(xev, &xev->rwm->code[pc].cloc); /* * in first call, we need to allocate the rwl_stats (and possibly * rwl_hist) structures @@ -455,7 +492,7 @@ void *rwlcoderun ( rwl_xeqenv *xev) rwlstatsincr(xev, xev->evar+l3, &xev->rwm->code[pc].cloc , 0.0 // Unused - , tgotdb - thead, tend - tgotdb, tend); + , tgotdb - thead, tend - tgotdb, texec); } } goto endprogram; // Leave the big loop @@ -463,6 +500,24 @@ void *rwlcoderun ( rwl_xeqenv *xev) break; + case RWL_CODE_STATEND: + if (bit(xev->rwm->mflags, RWL_DEBUG_EXECUTE)) + rwldebug(xev->rwm, "pc=%d executing STATEND %d", pc, tookses); + /*assert*/ + if (tookses) + { + rwlexecsevere(xev, &xev->rwm->code[pc].cloc + , "[rwlcoderun-endstatwithdb:%d;%d]", xev->pcdepth, pc); + rwlreleasesession(xev, &xev->rwm->code[pc].cloc, xev->curdb, 0); + tookses = 0; + } + tend = rwlclock(xev, &xev->rwm->code[pc].cloc); + texec = thead; + // a statisticsonly procedure is counted when it was started + goto dealwithjuststats; // some lines above from here + break; + + case RWL_CODE_ENDCUR: if (bit(xev->rwm->mflags, RWL_DEBUG_EXECUTE)) rwldebug(xev->rwm, "pc=%d executing ENDCUR %d", pc, tookses); diff --git a/src/rwldilex.l b/src/rwldilex.l index 582de982..111edb44 100644 --- a/src/rwldilex.l +++ b/src/rwldilex.l @@ -14,7 +14,10 @@ * * History * - * bengsig 8-may-2023 - Normal Distributed random + * bengsig 12-jun-2023 - Make rwm a variable in scanners + * bengsig 25-may-2023 - Use rwlscanstring.c + * bengsig 15-may-2023 - statisticsonly + * bengsig 8-mar-2023 - Normal Distributed random * bengsig 9-jan-2023 - CQN Project * bengsig 15-sep-2022 - New file assignment operators * bengsig 29-jun-2022 - Generate project @@ -41,13 +44,13 @@ #include "rwl.h" #include "rwldiprs.tab.h" -/* The rwm define is used to make code below legible */ -#define rwm (yyget_extra(yyscanner)) // to avoid flex generating some code: #define YY_NO_INPUT #define YYSTYPE RWLZSTYPE #define YY_DECL sb4 rwlzlex(void *yylval_param, void *yyscanner) +#define YY_USER_ACTION { rwm = (yyget_extra(yyscanner)); } +#define RWL_IN_DILEX // make rwlscanstring.c do the right thing %} @@ -57,56 +60,19 @@ %% +%{ + rwl_main *rwm = 0; // will be set using YY_USER_ACTION +%} + \'(\\.|[^\\'])*\' { // copy from rwllexer.l rwlerror(rwm, RWL_ERROR_USE_QUOTE_FOR_STRING); rwm->badchar++; } /*LEXTAG:RWL_Z_STRING_CONST*/ -\"(\\.|[^\\"])*\" { // mostly like rwllexer.l - text *in, *ut; - /* copy string and remove " at ends */ - rwm->sval = rwlstrdup(rwm, (text *)yytext+1); - if ('"' == yytext[yyleng-1]) - { - rwm->sval[yyleng-2] = 0; - } - /* handle \ escapes */ - for (ut=in=rwm->sval; *in; ut++, in++) - { - if ('\n' == *in) - rwm->loc.lineno++; - if (*in == '\\') - { - in++; - switch (*in) - { - case '\\': *ut='\\'; break; - case '\"': *ut='\"'; break; - case 'n': *ut='\n'; break; - case 't': *ut='\t'; break; - case 'r': *ut='\r'; break; - case 'e': *ut='\e'; break; - case 0: goto end_of_string; - default: - *ut= *in; - rwlerror(rwm, RWL_ERROR_INVALID_ESCAPE_NO_POS, *in); - break; - } - } - else - *ut = *in; - } - end_of_string: - *ut = 0; - rwm->slen = rwlstrlen(rwm->sval); - if (rwm->slen>RWL_MAX_STRING_LENGTH) - { - rwlerror(rwm, RWL_ERROR_STRING_TOO_LONG, RWL_MAX_STRING_LENGTH); - rwm->slen=RWL_MAX_STRING_LENGTH; - rwm->sval[rwm->slen] = 0; - } - return RWL_Z_STRING_CONST; +\"(\\.|[^\\"])*\" { +// Use this tag in vi: rwlscanstring +#include "rwlscanstring.c" } /*LEXTAG:RWL_Z_DOUBLE_CONST*/ @@ -191,6 +157,7 @@ "uniform" | "normalrandom" | "statistics" | +"statisticsonly" | "nostatistics" | "sqrt" | "substr" | @@ -436,8 +403,6 @@ %% -#undef rwm /* now outside flex code */ - sb4 rwlzwrap(yyscan_t ys) { return 1; diff --git a/src/rwlerror.h b/src/rwlerror.h index 53f5d40f..e7b748a0 100644 --- a/src/rwlerror.h +++ b/src/rwlerror.h @@ -11,6 +11,7 @@ * * History * + * bengsig 15-may-2023 - statisticsonly * bengsig 3-feb-2023 - No OCI_ATTR_TRANSACTION_IN_PROGRESS in 11.2 * bengsig 26-jan-2023 - RWL-046 changed; removed some punctuation * bengsig 25-jan-2023 - Add #define for error number in tags/cscope @@ -1667,6 +1668,12 @@ RWLERROR("the stddev (%.2f) argument to normalrandom is not positive", RWL_ERROR RWLEDESC("The second argument to the normalrandom function is the standard deviation,\n" "which must be a positive number") +#define RWL_ERROR_STATSONLY_DOES_SQL 302 +RWLERROR("the statisticsonly procedure '%s' cannot execute any SQL", RWL_ERROR_PARSE) +RWLEDESC("The statisticsonly attribute can only be used with procdures that do not\n" +"perform any sql or other database calls. You need to either remove database\n" +"activity from the procedure or remove the statisticsonly attribute") + // When adding new errors, add them before these lines // and make sure the #define follows a format like // #define RWL_ERROR_whatever_reasonable_here NNN diff --git a/src/rwllexer.l b/src/rwllexer.l index 9dcf7c3a..82b18489 100644 --- a/src/rwllexer.l +++ b/src/rwllexer.l @@ -11,6 +11,8 @@ * * History * + * bengsig 12-jun-2023 - Make rwm a variable in scanners + * bengsig 15-may-2023 - statisticsonly, incorrect RWL-293 * bengsig 2-may-2023 - $hostname: directive * bengsig 17-apr-2023 - Engineering notation output * bengsig 29-mar-2023 - Deal properly with integer/double @@ -90,11 +92,9 @@ #include "rwl.h" #include "rwlparser.tab.h" -#define rwm (yyget_extra(yyscanner)) - #define YYSTYPE RWLYSTYPE #define YY_DECL sb4 rwlylex(void *yylval_param, void *yyscanner) -#define YY_USER_ACTION { rwm->loc.inpos += yyleng; } +#define YY_USER_ACTION { rwm = (yyget_extra(yyscanner)); rwm->loc.inpos += yyleng; } %} @@ -104,6 +104,10 @@ %% +%{ + rwl_main *rwm = 0; // will be set using YY_USER_ACTION +%} + /* **************************************************************** */ /* NOTE THAT ANY CHANGES HERE MUST BE KEPT IN SYNC WITH rwlarglex.l */ /* **************************************************************** */ @@ -416,7 +420,9 @@ "round" if (!rwm->ifdirbit) return RWL_T_ROUND; /*LEXTAG:RWL_T_STATISTICS*/ "statistics" if (!rwm->ifdirbit) return RWL_T_STATISTICS; - /*LEXTAG:RWL_T_NOSTATISTICS*/ + /*LEXTAG:RWL_T_STATISTICSONLY*/ +"statisticsonly" if (!rwm->ifdirbit) return RWL_T_STATISTICSONLY; + /*LEXTAG:RWL_T_SQRT*/ "nostatistics" if (!rwm->ifdirbit) return RWL_T_NOSTATISTICS; /*LEXTAG:RWL_T_SQRT*/ "sqrt" if (!rwm->ifdirbit) return RWL_T_SQRT; @@ -695,6 +701,7 @@ rwm->inam = rwlstrdup(rwm, (text *)yytext); if (rwlstrlen(rwm->inam)>30) rwlerror(rwm, RWL_ERROR_VERY_LONG_IDENTIFIER, rwm->inam); + bic(rwm->m3flags, RWL_P3_FUTNOTIDENT); return RWL_T_IDENTIFIER; } } @@ -1525,8 +1532,6 @@ %% -#undef rwm /* now outside flex code */ - /* this rouine must be here as it depends on #define * and typedefs created by flex */ diff --git a/src/rwlparser.y b/src/rwlparser.y index 1cbd46b7..be18a751 100644 --- a/src/rwlparser.y +++ b/src/rwlparser.y @@ -11,6 +11,8 @@ * * History * + * bengsig 25-may-2023 - Improve syntax understanding + * bengsig 15-may-2023 - statisticsonly * bengsig 24-apr-2023 - Fix bug when every follows queue every * bengsig 3-apr-2023 - Allow 0 cursorcache * bengsig 29-mar-2023 - Deal properly with integer/double @@ -280,6 +282,7 @@ static const rwl_yt2txt rwlyt2[] = , {"RWL_T_START", "'start'"} , {"RWL_T_STATEMARK", "'statemark'"} , {"RWL_T_STATISTICS", "'statistics'"} + , {"RWL_T_STATISTICSONLY", "'statisticsonly'"} , {"RWL_T_STOP", "'stop'"} , {"RWL_T_STRING", "'string'"} , {"RWL_T_STRING_CONST", "string constant"} @@ -457,7 +460,7 @@ rwlcomp(rwlparser_y, RWL_GCCFLAGS) %token RWL_T_UNSIGNED RWL_T_HEXADECIMAL RWL_T_OCTAL RWL_T_FPRINTF RWL_T_ENCODE RWL_T_DECODE %token RWL_T_STRING_CONST RWL_T_IDENTIFIER RWL_T_INTEGER_CONST RWL_T_DOUBLE_CONST RWL_T_PRINTF %token RWL_T_PIPEFROM RWL_T_PIPETO RWL_T_RSHIFTASSIGN RWL_T_GLOBAL RWL_T_QUERYNOTIFICATION -%token RWL_T_NORMALRANDOM +%token RWL_T_NORMALRANDOM RWL_T_STATISTICSONLY // standard order of association %left RWL_T_CONCAT @@ -507,8 +510,38 @@ programelementlist: programelement: statement - // Here are declarations that are only available globally + | globaldeclaration + | threadexecution + // printvar + | RWL_T_PRINTVAR RWL_T_ALL + terminator + { rwlprintallvars(rwm); } + | RWL_T_PRINTVAR printvarlist + terminator + + ; + /* end of programelement */ + +globaldeclaration: // this is everything except integer, double, string, clob, sql + databasedeclaration + + | subroutinedeclaration codeterminator + { + if (bit(rwm->m3flags, RWL_P3_BNOXPROC|RWL_P3_BNOXFUNC)) + rwlcodetail(rwm); + bic(rwm->m3flags, RWL_P3_BNOXPROC|RWL_P3_BNOXFUNC); + /* Is is crucial to set codename to 0 here as this means we + are no longer compiling code. rwm->codename is used in many + places as argument to rwlfindvar2 to mean that we are compiling + code and therefore need rwlfindvar2 to local for potential + local variables + */ + + rwm->codename = 0; // we are no longer compiling code + rwm->codeguess = RWL_VAR_NOGUESS; + } + | RWL_T_PRIVATE RWL_T_RANDOM RWL_T_STRING RWL_T_ARRAY RWL_T_IDENTIFIER { rwm->raname = rwm->inam; @@ -542,37 +575,7 @@ programelement: rwlrastbeg(rwm, rwm->raname, RWL_TYPE_RAPROC); } ranidentifierspec - - // more complex declarations - | database - // - | subroutinedeclaration codeterminator - { - if (bit(rwm->m3flags, RWL_P3_BNOXPROC|RWL_P3_BNOXFUNC)) - rwlcodetail(rwm); - bic(rwm->m3flags, RWL_P3_BNOXPROC|RWL_P3_BNOXFUNC); - /* Is is crucial to set codename to 0 here as this means we - are no longer compiling code. rwm->codename is used in many - places as argument to rwlfindvar2 to mean that we are compiling - code and therefore need rwlfindvar2 to local for potential - local variables - */ - - rwm->codename = 0; // we are no longer compiling code - rwm->codeguess = RWL_VAR_NOGUESS; - } - - // printvar - | RWL_T_PRINTVAR RWL_T_ALL - terminator - { rwlprintallvars(rwm); } - | RWL_T_PRINTVAR printvarlist - terminator - - | threadexecution - - ; - /* end of programelement */ + ; ranstringspec: '(' ranstringlist ')' @@ -623,7 +626,7 @@ ranidentifierentry: {rwlrastadd(rwm, rwm->raentry, rwm->pval.dval); } ; -database: +databasedeclaration: RWL_T_DATABASE RWL_T_IDENTIFIER { // add identifier @@ -1039,7 +1042,7 @@ functionhead: // start building a dummy procedure we never execute rwm->totthr = 0; rwlerror(rwm, RWL_ERROR_FUNCTION_WRONG); - bic(rwm->mflags,RWL_P_PROCHASSQL); + bic(rwm->m4flags,RWL_P4_PROCHASSQL); //bis(rwm->mflags, RWL_P_DXEQMAIN); bis(rwm->m3flags, RWL_P3_BNOXFUNC); if (!rwm->codename) // We might have done the codeadd below @@ -1052,7 +1055,7 @@ functionhead: if (!bit(rwm->mxq->errbits,RWL_ERROR_SEVERE)) // e.g. out of space rwlcodeaddpu(rwm, RWL_CODE_HEAD, rwm->inam, rwm->codeguess); rwm->codename = rwm->inam; - bic(rwm->mflags,RWL_P_PROCHASSQL); + bic(rwm->m4flags,RWL_P4_PROCHASSQL); bic(rwm->m2flags,RWL_P2_HAS_RETURN); bis(rwm->m2flags,RWL_P2_COMP_FUNC); /* Initially allocate temp array of MAX @@ -1102,7 +1105,7 @@ procedurehead: { // start building a dummy procedure we never execute rwm->totthr = 0; - bic(rwm->mflags,RWL_P_PROCHASSQL); + bic(rwm->m4flags,RWL_P4_PROCHASSQL); bis(rwm->m3flags, RWL_P3_BNOXPROC); rwlerror(rwm, RWL_ERROR_PROCEDURE_WRONG); if (!rwm->codename) // If we haven't done the code below @@ -1115,7 +1118,7 @@ procedurehead: if (!bit(rwm->mxq->errbits,RWL_ERROR_SEVERE)) /* e.g. out of space */ rwlcodeaddpu(rwm, RWL_CODE_HEAD, rwm->inam, rwm->codeguess); rwm->codename = rwm->inam; - bic(rwm->mflags,RWL_P_PROCHASSQL); + bic(rwm->m4flags,RWL_P4_PROCHASSQL|RWL_P4_STATSONLY); bic(rwm->m2flags,RWL_P2_COMP_FUNC|RWL_P2_HAS_RETURN); rwm->lvsav = rwlalloc(rwm, rwm->maxlocals*sizeof(rwl_localvar)); rwm->facnt = 0; /* formal argument count */ @@ -1194,9 +1197,8 @@ codebody: } rwm->lvsav = 0; /* clean to avoid trouble */ - if (!bit(rwm->mflags, RWL_P_PROCHASSQL)) + if (!bit(rwm->m4flags, RWL_P4_PROCHASSQL|RWL_P4_STATSONLY)) rwlcodeadd0(rwm, RWL_CODE_END); - else { /* change type to RWL_CODE_SQLHEAD */ @@ -1213,12 +1215,24 @@ codebody: } else { - /* tell this procedure needs a database */ - rwm->code[c].ctyp = RWL_CODE_SQLHEAD; - rwm->code[c].cname = "hddb"; + if (bit(rwm->m4flags, RWL_P4_PROCHASSQL)) + { + /* tell this procedure needs a database */ + rwm->code[c].ctyp = RWL_CODE_SQLHEAD; + rwm->code[c].cname = "hddb"; + rwlcodeaddpu(rwm, RWL_CODE_SQLEND, rwm->codename, (ub4)l); + } + if (bit(rwm->m4flags, RWL_P4_STATSONLY)) + { + if (bit(rwm->m4flags, RWL_P4_PROCHASSQL)) + rwlerror(rwm, RWL_ERROR_STATSONLY_DOES_SQL, rwm->codename); + /* tell this procedure does statistics */ + rwm->code[c].ctyp = RWL_CODE_HEADSTATS; + rwm->code[c].cname = "hstat"; + rwlcodeaddpu(rwm, RWL_CODE_STATEND, rwm->codename, (ub4)l); + } } /* assert */ - rwlcodeaddpu(rwm, RWL_CODE_SQLEND, rwm->codename, (ub4)l); - } /* if (bit(rwm->mflags, RWL_P_PROCHASSQL)) */ + } } finishcodebody: ; @@ -1323,8 +1337,10 @@ argumenttype: maybestatistics: /* empty */ + | RWL_T_STATISTICSONLY + { bis(rwm->m4flags,RWL_P4_STATSONLY); } | RWL_T_STATISTICS - { bis(rwm->mflags,RWL_P_PROCHASSQL); } + { bis(rwm->m4flags,RWL_P4_PROCHASSQL); } | RWL_T_NOSTATISTICS { sb4 l; @@ -2435,7 +2451,7 @@ statement: { if (rwm->codename) // building a procedure { - bis(rwm->mflags,RWL_P_PROCHASSQL); + bis(rwm->m4flags,RWL_P4_PROCHASSQL); rwlcodeadd0(rwm, RWL_CODE_OCIPING); } else // directly in main @@ -2468,7 +2484,7 @@ statement: { rwm->rslmisc[rwm->rsldepth] = RWL_VAR_NOGUESS; // see finish wrapper test below - bic(rwm->mflags,RWL_P_PROCHASSQL); + bic(rwm->m4flags,RWL_P4_PROCHASSQL); if (rwm->codename) // building a procedure { sb4 l2; @@ -3024,7 +3040,7 @@ docallonesql: case RWL_TYPE_SQL: /* simple sql */ if (rwm->codename) // building a procedure { - bis(rwm->mflags,RWL_P_PROCHASSQL); + bis(rwm->m4flags,RWL_P4_PROCHASSQL); if (bit(rwm->m2flags, RWL_P2_AT)) { sb4 l2; @@ -3247,7 +3263,7 @@ dosqlloop: } else // no at database clause { - bis(rwm->mflags,RWL_P_PROCHASSQL); + bis(rwm->m4flags,RWL_P4_PROCHASSQL); if (bit(rwm->m2flags, RWL_P2_ATDEFAULT)) { rwlcodeadd0(rwm, RWL_CODE_DEFDB); @@ -3845,7 +3861,7 @@ ifhead: { rwm->totthr = 0; // now in lexer: rwm->lnosav = rwm->loc.lineno; - bic(rwm->mflags,RWL_P_PROCHASSQL); + bic(rwm->m4flags,RWL_P4_PROCHASSQL); bis(rwm->mflags, RWL_P_DXEQMAIN); rwlcodehead(rwm, 1 /*thrcount*/); } @@ -3869,7 +3885,7 @@ elseifhead: { rwm->totthr = 0; // now in lexer: rwm->lnosav = rwm->loc.lineno; - bic(rwm->mflags,RWL_P_PROCHASSQL); + bic(rwm->m4flags,RWL_P4_PROCHASSQL); bis(rwm->mflags, RWL_P_DXEQMAIN); rwlcodehead(rwm, 1 /*thrcount*/); } @@ -5965,7 +5981,7 @@ cqnthread: rwl_estack *estk = 0; rwl_value xnum; text xbuf[RWL_PFBUF]; - bis(rwm->mflags, RWL_P_PROCHASSQL); + bis(rwm->m4flags, RWL_P4_PROCHASSQL); rwlcodehead(rwm, 1); // Wait until start time xnum.dval = rwm->cqnstart; @@ -6027,7 +6043,7 @@ cqnthread: rwlcodeadd0(rwm, RWL_CODE_CQNUNREG); // will unregister rwlcodetail(rwm); } - bic(rwm->mflags, RWL_P_PROCHASSQL); + bic(rwm->m4flags, RWL_P4_PROCHASSQL); } RWL_T_THEN { @@ -6086,7 +6102,7 @@ maybecqnstart: thread: RWL_T_THREADS compiletime_expression // count of unnumbered threads { - bic(rwm->mflags, RWL_P_PROCHASSQL); + bic(rwm->m4flags, RWL_P4_PROCHASSQL); if (rwm->pval.ival < 0) { rwlerror(rwm,RWL_ERROR_THRCOUNT_NEGATIVE, rwm->pval.ival); diff --git a/src/rwlscansql.c b/src/rwlscansql.c index b054149b..1577f8ad 100644 --- a/src/rwlscansql.c +++ b/src/rwlscansql.c @@ -13,6 +13,7 @@ * * History * + * bengsig 12-jun-2023 - Make rwm a variable in scanners * bengsig 04-jul-2022 - Scan sql and pl/sql in lexer */ @@ -33,8 +34,7 @@ ub4 rwlscansql(void) #endif { - rwl_main *rwmhere = rwm; // just for the debugger - rwmhere->sqlbuffer[0] = 0; + rwm->sqlbuffer[0] = 0; ub8 l, len; text *p; sb4 curr, next; diff --git a/src/rwlscanstring.c b/src/rwlscanstring.c index 174cc590..6164dd8c 100644 --- a/src/rwlscanstring.c +++ b/src/rwlscanstring.c @@ -13,20 +13,21 @@ * * History * + * bengsig 12-jun-2023 - Make rwm a variable in scanners + * bengsig 25-may-2023 - Also use in rwldilex.l * bengsig 04-jul-2022 - Creation */ // This code should NOT be compiled stand alone, but only -// included from rwllexer.l and rwlarglex.l +// included from rwllexer.l, rwldilex.l and rwlarglex.l #ifdef NEVER // This makes ctags and cscope add contents ub4 rwlscanstring(void) #endif { - rwl_main *rwmhere = rwm; // just a debugger aid text *in, *ut; - rwmhere->loc.inpos -= yyleng-1; // make error below correct + rwm->loc.inpos -= yyleng-1; // make error below correct /* copy string and remove " at ends */ rwm->sval = rwlstrdup(rwm, (text *)yytext+1); if ('"' == yytext[yyleng-1]) @@ -77,7 +78,11 @@ ub4 rwlscanstring(void) rwm->sval[rwm->slen] = 0; } #ifndef RWL_IN_ARGLEX +# ifdef RWL_IN_DILEX + return RWL_Z_STRING_CONST; +# else if (!rwm->ifdirbit) return RWL_T_STRING_CONST; +# endif #endif } diff --git a/test/345.rwl b/test/345.rwl new file mode 100644 index 00000000..167c5524 --- /dev/null +++ b/test/345.rwl @@ -0,0 +1,52 @@ +# test statisticsonly + +$statistics:all +$clockstart:1 +$include:"testuserinfo.rwl" +$include:"testdefault.rwl" +$include:"testresults.rwl" +$mute:120 +$dformat:%.1f + +procedure proc1() + printline "executing at", runseconds(), everyuntil, loopnumber; + integer one; + select 1 one from dual; + wait 0.8; +end proc1; + +procedure proc1failed() statisticsonly + printline "timed out at", runseconds(), everyuntil, loopnumber; +end proc1failed; + +procedure callproc1() + for start 1 queue every 0.48 stop 10 loop + if runseconds() > everyuntil+0.0 then + proc1failed(); + else + proc1(); + end if; + end; +end; + +run + threads 1 + callproc1(); + end; +end; + +execute at testresults + double second, wtime, etime; + integer scount; + string vname; + for + select second,vname,scount,wtime,etime + from persec + where runnumber = :runnumber + / + loop + if scount != 0 then + printf "%s %.0f %d %.1f %.1f\n", vname, second, scount, wtime/scount, etime/scount; + end if; + end loop; +end; diff --git a/test/346.rwl b/test/346.rwl new file mode 100644 index 00000000..2891e148 --- /dev/null +++ b/test/346.rwl @@ -0,0 +1,3 @@ +$queueeverytiming:on + +$include:"345.rwl" diff --git a/test/test.sh b/test/test.sh index 5663774c..0f9c74dc 100755 --- a/test/test.sh +++ b/test/test.sh @@ -47,7 +47,7 @@ then testlist="$*" else # note that 323..326 test CQN which we don't currently compile in - testlist='1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344' + testlist='1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346' fi diffokcount=0; diff --git a/test/testres/345.err.good b/test/testres/345.err.good new file mode 100644 index 00000000..e69de29b diff --git a/test/testres/345.out.good b/test/testres/345.out.good new file mode 100644 index 00000000..75b0bbe4 --- /dev/null +++ b/test/testres/345.out.good @@ -0,0 +1,35 @@ +executing at 1.0 1.5 1 +executing at 1.8 2.0 2 +timed out at 2.6 2.4 3 +executing at 2.6 2.9 4 +timed out at 3.4 3.4 5 +executing at 3.4 3.9 6 +executing at 4.2 4.4 7 +timed out at 5.0 4.8 8 +executing at 5.0 5.3 9 +timed out at 5.8 5.8 10 +executing at 5.8 6.3 11 +executing at 6.6 6.8 12 +timed out at 7.4 7.2 13 +executing at 7.4 7.7 14 +timed out at 8.2 8.2 15 +executing at 8.2 8.7 16 +executing at 9.0 9.2 17 +timed out at 9.8 9.6 18 +executing at 9.8 10.1 19 +proc1 2 1 0.0 0.8 +proc1 3 1 0.0 0.8 +proc1 4 1 0.0 0.8 +proc1 5 1 0.0 0.8 +proc1 6 2 0.0 0.8 +proc1 7 1 0.0 0.8 +proc1 8 1 0.0 0.8 +proc1 9 1 0.0 0.8 +proc1 10 2 0.0 0.8 +proc1 11 1 0.0 0.8 +proc1failed 3 1 0.0 0.0 +proc1failed 4 1 0.0 0.0 +proc1failed 6 2 0.0 0.0 +proc1failed 8 1 0.0 0.0 +proc1failed 9 1 0.0 0.0 +proc1failed 10 1 0.0 0.0 diff --git a/test/testres/346.err.good b/test/testres/346.err.good new file mode 100644 index 00000000..e69de29b diff --git a/test/testres/346.out.good b/test/testres/346.out.good new file mode 100644 index 00000000..1586f693 --- /dev/null +++ b/test/testres/346.out.good @@ -0,0 +1,36 @@ +executing at 1.0 1.5 1 +executing at 1.8 2.0 2 +timed out at 2.6 2.4 3 +executing at 2.6 2.9 4 +timed out at 3.4 3.4 5 +executing at 3.4 3.9 6 +executing at 4.2 4.4 7 +timed out at 5.0 4.8 8 +executing at 5.0 5.3 9 +timed out at 5.8 5.8 10 +executing at 5.8 6.3 11 +executing at 6.6 6.8 12 +timed out at 7.4 7.2 13 +executing at 7.4 7.7 14 +timed out at 8.2 8.2 15 +executing at 8.2 8.7 16 +executing at 9.0 9.2 17 +timed out at 9.8 9.6 18 +executing at 9.8 10.1 19 +proc1 2 1 0.0 0.8 +proc1 3 1 0.3 0.8 +proc1 4 1 0.2 0.8 +proc1 5 1 0.0 0.8 +proc1 6 2 0.2 0.8 +proc1 7 1 0.0 0.8 +proc1 8 1 0.3 0.8 +proc1 9 1 0.2 0.8 +proc1 10 2 0.2 0.8 +proc1 11 1 0.2 0.8 +proc1failed 2 1 0.6 0.0 +proc1failed 3 1 0.5 0.0 +proc1failed 5 1 0.6 0.0 +proc1failed 6 1 0.5 0.0 +proc1failed 7 1 0.6 0.0 +proc1failed 8 1 0.5 0.0 +proc1failed 10 1 0.6 0.0