通过shell脚本快速定位active session问题

简介: 如果你得到反馈,数据库突然间性能下降了好多,希望你能够尽快的定位出问题来,有一些思路和方法可以参考。分别从数据库层面,系统层面来定位,但是个人感觉而言还是不够快和准。
如果你得到反馈,数据库突然间性能下降了好多,希望你能够尽快的定位出问题来,有一些思路和方法可以参考。分别从数据库层面,系统层面来定位,但是个人感觉而言还是不够快和准。
因为绝大多数的问题都是由于active session导致的,所以我们的注意力集中在ash是比较合理的。 ASH在这个时候就是一个利器,通过它能够得到几乎实时的数据库变化。
相比而言我们通过ashrpt得到ash的报告来诊断问题理论上可行,但是有个缺点就是不够直观。报告里面的描述着实很详细,有时候是有优点有时候可能就是缺点。
公司的同事写了如下的脚本,个人在使用中感觉非常的直观,定位问题真有一目了然的感觉。
脚本内容如下:
sqlplus -s $DB_CONN_STR@$SH_DB_SID set lin 200
set pages 50
col SID         for 99999 trunc
col running_sec for a11 head "ELAP_SEC"
col inst_id     for 9 trunc head "I"
col serial#     for 99999 trunc     head SER#
col username    for a12 trunc       head "USERNAME"
col osuser      for a10 trunc       head "OSUSER"
col status      for a3 trunc            head "STAT"
col machine     for a10 trunc
col process     for a7 trunc        head "RPID"
col spid        for a6 trunc        head "SPID"
col program     for a20 trunc
col module      for a13 trunc
col temp_mb     for 999999              head "TEMP_MB"
col undo_mb     for 999999              head "UNDO_MB"
col logon_time  for a11
col rm_grp      for a6 trunc
col sql_id      for a13
col sql         for a49 trunc
col tsps        for a6 trunc
SELECT /* use_hash(sess,proc,undo,tmp) use_nl(s)*/ distinct
        sess.inst_id,
        sess.sid,
        sess.serial#,
        sess.username,
        substr(osuser,1,10) osuser,
        status,
        sess.process,
        proc.spid,
        sess.machine,
        sess.program,
        regexp_substr(NUMTODSINTERVAL(nvl((SYSDATE-SQL_EXEC_START)*24*60*60,last_call_et), 'SECOND'),'+\d{2} \d{2}:\d{2}:\d{2}') running_sec,
        TEMP_MB, UNDO_MB,
        s.sql_id ,
        TSPS.NAME TSPS,
        decode(sess.action,null,'',sess.action||', ')||replace(s.sql_text,chr(13),' ') sql
FROM
        gv\$session sess,
        gv\$process proc,
        gv\$sql s,
        (select ses_addr as saddr,sum(used_ublk/128) UNDO_MB from v\$transaction group by ses_addr) undo,
        (select session_addr as saddr, SESSION_NUM serial#, sum((blocks/128)) TEMP_MB from gv\$sort_usage group by  session_addr, SESSION_NUM) tmp,
        (select inst_id,sid,serial#,event,t.name from gv\$session ls, sys.file$ f, sys.ts$ t where status='ACTIVE' and ls.p1text in ('file number','file#') and ls.p1=f.file#  and f.ts#=t.ts#) tsps
WHERE sess.inst_id=proc.inst_id (+)  
and   sess.saddr=tmp.saddr (+) and sess.serial#=tmp.serial# (+)
AND   sess.status='ACTIVE' and sess.username is not null
and   sess.sid=tsps.sid (+) and sess.inst_id=tsps.inst_id(+) and sess.serial#=tsps.serial#(+)
AND   sess.paddr=proc.addr (+)
and   sess.sql_id = s.sql_id (+)
and   sess.saddr=undo.saddr (+)
ORDER BY running_sec desc,4,1,2,3
;
EOF


运行脚本的结果如下:
 I    SID   SER# USERNAME     OSUSER     STA RPID    SPID   MACHINE    PROGRAM              ELAP_SEC    TEMP_MB UNDO_MB SQL_ID        TSPS   SQL
-- ------ ------ ------------ ---------- --- ------- ------ ---------- -------------------- ----------- ------- ------- ------------- ------ -------------------------------------------------
 1  14889  55175 PRDAPPC      cowrk01   ACT 1234    23366  ccbdbpr1   JDBC Thin Client     04 11:44:12     519         648600hq1s1s8 UNDOTB SELECT ban_details.COMPANY_CODE,        ban_detai
 1     19  16945 PRDAPPC      blwrk01   ACT 9442    9442   ccbdbpr1   oracle@ccbdbpr3 (P02 02 05:35:02                 b9xg175fbzuk5        INSERT INTO TRUE9_BILL_SUMMARY (CYCLE_SEQ_NO, PAY
 1    421  20337 PRDAPPC      blwrk01   ACT 9444    9444   ccbdbpr1   oracle@ccbdbpr3 (P02 02 05:35:02                 b9xg175fbzuk5        INSERT INTO TRUE9_BILL_SUMMARY (CYCLE_SEQ_NO, PAY
 1    684  14023 PRDAPPC      blwrk01   ACT 9446    9446   ccbdbpr1   oracle@ccbdbpr3 (P02 02 05:35:02                 b9xg175fbzuk5        INSERT INTO TRUE9_BILL_SUMMARY (CYCLE_SEQ_NO, PAY
 1   6502  24857 PRDAPPC      blwrk01   ACT 9458    9458   ccbdbpr1   oracle@ccbdbpr3 (P03 02 05:35:02                 b9xg175fbzuk5        INSERT INTO TRUE9_BILL_SUMMARY (CYCLE_SEQ_NO, PAY
 1   8880  35991 PRDAPPC      blwrk01   ACT 24531   25882  ccbdbpr1   sqlplus@ccbdbpr1 (TN 02 05:35:02                 b9xg175fbzuk5        INSERT INTO TRUE9_BILL_SUMMARY (CYCLE_SEQ_NO, PAY
1   9536  26661 PRDAPPC      truwl21    ACT 1234    6158   ccbappr2   JDBC Thin Client     00 00:06:38                               DATAS0
 1  14566  64567 PRDAPPC      truwl25    ACT 1234    23179  ccbappr2   JDBC Thin Client     00 00:06:32                 fg5mc598u799u DATAS0 select  /*+  leading (bpm_ai bpm_pi) use_nl  (bpm
 1   2799  36269 PRDAPPC      truwld6    ACT 1234    1147   ccbappr13  JDBC Thin Client     00 00:05:40                 fg5mc598u799u DATAS0 select  /*+  leading (bpm_ai bpm_pi) use_nl  (bpm
 1   3490  41433 CCBSFMDEV    pcowrk01   ACT 4860    8520   ccbdbpr1   sqlplus@ccbdbpr1 (TN 00 00:03:38                 gt64t81rs1yp6 DATAL0 insert into ccbsfmdev.ar9_temp_e2e_restore (msisd
 1   2807  45859 PRDAPPC      truwl45    ACT 1234    26921  ccbappr4   JDBC Thin Client     00 00:01:50                 fg5mc598u799u DATAS0 select  /*+  leading (bpm_ai bpm_pi) use_nl  (bpm
 1  22051  15289 PRDAPPC      truwl21    ACT 1234    17442  ccbappr2   JDBC Thin Client     00 00:01:40                 fg5mc598u799u DATAS0 select  /*+  leading (bpm_ai bpm_pi) use_nl  (bpm

可以从上面的信息中得出不少的内容。
首先是session对应的sql语句,哪些session在执行哪些语句,执行的时间都一目了然。
占用的表空间情况,从第一条记录可以看到,执行了近12个小时,占用了大量的Undo空间。
第2~4行正在执行的是一个并行查询,并行度为4,并行协调session是(8880,35991) 目前执行时间已经达5个小时,对于并行来说,还是存在问题,需要进一步分析。

目录
相关文章
|
2月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
116 1
|
1月前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
71 2
6种方法打造出色的Shell脚本
|
1月前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
65 1
|
1月前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
63 2
|
2月前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
63 6
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
84 12
|
2月前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
83 2
|
3月前
|
Shell
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别
|
2月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
37 0