Oracle 性能问题排查自动化脚本

最近对Oracle数据库的自动化运维比较感兴趣,对数据库性能问题的自动发现告警功能琢磨了一下。

废话少说,进入 Oracle Performance troubleshooting automation scripts: Perfbot Maria

功能:定期执行该脚本,对SQL执行超过n分钟的SQL语句的等待事件以及相关的执行计划和SQL monitor的信息以邮件的形式发给运维者。

主要脚本:pbm_wait.sh

点击(此处)折叠或打开

  1. #!/bin/bash
  2. export ORACLE_SID=$1
  3. export SQL='sqlplus / as sysdba'
  4. export EXEC_MIN=5
  5. export ORACLE_HOME=/opt/app/oracle/product/11GR2
  6. export PATH=$PATH:$ORACLE_HOME/bin
  7. export DIR=/home/oracle/dba/pb_maria
  8. #export MY_DATE=`date '+%d%b%y_%k%M'`
  9. export LOG=${DIR}/pbm_${ORACLE_SID}_wait.log
  10. export RESULT=pbm_${ORACLE_SID}_wait.result
  11. export TEMP_RESULT=pbm_${ORACLE_SID}_wait_temp.result
  12. export FINAL_RESULT=pbm_wait_${ORACLE_SID}_final.result
  13. export GRACE=pbm_${ORACLE_SID}_grace.log
  14. export COUNT=1
  15. export MAIL='mailx -s "Perfbot maria report of DB $ORACLE_SID"'
  16. cd $DIR
  17. $SQL > /dev/null << EOF
  18. spool ${LOG}
  19. @wait.sql
  20. spool off
  21. EOF
  22. sed -i '1d;2d;$d' $LOG
  23. awk '{if($3>ENVIRON["EXEC_MIN"]) {print $0} }' $LOG > $RESULT
  24. for i in `awk '{print $2}' $RESULT`
  25. do
  26. array[$COUNT]=$i;
  27. COUNT=$(($COUNT+1));
  28. done
  29. if [ $COUNT -ne 1 ]
  30. then
  31. for ((i=1; i<${COUNT}; i++))
  32. do
  33. grep -q ${array[$i]} $GRACE;
  34. if [ $? -eq 1 ]; then
  35. echo ${array[$i]} >> $TEMP_RESULT
  36. fi
  37. done
  38. fi
  39. if [[ -e $TEMP_RESULT ]]; then
  40. sort -u $TEMP_RESULT > $FINAL_RESULT
  41. COUNT=1
  42. for i in `awk '{print $1}' $FINAL_RESULT`
  43. do
  44. array[$COUNT]=$i
  45. COUNT=$(($COUNT+1));
  46. done
  47. for ((i=1; i<${COUNT}; i++))
  48. do
  49. $SQL > /dev/null << EOF
  50. spool ${DIR}/${ORACLE_SID}_${array[$i]}_sql.rpt
  51. @sm.sql ${array[$i]}
  52. spool off
  53. EOF
  54. sed -i '1d;$d' ${DIR}/${ORACLE_SID}_${array[i]}_sql.rpt
  55. done
  56. for ((i=1; i<${COUNT}; i++))
  57. do
  58. export MAIL=$MAIL" -a "${DIR}/${ORACLE_SID}_${array[$i]}"_sql.rpt"
  59. done
  60. export MAIL=$MAIL" 234924619@qq.com < "${DIR}/$RESULT" "
  61. eval $MAIL
  62. mv *.rpt reports/
  63. fi
  64. awk '{print $2}' $RESULT > $GRACE
  65. mv *.result results/
脚本使用方法: /home/oracle/dba/pb_maria/pbm_wait.sh 

其中 EXEC_MIN 参数控制着多少分钟以上的SQL会被写入邮件。

细心的朋友会发现,脚本中加入了GRACE机制,即上一次告警过的SQL不会接连告警,可能会隔次告警,减少无谓的告警骚扰。

调用的sql 脚本也附上:

wait.sql

点击(此处)折叠或打开

  1. set line 220 pages 50000
  2. set heading off
  3. set feedback off
  4. col username for a10
  5. col event for a35
  6. col program for a35
  7. COLUMN elapsed_min FORMAT 999999999.99
  8. select username,sql_id, ROUND(( sysdate - SQL_EXEC_START)*1440 , 2) elapsed_min
  9. ,program,event
  10. FROM V$SESSION
  11. WHERE USERNAME IS NOT NULL
  12. AND WAIT_CLASS NOT LIKE 'Idle'
  13. AND SQL_ID IS NOT NULL
  14. AND ROUND(( sysdate - SQL_EXEC_START)*1440 , 2) IS NOT NULL
  15. order by elapsed_min desc;

sm.sql

点击(此处)折叠或打开

  1. set pagesize 50000
  2. set long 20000
  3. select dbms_sqltune.report_sql_monitor(SQL_ID=>'&&1',TYPE=>'text') from dual
  4. /


这里貌似不支持附件,注意点如下:

注意该脚本必须放在/home/oracle/dba/pb_maria路径使用;在该路径下创建results和reports路径来存放历史的信息。

cronjob我设置的是5分钟一次。

这个脚本需要Oracle数据库服务器能连上互联网,才能发邮件。如果是私网的机器,则可以考虑加一台私网公网都在的mail服务器,将需要发的邮件的信息传送到这台mail服务器上,然后定时发出邮件。



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14199138/viewspace-2150258/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14199138/viewspace-2150258/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ORACLE 健康检查与性能分析报告,内容包括: 1: 报告综述..........................................................................................................3 1.1 目的说明....................................................................................... 3 1.2 Server整体状况............................................................................. 3 2: 主机与数据库配置...............................................................................................4 2.1 主机配置.......................................................................................... 4 3: 操作系统可用性..................................................................................................5 3.1 文件系统使用状况............................................................................... 5 3.2 操作系统性能分析............................................................................... 5 4: 数据库可用性....................................................................................................7 4.1 Database Session Chart................................................................. 7 4.2 日志文件状态..................................................................................... 7 4.3 控制文件状态..................................................................................... 9 4.4 归档日志状态................................................................................... 10 4.5 表空间使用状况................................................................................ 10 4.6 数据库文件读写状况.......................................................................... 11 4.7 Invalid Objects............................................................................ 12 4.8 Disabled Triggers ........................................................................ 12 4.9 数据库备份状况................................................................................ 13 4.10 数据库恢复................................................................................... 13 5: 数据库性能分析..............................................................................

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值