【DB笔试面试823】在Oracle中,如何查看过去某一段时间数据库系统的会话是否有问题?

【DB笔试面试823】在Oracle中,如何查看过去某一段时间数据库系统的会话是否有问题?

         题目         部分

【DB笔试面试823】在Oracle中,如何查看过去某一段时间数据库系统的会话是否有问题?


     




         答案部分          


可以通过DBA_HIST_ACTIVE_SESS_HISTORY视图来进行查询,首先查询指定时间段的等待事件,下例中的SQL语句查询的是2016年5月10号下午17点30分到19点30分这段时间内数据库的等待事件和SQL的执行情况,其中,COUNTS列的值比较大的就是SQL执行时间较长的,需要特别关注:

1SELECT D.EVENT, D.SQL_ID, COUNT(1) COUNTS
2  FROM DBA_HIST_ACTIVE_SESS_HISTORY D
3  WHERE D.SAMPLE_TIME >= TO_DATE('2016-05-10 17:30:00', 'YYYY-MM-DD HH24:MI:SS')
4  AND    D.SAMPLE_TIME <= TO_DATE('2016-05-10 19:30:00', 'YYYY-MM-DD HH24:MI:SS')
5 GROUP  BY D.EVENT,D.SQL_ID;
     


下面的SQL语句可以查询到具体SQL的扫描操作,初步预估SQL问题:

 1SELECT TO_CHAR(D.SAMPLE_TIME, 'YYYY-MM-DD HH24:MI:SS') SAMPLE_TIME,
2       D.SQL_ID,
3       D.SQL_PLAN_HASH_VALUE,
4       D.SQL_PLAN_OPERATION,
5       D.SQL_PLAN_OPTIONS,
6       D.EVENT 
7  FROM DBA_HIST_ACTIVE_SESS_HISTORY D
8 WHERE D.SAMPLE_TIME >= TO_DATE('2016-05-10 17:30:00', 'YYYY-MM-DD HH24:MI:SS')
9   AND D.SAMPLE_TIME <= TO_DATE('2016-05-10 19:30:00', 'YYYY-MM-DD HH24:MI:SS')
10 ORDER BY D.SNAP_ID;
     


根据以上的SQL语句可以知道,对表做的是否是全表扫描,以及当时会话的等待事件是什么,然后就可以根据等待事件进行SQL分析了。

如下的SQL语句可以查询某一段时间内,会话所持有的锁信息:

 1SELECT D.SQL_ID,
2        CHR(BITAND(P1, -16777216) / 16777215) ||CHR(BITAND(P1, 16711680) / 65535) "Lock",
3        BITAND(P1, 65535) "Mode",
4        COUNT(1) COUNTS,
5        COUNT(DISTINCT D.SESSION_ID) COUNTS1
6   FROM DBA_HIST_ACTIVE_SESS_HISTORY D
7  WHERE D.SAMPLE_TIME >= TO_DATE('2016-05-10 17:30:00', 'YYYY-MM-DD HH24:MI:SS')
8    AND D.SAMPLE_TIME <= TO_DATE('2016-05-10 19:30:00', 'YYYY-MM-DD HH24:MI:SS')
9    AND D.EVENT = 'enq: TX - row lock contention'
10  GROUP BY D.SQL_ID,
11           (CHR(BITAND(P1, -16777216) / 16777215) ||
12           CHR(BITAND(P1, 16711680) / 65535)),
13           (BITAND(P1, 65535));
     


如下的SQL语句可以查询系统问题时间段内的会话详情:

 1SELECT D.CURRENT_OBJ#,
2       D.CURRENT_FILE#,
3       D.CURRENT_BLOCK#,
4       D.CURRENT_ROW#,
5       D.EVENT,
6       D.P1TEXT,
7       D.P1,
8       D.P2TEXT,
9       D.P2,
10       CHR(BITAND(P1, -16777216) / 16777215) ||CHR(BITAND(P1, 16711680) / 65535) "Lock",
11       BITAND(P1, 65535) "Mode",
12       D.BLOCKING_SESSION,
13       D.BLOCKING_SESSION_STATUS,
14       D.BLOCKING_SESSION_SERIAL#,
15       D.SQL_ID,
16       TO_CHAR(D.SAMPLE_TIME, 'YYYYMMDDHH24MISS') SAMPLE_TIME
17  FROM DBA_HIST_ACTIVE_SESS_HISTORY D
18 WHERE D.SAMPLE_TIME >= TO_DATE('2016-05-10 17:30:00', 'YYYY-MM-DD HH24:MI:SS')
19   AND D.SAMPLE_TIME <= TO_DATE('2016-05-10 19:30:00', 'YYYY-MM-DD HH24:MI:SS')
20   AND D.EVENT = 'enq: TX - row lock contention';
     


& 说明:

有关一些具体的分析过程可以参考我的BLOG案例:http://blog.itpub.net/26736162/viewspace-2123996/



本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗


【DB笔试面试823】在Oracle中,如何查看过去某一段时间数据库系统的会话是否有问题?

================================================================================================================== 【干货来了|小麦苗IT资料分享】★小麦苗DB职场干货:https://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w★小麦苗数据库健康检查:https://share.weiyun.com/5lb2U2M★小麦苗微店:https://weidian.com/?userid=793741433★各种操作系统下的数据库安装文件(Linux、Windows、AIX等):https://pan.baidu.com/s/1hqff3Evv6oj2-Tn87MpFkQ★小麦苗分享的资料:https://share.weiyun.com/57HUxNi★小麦苗课堂资料:https://share.weiyun.com/5fAdN5m★小麦苗课堂试听资料:https://share.weiyun.com/5HnQEuL★小麦苗出版的相关书籍:https://share.weiyun.com/5sQBQpY★小麦苗博客文章:https://share.weiyun.com/5ufi4Dx★数据库系列(Oracle、MySQL、NoSQL):https://share.weiyun.com/5n1u8gv★公开课录像文件:https://share.weiyun.com/5yd7ukG★其它常用软件分享:https://share.weiyun.com/53BlaHX★其它IT资料(OS、网络、存储等):https://share.weiyun.com/5Mn6ESi★Python资料:https://share.weiyun.com/5iuQ2Fn★已安装配置好的虚拟机:https://share.weiyun.com/5E8pxvT★小麦苗腾讯课堂:https://lhr.ke.qq.com/★小麦苗博客:http://blog.itpub.net/26736162/★OCP培训:https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA★12c的OCP培训:https://mp.weixin.qq.com/s/hMLHlyjMHhLmA0xN4hLvfw★OCM培训:https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA★高可用(RAC+DG+OGG)培训:https://mp.weixin.qq.com/s/4vf042CnOdAD8zDyjUueiw★小麦苗课堂腾讯视频:http://v.qq.com/vplus/71f69a319a24c6808cd6e6189ae90664
==================================================================================================================
 

【DB笔试面试823】在Oracle中,如何查看过去某一段时间数据库系统的会话是否有问题?

【DB笔试面试823】在Oracle中,如何查看过去某一段时间数据库系统的会话是否有问题?

【DB笔试面试823】在Oracle中,如何查看过去某一段时间数据库系统的会话是否有问题?

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● QQ:646634621  QQ群:230161599、618766405

● 微信:lhrbestxh

● 微信公众号:DB宝

● 提供Oracle OCP、OCM、高可用(rac+dg+ogg)和MySQL最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

【DB笔试面试823】在Oracle中,如何查看过去某一段时间数据库系统的会话是否有问题?

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:DB宝,学习最实用的数据库技术。

【DB笔试面试823】在Oracle中,如何查看过去某一段时间数据库系统的会话是否有问题?

【DB笔试面试823】在Oracle中,如何查看过去某一段时间数据库系统的会话是否有问题?

【DB笔试面试823】在Oracle中,如何查看过去某一段时间数据库系统的会话是否有问题?


本文分享自微信公众号 - DB宝(lhrdba)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

上一篇:学习笔记


下一篇:MySQL统计信息相关参数