Skip to main content

SMT test script

We are comparing the performance on oracle database when the AIX is configured with SMT 4 and NO SMT, I create the following scripts to test the elapsed time when running multiple oracle queries at one time.

1. The PL/SQL code: the procedure smttestproc measures the elapsed time in milliseconds. 


create table SMTTEST (roundid int,totalprocess int, processid int,starttime timestamp,endtime timestamp,elapsedmilliseconds number(10,0),tablerows int);
create or replace procedure smttestproc(roundid in int,totalprocess in int,processid in int)
is
begintime timestamp;
endtime timestamp;
elapsedmilliseconds number(10,0);
tablerows int;
begin
select count(*) into tablerows from table_line;
select systimestamp into begintime from dual;
select count(*) into tablerows from table_line,table_line;
select systimestamp into endtime from dual;
 select sum(
    (extract(hour from endtime)-extract(hour from endtime))*3600+
    (extract(minute from endtime)-extract(minute from begintime))*60+
   extract(second from endtime)-extract(second from begintime))*1000 ms into elapsedmilliseconds from dual;
insert into smttest values (roundid,totalprocess, processid,begintime,endtime,elapsedmilliseconds,tablerows);
commit;
end;

2. Unix shell script:
2.1 the bottomline script:

$ more smttest_muser.ksh
if [ $# -ne 4 ]
then
        echo "Example: `basename $0` <SID> <roundid> <totalprocess> <processid>"
print $#
        exit 1
fi
export ORAENV_ASK=NO
typeset -u ORACLE_SID=$1
export ORACLE_SID
. oraenv
export PATH=$ORACLE_HOME/bin:/usr/local/bin:/usr/bin:$PATH
n=$2
$ORACLE_HOME/bin/sqlplus -s /nolog <<EOF
connect ctvdba/chinat0wn
exec smttestproc($2,$3,$4);
EOF

2.2 the wrapper script:

$more smttest_main.ksh
#!/bin/sh

if [ $# -ne 3 ]
then
        echo "Example: `basename $0` <SID> <roundid> <NumberOfProcesses>"
        exit 1
fi
export ORAENV_ASK=NO
typeset -u ORACLE_SID=$1
export ORACLE_SID
. oraenv
export PATH=$ORACLE_HOME/bin:/usr/local/bin:/usr/bin:$PATH

START=$(date +%s)

echo $(date)
export NumberOfProcess=$3
#for n in {1..$3}
n=1
while [ $n -le $3 ]
do
echo $n
nohup  /home/oracle/dba/jsun/smttest_muser.ksh $ORACLE_SID $2 $3 $n &
n=`expr $n+1`
done

while :
do
rc=`ps -ef|grep smttest_muser.ksh|grep -v grep|wc -l`
if [ $rc = 0 ]
then
break
fi
done


END=$(date +%s)
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"

3. Run it:

the example below is the third round of test, and it spawn 4 parallel processes:

./smttest_main.ksh ORACLE_SID 3 4

4. Analyze result:

Query the table smttest about the elapsed time etc. and show the result in excel chat.

select * from smtest


Comments

Popular posts from this blog

non-existent process lock port on windows server

I have a database link created between oracle and sqlserver using oracle tg4odbc, the product is installed on windows server and run as service "OracleOraGtw11g_home1TNSListener", but sometime the service cannot started, the root cause of this problem is that the port number 1521 is used by an non-existent process. The first step is to use netstat -bano|find "1521" to get the process id, in my case it's 5844, which shows the connection is from my oracle server 10.8.0.169 H:\>netstat -bano|find "1521"   TCP    0.0.0.0:1521           0.0.0.0:0              LISTENING       5844   TCP    10.14.45.33:1521       10.8.0.169:42987       ESTABLISHED     5844 however the process id does not show in either task manager or process explorer. The next step is to run tcpview, which shows non-existent under process column, there are three rows, two show status as "listening", the other one shows status "established", right click and k

Opatch apply/lsinventory error: oneoff is corrupted or does not exist

I am applying the quarterly patch for 19c RDBMS, I tried using napply but failed, but somehow it corrupted the inventory though nothing applied. further apply and lsinventory command ran into error like this: $ ./OPatch/opatch lsinventory Oracle Interim Patch Installer version 12.2.0.1.21 Copyright (c) 2020, Oracle Corporation.  All rights reserved. Oracle Home       : /u02/app/oracle/19.0.0 Central Inventory : /u01/app/oraInventory    from           : /u02/app/oracle/19.0.0/oraInst.loc OPatch version    : 12.2.0.1.21 OUI version       : 12.2.0.7.0 Log file location : /u02/app/oracle/19.0.0/cfgtoollogs/opatch/opatch2020-09-08_13-35-59PM_1.log Lsinventory Output file location : /u02/app/oracle/19.0.0/cfgtoollogs/opatch/lsinv/lsinventory2020-09-08_13-35-59PM.txt -------------------------------------------------------------------------------- Inventory load failed... OPatch cannot load inventory for the given Oracle Home. LsInventorySession failed: Unable to create patchObject Possible ca

shell script to clean up oracle dumpfile

https://github.com/iacosta/personal/blob/master/shells/cleanhouse.sh #!/bin/ksh # # Script used to cleanup any Oracle environment. # # Cleans:      audit_file_dest #              background_dump_dest #              core_dump_dest #              user_dump_dest #              Clusterware logs # # Rotates:     Alert Logs #              Listener Logs # # Scheduling:  00 00 * * * /networkdrive/dba/scripts/purge/cleanup.sh -d 7 > /u01/dba/bin/cleanup.log 2>&1 # # Created By:  Lei Dao # # # RM="rm -f" RMDIR="rm -rf" LS="ls -l" MV="mv" TOUCH="touch" TESTTOUCH="echo touch" TESTMV="echo mv" TESTRM=$LS TESTRMDIR=$LS SUCCESS=0 FAILURE=1 TEST=0 HOSTNAME=`hostname` ORAENV="oraenv" TODAY=`date +%Y%m%d` ORIGPATH=/usr/local/bin:$PATH ORIGLD=$LD_LIBRARY_PATH export PATH=$ORIGPATH # Usage function. f_usage(){   echo "Usage: `basename $0` -d DAYS [-a DAYS] [-b DAYS] [