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

简介:

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

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

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

主要脚本:pbm_wait.sh

#!/bin/bash
export ORACLE_SID=$1
export SQL='sqlplus / as sysdba'
export EXEC_MIN=5
export ORACLE_HOME=/opt/app/oracle/product/11GR2
export PATH=$PATH:$ORACLE_HOME/bin
export DIR=/home/oracle/dba/pb_maria
#export MY_DATE=`date '+%d%b%y_%k%M'`
export LOG=${DIR}/pbm_${ORACLE_SID}_wait.log
export RESULT=pbm_${ORACLE_SID}_wait.result
export TEMP_RESULT=pbm_${ORACLE_SID}_wait_temp.result
export FINAL_RESULT=pbm_wait_${ORACLE_SID}_final.result
export GRACE=pbm_${ORACLE_SID}_grace.log
export COUNT=1
export MAIL='mailx -s "Perfbot maria report of DB $ORACLE_SID"'
cd $DIR
$SQL > /dev/null << EOF
spool ${LOG}
@wait.sql
spool off
EOF
sed -i '1d;2d;$d' $LOG
awk '{if($3>ENVIRON["EXEC_MIN"]) {print $0} }' $LOG > $RESULT
for i in `awk '{print $2}' $RESULT`
do
array[$COUNT]=$i;
COUNT=$(($COUNT+1));
done
if [ $COUNT -ne 1 ]
then
for ((i=1; i<${COUNT}; i++))
do
grep -q ${array[$i]} $GRACE;
if [ $? -eq 1 ]; then
echo ${array[$i]} >> $TEMP_RESULT
fi
done
fi
if [[ -e $TEMP_RESULT ]]; then
sort -u $TEMP_RESULT > $FINAL_RESULT
COUNT=1
for i in `awk '{print $1}' $FINAL_RESULT`
do
array[$COUNT]=$i
COUNT=$(($COUNT+1));
done
for ((i=1; i<${COUNT}; i++))
do
$SQL > /dev/null << EOF
spool ${DIR}/${ORACLE_SID}_${array[$i]}_sql.rpt
@sm.sql ${array[$i]}
spool off
EOF
sed -i '1d;$d' ${DIR}/${ORACLE_SID}_${array[i]}_sql.rpt
done
for ((i=1; i<${COUNT}; i++))
do
export MAIL=$MAIL" -a "${DIR}/${ORACLE_SID}_${array[$i]}"_sql.rpt"
done
export MAIL=$MAIL" 234924619@qq.com < "${DIR}/$RESULT" "
eval $MAIL
mv *.rpt reports/
fi
awk '{print $2}' $RESULT > $GRACE
mv *.result results/

脚本使用方法: /home/oracle/dba/pb_maria/pbm_wait.sh

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

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

调用的sql 脚本也附上:

wait.sql

set line 220 pages 50000
set heading off
set feedback off
col username for a10
col event for a35
col program for a35
COLUMN elapsed_min FORMAT 999999999.99
select username,sql_id, ROUND(( sysdate - SQL_EXEC_START)*1440 , 2) elapsed_min
,program,event
FROM V$SESSION
WHERE USERNAME IS NOT NULL
AND WAIT_CLASS NOT LIKE 'Idle'
AND SQL_ID IS NOT NULL
AND ROUND(( sysdate - SQL_EXEC_START)*1440 , 2) IS NOT NULL
order by elapsed_min desc;

sm.sql

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

注意点如下:

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

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

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

相关文章
|
23天前
|
SQL Oracle 关系型数据库
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。
|
4月前
|
SQL Oracle 关系型数据库
Oracle SQL:了解执行计划和性能调优
Oracle SQL:了解执行计划和性能调优
125 1
|
6月前
|
机器学习/深度学习 Oracle 关系型数据库
Oracle 19c单机一键安装脚本分享
Oracle 19c单机一键安装脚本分享
345 2
|
6月前
|
Oracle 关系型数据库 数据库
Oracle数据库备份脚本分享-Python
Oracle数据库备份脚本分享-Python
180 0
|
6月前
|
Oracle 安全 关系型数据库
Oracle安装部署再也不用头疼了,分享一个实用的一键部署脚本,建议收藏!
Oracle安装部署再也不用头疼了,分享一个实用的一键部署脚本,建议收藏!
194 0
|
6月前
|
监控 Oracle 关系型数据库
"深度剖析:Oracle SGA大小调整策略——从组件解析到动态优化,打造高效数据库性能"
【8月更文挑战第9天】在Oracle数据库性能优化中,系统全局区(SGA)的大小调整至关重要。SGA作为一组共享内存区域,直接影响数据库处理能力和响应速度。本文通过问答形式介绍SGA调整策略:包括SGA的组成(如数据缓冲区、共享池等),如何根据负载与物理内存确定初始大小,手动调整SGA的方法(如使用`ALTER SYSTEM`命令),以及利用自动内存管理(AMM)特性实现智能调整。调整过程中需注意监控与测试,确保稳定性和性能。
484 2
|
7月前
|
Oracle 安全 关系型数据库
|
7月前
|
存储 Oracle 关系型数据库
|
7月前
|
监控 Oracle 算法
|
7月前
|
存储 Oracle 关系型数据库
关系型数据库Oracle运行RMAN脚本
【7月更文挑战第23天】
65 4

热门文章

最新文章

推荐镜像

更多