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服务器上,然后定时发出邮件。

相关文章
|
20天前
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
129 61
|
2月前
|
数据采集 监控 数据挖掘
Python自动化脚本:高效办公新助手###
本文将带你走进Python自动化脚本的奇妙世界,探索其在提升办公效率中的强大潜力。随着信息技术的飞速发展,重复性工作逐渐被自动化工具取代。Python作为一门简洁而强大的编程语言,凭借其丰富的库支持和易学易用的特点,成为编写自动化脚本的首选。无论是数据处理、文件管理还是网页爬虫,Python都能游刃有余地完成任务,极大地减轻了人工操作的负担。接下来,让我们一起领略Python自动化脚本的魅力,开启高效办公的新篇章。 ###
|
14天前
|
Web App开发 数据采集 JavaScript
Chrome浏览器实例的TypeScript自动化脚本
Chrome浏览器实例的TypeScript自动化脚本
|
1月前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
67 7
|
1月前
|
运维 Kubernetes Devops
自动化运维:从脚本到工具的演进之旅
在数字化浪潮中,自动化运维成为提升效率、保障系统稳定的关键。本文将探索自动化运维的发展脉络,从基础的Shell脚本编写到复杂的自动化工具应用,揭示这一技术变革如何重塑IT运维领域。我们将通过实际案例,展示自动化运维在简化工作流程、提高响应速度和降低人为错误中的重要作用。无论你是初学者还是资深专家,这篇文章都将为你提供宝贵的洞见和实用的技巧。
|
2月前
|
SQL 测试技术 API
如何编写API接口的自动化测试脚本
本文详细介绍了编写API自动化测试脚本的方法和最佳实践,涵盖确定测试需求、选择测试框架、编写测试脚本(如使用Postman和Python Requests库)、参数化和数据驱动测试、断言和验证、集成CI/CD、生成测试报告及维护更新等内容,旨在帮助开发者构建高效可靠的API测试体系。
|
2月前
|
运维 Devops
自动化运维:从脚本到DevOps的进化之旅
在数字化时代,自动化运维不仅是提高生产效率的关键,更是企业竞争力的象征。本文将带领读者穿越自动化运维的发展历程,从最初的脚本编写到现代DevOps文化的形成,揭示这一演变如何重塑IT行业的工作模式。通过具体案例,我们将展示自动化工具和实践如何简化复杂任务,优化流程,并促进团队协作。你将发现,自动化运维不仅关乎技术的进步,更体现了人、流程和技术三者之间协同增效的深层逻辑。
|
2月前
|
监控 数据挖掘 数据安全/隐私保护
Python脚本:自动化下载视频的日志记录
Python脚本:自动化下载视频的日志记录
|
2月前
|
机器学习/深度学习 人工智能 运维
自动化运维之路:从脚本到工具的演进
在IT运维领域,效率和准确性是衡量工作成效的关键指标。随着技术的发展,自动化运维逐渐成为提升这两个指标的重要手段。本文将带领读者了解自动化运维的演变历程,从最初的简单脚本编写到现今复杂的自动化工具应用,展示如何通过技术提升运维效率。文章不仅介绍理论和实践案例,还提供了代码示例,帮助读者理解自动化运维的实际应用场景。
|
2月前
|
运维 监控 网络安全
自动化运维的崛起:如何利用Python脚本简化日常任务
【10月更文挑战第43天】在数字化时代的浪潮中,运维工作已从繁琐的手工操作转变为高效的自动化流程。本文将引导您了解如何运用Python编写脚本,以实现日常运维任务的自动化,从而提升工作效率和准确性。我们将通过一个实际案例,展示如何使用Python来自动部署应用、监控服务器状态并生成报告。文章不仅适合运维新手入门,也能为有经验的运维工程师提供新的视角和灵感。

热门文章

最新文章

推荐镜像

更多