通过shell定制ash脚本(r3笔记第33天)
ash是在10g以来一个很有用的特性,能够作为awr的补充,对于排查一些历史的问题能够提供更加详细和针对性的数据。 当然个人在使用ash的时候感觉最慢的地方就是在于输入时间戳了,每次输入侧时候都得一边看着样例,一边按照格式,一份ash的报告,至少20%以上的时间耗在这个时间戳上了。 有时候想查看几个时间点的数据,如果精确到分钟,那么运行ashrpt.sql就得一次又一次的输入时间戳,虽然报告生成的速度还是很快,但是老是感觉手工劳动的部分太多,毕竟有很多的选项我们并不需要。 所以使用了如下的脚本来定制ash,只需要通过shell脚本输入两个时间戳即可。
print "
WHENEVER SQLERROR EXIT 5
SET FEEDBACK OFF
SET HEAD OFF
SET PAGES 0
connect ${DB_CONN_STR}@${SH_DB_SID}n
set linesize 150
select d.dbid||','||i.instance_number||',to_date('||chr(39)||$1||chr(39)||','||chr(39)||'yyyymmddHH24MISS'||chr(39)||'),to_date('||chr(39)||$2||chr(39)||','||chr(39)||'yyyymmddHH24MISS'||chr(39)||')' text
from v$database d,
v$instance i ;
" | sqlplus -s /nolog > ash_inputs.lst
sqlplus -s ${DB_CONN_STR}@${SH_DB_SID} <<EOF
set echo off verify off timing off feedback off trimspool on trimout on
set long 1000000 pagesize 6000 linesize 80
spool ashrpt_$1_$2.lst
select output from table(dbms_workload_repository.ash_report_text(`cat ash_inputs.lst`));
spool off;
EOF
比如我想查看22号7点25分到7点26分的ash数据,就直接输入下面的命令即可。
ksh genashtext.sh 20141022072500 20141022072600
OUTPUT
--------------------------------------------------------------------------------
ASH Report For TEST01/TEST01
DB Name DB Id Instance Inst Num Release RAC Host
------------ ----------- ------------ -------- ----------- --- ------------
TEST01 3645037571 TEST01 1 11.2.0.3.0 NO rac1
CPUs SGA Size Buffer Cache Shared Pool ASH Buffer Size
---- ------------------ ------------------ ------------------ ------------------
2 299M (100%) 48M (16.1%) 200M (67.0%) 4.0M (1.3%)
Analysis Begin Time: 22-Oct-14 07:25:00
Analysis End Time: 22-Oct-14 07:26:00
Elapsed Time: 1.0 (mins)
Begin Data Source: V$ACTIVE_SESSION_HISTORY
End Data Source: V$ACTIVE_SESSION_HISTORY
关于ash还是有一些额外的东西需要补充,ash和awr的部分还是有一些不同,比如ash的数据有在内存中的有在硬盘中归档了的。
在生成ash报告的时候就可以选择。
完整的方法和参数是下面的样子。
FUNCTION ash_report_text(l_dbid IN NUMBER,
l_inst_num IN NUMBER,
l_btime IN DATE,
l_etime IN DATE,
l_options IN NUMBER DEFAULT 0,
l_slot_width IN NUMBER DEFAULT 0,
l_sid IN NUMBER DEFAULT NULL,
l_sql_id IN VARCHAR2 DEFAULT NULL,
l_wait_class IN VARCHAR2 DEFAULT NULL,
l_service_hash IN NUMBER DEFAULT NULL,
l_module IN VARCHAR2 DEFAULT NULL,
l_action IN VARCHAR2 DEFAULT NULL,
l_client_id IN VARCHAR2 DEFAULT NULL,
l_plsql_entry IN VARCHAR2 DEFAULT NULL,
l_data_src IN NUMBER DEFAULT 0
)
其中l_data_src就决定了数据来源是从内存,硬盘还是两者兼有。默认是都有。
当然了还可以根据需要来绑定sql/session来更有针对性的查看信息。
- 微信推广功能支持图片广告和投放外链广告
- PHP 高级编程之多线程
- 框架设计原则和规范(四)
- python 函数参数的传递(参数带星号的说明)
- 微信公众平台增加更多统计项 让你更了解运营数据
- 用OpenCV计算道路交通流量的一个直观教程
- WPF Button TextBox 圆角
- 设置WPF窗体全屏显示:
- winform 、WPF传值方式详解
- 你一定要知道!数据科学家提高工作效率的基本工具
- MySQL 大数据操作注意事项
- Winform窗口里的嵌入WPF的UserControl,关闭Winform父窗体的方法
- LINQ分页和排序,skip和Take 用法
- 这或许是对小白最友好的python入门了吧——21,导入模块
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android控件CardView实现卡片效果
- 非常好看的android音量旋钮
- Android实现按钮拖拽还原功能
- 百度地图实现小车规划路线后平滑移动功能
- frp内网穿透部署搭建教程,内网端口暴露给了外网
- Android使用Intent的Action和Data属性实现点击按钮跳转到拨打电话和发送短信界面
- Linux安装Collabora Online让NextCloud支持Office在线编辑
- 教你在CentOS7安装Vuze(Azureus)
- Pwn-EXP模板
- Linux学习随手记
- PHP session用法其实很简单
- 爬虫代理适合的业务和场景
- Flutter基础widgets教程-OverflowBox篇
- iOS音视频接入- TRTC语音聊天室
- vscode使用COS作为图床编写markdown文档