运维联盟俱乐部

 找回密码
 立即注册
查看: 3151|回复: 0

informix巡检脚本(Linux,aix)

[复制链接]
  • TA的每日心情
    开心
    2023-8-9 11:05
  • 发表于 2020-1-16 15:09:50 | 显示全部楼层 |阅读模式
    1. #!/bin/sh
    2. #Author & Date :Xilai 09-08-11
    3. #Version:0.35
    4. #Modify by xilai 2011-10-17 fixed bug

    5. usage(){
    6. echo Usage:$(basename $0) + n
    7. }

    8. [ $# -lt 1 ]&&{
    9. usage
    10. exit 1
    11. }
    12. echo $1|grep -qv '[^0-9]'
    13. rt=$?
    14. [ $rt -ne 0 ] && {
    15. usage
    16. exit 5
    17. }

    18. check_os(){
    19. (uname -a|grep Linux)&&return 1;
    20. (uname -a|grep AIX)&&return 2;
    21. (uname -a|grep HP)&&return 3;
    22. }

    23. [ `id -g` -eq `id -g informix` ] || {
    24. echo 'Permission Denied!'
    25. exit 2
    26. }
    27. #Check env

    28. [ "$INFORMIXDIR" -a "$INFORMIXSERVER" ] || {
    29. echo 'Please Set Informix env First!'
    30. exit 3
    31. }

    32. onstat - >/dev/null
    33. [ $? -eq 5 ]||{
    34. echo Please start ids First ..
    35. exit 4
    36. }
    37. p1=$1
    38. if [ ! $p1 ];then
    39.         p1=1000
    40. fi

    41. echo_title()
    42. {
    43.         echo >>$OUTPUT
    44.         echo ${index}. $* >> $OUTPUT
    45.         #((index++))
    46.         let index=$index+1
    47.         echo >> $OUTPUT
    48. }
    49. echo_back()
    50. {
    51.   [ $(echo $SHELL|grep bash|wc -l) -eq 1 ]&&{
    52.         echo -n $*
    53. }||{
    54.         echo "$*\c"
    55. }
    56. }

    57. DATE=$(date '+%Y%m%d')
    58. DIR=monitor${DATE}/$INFORMIXSERVER
    59. cd /tmp
    60. rm -fr $DIR
    61. mkdir -p ${DIR}
    62. cd $DIR
    63. OUTPUT=monitor.rep
    64. touch $OUTPUT
    65. index=1
    66. DFUS=85
    67. COMNAME=$0
    68. DF="df -v"
    69. if [ $(uname|grep HP|wc -l) -eq 1 ];then
    70.        DF="bdf"
    71. else
    72.        DF="df -v"
    73. fi

    74. #System Command...

    75. if [ "$ONCONFIG" ];then
    76.         onconfig=$ONCONFIG
    77. else
    78.         onconfig=onconfig
    79. fi

    80. onlog=$(cat ${INFORMIXDIR}/etc/${onconfig}|grep -v "^#"|grep MSGPATH|awk '{print $2}')
    81. if [ ${SHELL} = '/bin/bash' ];then
    82.          PROFILE=.bash_profile
    83. else
    84.          PROFILE=.profile
    85. fi
    86. cp /etc/hosts .
    87. cp /etc/services .
    88. cp $INFORMIXDIR/etc/sqlhosts .
    89. cp $INFORMIXDIR/etc/$onconfig .
    90. cp ${HOME}/${PROFILE} .
    91. cp ${onlog} .
    92. #cp /var/adm/syslog/syslog.log .

    93. echo_back Collecting System Information ...
    94. #cpus=$(cat /proc/cpuinfo |grep processor|wc -l)
    95. check_os>/dev/null
    96. os=$?
    97. case $os in
    98.   1)
    99.         cpus=$(cat /proc/cpuinfo |grep processor|wc -l)
    100.         #mem=$(vmstat|sed -n '/swpd/{n;p;}'|awk '{print $4+$5+$6}')
    101.         mem=$(free |grep Mem|awk '{print $2}')
    102.         ;;
    103.   2)
    104.         #cpus=$(vmstat|grep "System configuration"|awk -F"[ |=]" '{print $4}')
    105.         cpus=$(lsdev -Cc processor|wc -l)
    106.         mem=$(vmstat|grep -i "System configuration"|awk -F"[ |=]" '{print $6}')
    107.         ;;
    108.   3)
    109.         cpus=$(machinfo|grep "logical processors"|awk '{print $1}')
    110.         mem=$(machinfo|grep "Memory"|awk '{print $2 $3}')
    111.         ;;
    112. esac
    113. osver="$(uname)"
    114. idsver="$(onstat -V)"
    115. instance=$INFORMIXSERVER
    116. echo_title System Information
    117. echo succeeded
    118. echo "Number of CPUS:${cpus}" >> $OUTPUT
    119. echo "Total Memorys :${mem}" >> $OUTPUT
    120. echo "OS Version    :${osver}" >> $OUTPUT
    121. echo "IDS Version   :${idsver}" >> $OUTPUT
    122. echo "Instance Name :${instance}" >> $OUTPUT

    123. #Informix Command...

    124. #onstat -g seg > onstat-gseg
    125. #onstat -d > onstat-d
    126. #onstat -g seg > onstat-gseg
    127. #onstat -g iov > onstat-giov
    128. #onstat -c > onstat-c
    129. #onstat -l > onstat-l
    130. #onstat -V > idsversion
    131. #[ $(which i4gl 2>/dev/null) ]&&i4gl -V > 4glversion
    132. #[ $(which esql 2>/dev/null) ]&&esql -V > esqlversion

    133. db_list=$(dbaccess sysmaster << %% 2>/dev/null
    134.       output to pipe "cat" without headings
    135.       select name from sysdatabases
    136.       where name not in ("sysmaster","sysutils","sysuser","onpload")
    137. %%
    138. )
    139. db_list=$(echo $db_list|grep -v '^


    140. )


    141. #Informix SQL

    142. echo_back Collecting Informix Extents Information...

    143. dbaccess sysmaster << %% >/dev/null 2>&1
    144. unload to seqscan.txt delimiter ' '
    145. select first 20 dbsname,tabname,round(sum(seqscans)) from sysmaster:sysptprof
    146. where tabname[1,3]<>'sys' and seqscans > 0
    147. group by 1,2 order by 3 desc;
    148. unload to ext delimiter ' '
    149. select first 20 dbsname,tabname,count(*)
    150. from sysmaster:sysextents
    151. where tabname[1,3]<>'sys'
    152. group by 1,2
    153. order by 3 desc;
    154. unload to bigtable.txt delimiter ' '
    155. select first 20 dbsname,tabname,name,sum(size),round(sum(size)*100/16775134,2)
    156. from sysextents a,syschunks b,sysdbspaces c
    157. where trunc(a.start/1048576,0)=b.chknum and b.dbsnum=c.dbsnum
    158. group by 1,2,3
    159. order by 4 desc;
    160. unload to bigtable1.txt delimiter ' '
    161. select first 20 dbsname,tabname,name,sum(size),round(sum(size)*100/16775134,2)
    162. from sysextents a,syschunks b,sysdbspaces c
    163. where a.chunk=b.chknum and b.dbsnum=c.dbsnum
    164. group by 1,2,3
    165. order by 4 desc;
    166. %%
    167. echo_title Extents Information
    168. #echo "      Database               Table  exts   nrows  pageused  nextsize" >> $OUTPUT
    169. echo "            Database                         Table           exts           nrows     pageused     nextsize">> $OUTPUT
    170. echo "    ---------------- ----------------------------- -------------- --------------- ------------ ------------">>$OUTPUT
    171. #echo "    -----------   ----------------- ----   ------  --------  --------" >> $OUTPUT
    172. cat ext|while read dbs tab exts;do
    173.         oncheck -pt ${dbs}:${tab}>temp.txt
    174.         [ $? -ne 0 ]&&continue
    175.         nexts=$(cat temp.txt|sed -e '/Extents/,$ d'|grep "Number of extents"|awk '{sum+=$4}END{printf "%15d",sum}')
    176.         nrows=$(cat temp.txt|sed -e '/Extents/,$ d'|grep "Number of rows"|awk '{sum+=$4}END{printf "%15d",sum}')
    177.         npages=$(cat temp.txt|sed -e '/Extents/,$ d'|grep "Number of pages used"|awk '{sum+=$5}END{printf "%8d", sum}')
    178.         nextsize=$(cat temp.txt|sed -e '/Extents/,$ d'|grep "Next extent size"|awk '{sum+=$4}END{printf "%8d",sum}')
    179. #       echo -e "${dbs}\t${tab}\t${nexts}\t${nrows}\t${npages}\t${nextsize}" >> $OUTPUT
    180.         #printf "%15s%20s%5d %8d     %5d     %5d\n" ${dbs} ${tab} ${nexts} ${nrows} ${npages} ${nextsize} >> $OUTPUT
    181.         printf "%20s%30s%15d %15d     %8d     %8d\n" ${dbs} ${tab} ${nexts} ${nrows} ${npages} ${nextsize} >> $OUTPUT
    182. done
    183. echo "succeeded"
    184. #Sequan Scan
    185. echo_back Collecting Informix Sequence Scans Information...
    186. echo_title Seqscan Information
    187. echo "                      Database                         Table            seqs               nrows       pageused" >> $OUTPUT
    188. echo "    -------------------------- ----------------------------- -------------- --------------------  -------------" >> $OUTPUT
    189. cat seqscan.txt|while read dbs tab seqs;do
    190.         oncheck -pt ${dbs}:${tab}>temp.txt
    191.         [ $? -ne 0 ]&&continue
    192.         nexts=$(cat temp.txt|sed -e '/Extents/,$ d'|grep "Number of extents"|awk '{sum+=$4}END{printf "%15d",sum}')
    193.         nrows=$(cat temp.txt|sed -e '/Extents/,$ d'|grep "Number of rows"|awk '{sum+=$4}END{printf "%15d", sum}')
    194.         npages=$(cat temp.txt|sed -e '/Extents/,$ d'|grep "Number of pages used"|awk '{sum+=$5}END{printf "%15d", sum}')
    195.         nextsize=$(cat temp.txt|sed -e '/Extents/,$ d'|grep "Next extent size"|awk '{sum+=$4}END{printf "%15d", sum}')
    196.         printf "%30s%30s%15.0f %20d     %10d\n" ${dbs} ${tab} ${seqs} ${nrows} ${npages} >> $OUTPUT
    197. done
    198. echo "succeeded"
    199. #Big Tables
    200. echo_back Collecting Informix Big Tables Information...
    201. echo_title Big Tables Information
    202. echo "            Database                   Table                 name            size         size(%)" >> $OUTPUT
    203. echo "       -------------       -----------------       --------------   -------------  --------------" >> $OUTPUT
    204. cat bigtable.txt > bigtable 2>/dev/null
    205. cat bigtable1.txt >> bigtable 2>/dev/null
    206. cat bigtable| while read a b c d e;do
    207. printf "%20s    %20s %20s %15.2f %15.2f\n" $a $b $c $d $e>> $OUTPUT
    208. done
    209. echo "succeeded"
    210. #onstat -u
    211. echo_back Collecting Informix Serial Column Informations...
    212. echo_title Serial Information
    213. for db in ${db_list};do
    214.        dbaccess ${db} << %% >/dev/null 2>&1
    215.        unload to serial_num.$db.txt delimiter ' '
    216.        select first 20 b.tabname,max(a.ti_serialv),round(max(a.ti_serialv)*100/2147483647,2)
    217.        from sysmaster:systabinfo a,sysmaster:systabnames b,systables c
    218.        where b.tabname=c.tabname and b.dbsname="$db" and a.ti_partnum=b.partnum
    219.        group by 1 order by 2 desc;
    220. %%
    221.     cat serial_num.$db.txt|while read a b c;do
    222.         printf "%20s %20s %10.2f %10.2f\n" $db $a $b $c >> $OUTPUT
    223.     done
    224. done

    225. echo "succeeded"
    226. echo_title Onstat -u Information
    227. onstat -u|grep -v '^


    228. |tail -n 1 >> $OUTPUT

    229. #onstat-k
    230. echo_title Onstat -k Information
    231. onstat -k|grep -v '^


    232. |tail -n 1 >> $OUTPUT

    233. #Total Memory of database

    234. echo_title Total Memory of database
    235. echo_back Total Memory: >> $OUTPUT
    236. onstat -g seg|grep Total|awk '{print $4}' >> $OUTPUT

    237. echo_title Total Space of database \(Page\)
    238. ps=$(onstat -b|grep "Buffer pool page size:"|awk -F: '{print $2/1024}')
    239. echo "     name  nchunks          size            used         free    ratio" >> $OUTPUT
    240. echo "  ------- ------- --------------  --------------  -------------- -----">> $OUTPUT

    241. dbaccess sysmaster << %% 1>/dev/null 2>/dev/null
    242. unload to dbinfo delimiter " "
    243. select a.name,count(*),trunc(sum(chksize)),
    244. trunc((sum(chksize)-sum(b.nfree))),
    245. trunc(sum(b.nfree)),trunc((sum(chksize)-sum(b.nfree)))/trunc(sum(chksize))*100
    246. from sysmaster:sysdbspaces a,sysmaster:syschunks b
    247. where a.dbsnum=b.dbsnum
    248. group by 1
    249. %%
    250. cat dbinfo| while read a b c d e f;do
    251. printf "%10s    %2.0f %15.2f %15.2f %15.2f %2.2f\n" $a $b $c $d $e $f>> $OUTPUT
    252. done
    253. #onstat -l
    254. echo_title Phy and logical log Information

    255. physize=$(onstat -l|sed -n '/physize/{n;p;}'|awk '{print $2}')
    256. numlogs=$(onstat -l|grep -v "^$"|tail -n 1)
    257. logisizes=$(onstat -l|sed -n '/address/,/active/p'|grep -E -v "address|active"|awk '{sum+=$6}END{print sum}')

    258. echo Physical log size:$physize >> $OUTPUT
    259. echo Number of Logical log:$numlogs >> $OUTPUT
    260. echo Logical log size:$logisizes >> $OUTPUT
    261. #Database Information
    262. echo_title Database Information

    263. for db in ${db_list};do
    264.        all=$(dbaccess ${db} << %% 2>/dev/null
    265.        unload to ${db}.tmp delimiter " "
    266.        select a.name,b.site,a.owner,case when is_logging=0 then 'N' when is_logging=1
    267.        then case when is_buff_log=1 then 'B' when is_buff_log=0 then 'U' end end
    268.        from sysmaster:sysdatabases a,systables b
    269.        where name="$db" and tabname=' GL_COLLATE' and
    270.        name not in ("sysmaster","sysutils","sysuser","onpload");
    271.        unload to serial_num.$db.txt
    272.        select first 20 b.tabname,max(a.ti_serialv),round(max(a.ti_serialv)*100/2147483647,2)
    273.        from sysmaster:systabinfo a,sysmaster:systabnames b,systables c
    274.        where b.tabname=c.tabname and b.dbsname=$db and a.ti_partnum=b.partnum
    275.        group by 1 order by 2 desc;
    276. %%
    277. )
    278. #       echo -e "${db}\t${all}" >> $OUTPUT
    279.        cat ${db}.tmp >> $OUTPUT
    280.        echo >> $OUTPUT
    281.        dbschema -d ${db} -ss ${db}.sql >/dev/null
    282. done

    283. #onstat-p

    284. echo_back Collecting Database Information...

    285. echo_title Onstat-p Information

    286. readcached=$(onstat -p|awk '{print $4}'|sed -n '/cached/{n;p;}')
    287. writecached=$(onstat -p|awk '{print $8}'|sed -n '/cached/{n;p;}')
    288. ixdara=$(onstat -p|awk '{print $1}'|sed -n '/ixda-RA/{n;p;}')
    289. idxra=$(onstat -p|awk '{print $2}'|sed -n '/idx-RA/{n;p;}')
    290. dara=$(onstat -p|awk '{print $3}'|sed -n '/da-RA/{n;p;}')
    291. rapgsused=$(onstat -p|awk '{print $4}'|sed -n '/RA-pgsused/{n;p;}')

    292. echo Buffer Read %cached:$readcached >> $OUTPUT
    293. echo Buffer Write %cached:$writecached>> $OUTPUT
    294. echo ixda-RA:${ixdara}>> $OUTPUT
    295. echo idx-RA:${idxra}>> $OUTPUT
    296. echo da-RA:${dara}>> $OUTPUT
    297. echo RA-pgsused:${rapgsused}>> $OUTPUT

    298. $DF|grep -v Filesystem|grep -v "-"|while read filesystem kb used ava usepe mp;do
    299.        ud=$(echo $usepe|sed 's/%//g')
    300.        [ $ud -gt ${DFUS} ] && echo Directory $mp \'s usage ratio is more than ${DFUS}% >> $OUTPUT||continue
    301. done
    302. echo "succeeded"

    303. #onstat -g seg
    304. echo_title Onstat -g seg Information

    305. segc=$(($(onstat -g seg|grep V|wc -l)-2))
    306. frbk=$(onstat -g seg|grep Total|awk '{print $8}')

    307. echo 'Num of VP is:'$segc >> $OUTPUT
    308. echo 'blkfree is:'$frbk >> $OUTPUT

    309. echo_back Collecting VP Information...
    310. touch monitor.tmp
    311. i=1
    312. #for((i=1;i<=${p1};i++));do
    313. while [ $i -le ${p1} ];do

    314.         echo "vmstat-${i}" >> monitor.tmp
    315.         vmstat 1 10 >> monitor.tmp
    316.         echo "sar-r-${i}" >> monitor.tmp
    317.         echo "onstat-g-glo-${i}" >> monitor.tmp
    318.         onstat -g glo >> monitor.tmp
    319.         echo "onstat-D-${i}" >> monitor.tmp
    320.         i=$((i+1))
    321.         sleep 30
    322. done

    323. #VP

    324. echo_title Virtual Class Information
    325. sed -n '/^onstat-g-glo-1$/,/^onstat-D-1$/ p' monitor.tmp|sed -n \
    326. '/Virtual processor summary:/,/Individual virtual processors:/ p' >onstat-g-glo-1
    327. sed -n "/^onstat-g-glo-${p1}$/,/^onstat-D-${p1}$/ p" monitor.tmp|sed -n \
    328. '/Virtual processor summary:/,/Individual virtual processors:/ p' >onstat-g-glo-${p1}
    329. echo 'class   vps  usercpu  syscpu     total' >>$OUTPUT
    330. echo '-----  ----   ------  ------    ------'>>$OUTPUT
    331. for j in "cpu" "aio" "lio" "pio" "adm" "msc" "soc";do




    332.       cat onstat-g-glo-1|grep -w ${j} >/dev/null
    333.       [ $? -ne 0 ]&&continue
    334.       vps1=$(cat onstat-g-glo-1|grep -w ${j}|awk '{print $2}')
    335.       usercpu1=$(cat onstat-g-glo-1|grep -w ${j}|awk '{print $3}')
    336.       syscpu1=$(cat onstat-g-glo-1|grep -w ${j}|awk '{print $4}')

    337.       vpsi=$(cat onstat-g-glo-${p1}|grep -w ${j}|awk '{print $2}')
    338.       usercpui=$(cat onstat-g-glo-${p1}|grep -w ${j}|awk '{print $3}')
    339.       syscpui=$(cat onstat-g-glo-${p1}|grep -w ${j}|awk '{print $4}')

    340.       usercpu=$(echo ${usercpui}-${usercpu1}|bc)
    341.       syscpu=$(echo ${syscpui}-${syscpu1}|bc)
    342.       total=$(echo ${usercpu}+${syscpu}|bc)
    343. #       echo -e " $j\t${vpsi}\t${usercpu}\t${syscpu}\t${total}" >> $OUTPUT
    344.       printf "%5s   %3d   %6.2f  %6.2f   %7.2f\n" $j ${vpsi} ${usercpu} ${syscpu} ${total} >> $OUTPUT
    345. done
    346. echo "succeeded"

    347. #CPU
    348. echo_back Collecting System CPU Information...

    349. echo_title CPU Information

    350. if [ $(uname|grep AIX|wc -l) -eq 1 ];then
    351.       sed -n '/vmstat/,/sar-r/ p' monitor.tmp|grep -E -v "procs|swpd|sar|vmstat|id|faults|[a-z-]|^$"|\
    352.       awk '{print 0" "$4" "$16}' > cpu.tmp
    353. else
    354.   if [ $(uname|grep HP|wc -l) -eq 1 ];then
    355.       sed -n '/vmstat/,/sar-r/ p' monitor.tmp|grep -E -v "procs|swpd|sar|vmstat|id|faults|[a-z-]|^$"|\
    356.       awk '{print 0" "$5" "$18}' > cpu.tmp
    357.   else
    358.       sed -n '/vmstat/,/sar-r/ p' monitor.tmp|grep -E -v "procs|swpd|sar|vmstat|id|faults|[a-z-]|^$"|\
    359.       awk '{print $3" "$4" "$15}' > cpu.tmp
    360.   fi
    361. fi

    362. max=$(awk 'BEGIN{max=0}{max=(max>$3)?max:$3}END{print max}' cpu.tmp)
    363. min=$(awk 'BEGIN{min=100}{min=(min<$3)?min:$3}END{print min}' cpu.tmp)
    364. cpuv=$(awk '{sum+=$3}END{printf "%5.2f\n",sum/NR}' cpu.tmp)
    365. dbcpu=$(dbaccess sysmaster << %% 2>/dev/null
    366.       output to pipe "cat" without headings
    367. SELECT
    368.         (SELECT SUM(usercpu)+SUM(syscpu) FROM sysvpprof)/
    369.         (SELECT (dbinfo('UTC_CURRENT') - sh_pfclrtime) FROM sysshmvals)/
    370.         (SELECT cf_effective FROM sysconfig WHERE cf_name = 'NUMCPUVPS')*100
    371.        AS CPU_used_ratio
    372. FROM systables
    373. WHERE tabid=1
    374. %%
    375. )
    376. swap=$(awk '{sum+=$1}END{printf "%5.2f\n",sum/NR}' cpu.tmp)
    377. echo Average of OS CPU Idle:$cpuv >> $OUTPUT
    378. echo Database CPU used ratio :$dbcpu >>$OUTPUT
    379. echo The Max CPU Idel is     :$max >> $OUTPUT
    380. echo The Min CPU Idel is     :$min >> $OUTPUT
    381. echo Swap Spaces usage is    :$swap >> $OUTPUT

    382. echo_back Deleting temp files...

    383. rm -fr ext cpu.tmp onstat-d.tmp  onstat-g-glo-1  onstat-g-glo-2  seqscan.txt  temp.txt
    384. echo "succeeded"
    385. echo "Completed!"
    386. echo >> $OUTPUT
    387. echo "The End ..." >> $OUTPUT
    复制代码



    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    运维联盟俱乐部 ( 冀ICP备19036648号 )

    GMT+8, 2024-5-11 19:14 , Processed in 0.049051 second(s), 21 queries , Gzip On.

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表