使用Oracle跟踪文件的问题详解


Posted in Oracle onJune 28, 2021

一、什么是跟踪文件?

跟踪文件中包含了大量而详细的诊断和调试信息。通过对跟踪文件的解读和分析,我们可以定位问题、分析问题和解决问题。从跟踪文件的产生的来源来看,跟踪文件又可以分为两类:一类是数据库的操作人员有意生成的;另一类则是由于出现了异常错误,由数据库自动生成的。对于后一类,只对Oracle内部的技术支持人员是有用的,但对于我们,则多半看不懂。前一类,则是我们经常用到的,帮助我们分析、调整和优化应用性能,处理并解决问题。

那么在哪里可以找到跟踪文件呢?通过查询数据字典v$diag_info可以确定跟踪文件的存储路径,如下所示。

select * from v$diag_info;

使用Oracle跟踪文件的问题详解

进入目录/u01/app/oracle/diag/rdbms/orcl/orcl/trace可以看到以trc为后缀的跟踪文件,如下图所示。

使用Oracle跟踪文件的问题详解

二、跟踪文件的命名规则

一个跟踪文件的名字一般由以下几部分组成:

  • ORACLE_SID
  • 固定字符
  • 服务器的进程ID号
  • 文件后缀名 .trc
  • 各部分之间以下划线连接。

例如:orcl_mmon_12210.trc,其中:“orcl" 是本环境下数据库的SID,"12210"为产生该跟踪文件会话所使用的服务器进程ID号。如何知道我的ORACLE_SID和会话所使用的服务器进程ID呢?

三、如何确定跟踪文件?

为了演示的方便,我们给一个普通用户scott授予dba的角色。

1、使用管理登录,并授予scott授予dba的角色

[oracle@oracle12c ~]$ sqlplus / as sysdba

SQL> grant dba to scott;

Grant succeeded.

SQL>

2、确定Oracle SID,如下所示。这里的SID就是:orcl

SQL> select instance_name from V$instance;

INSTANCE_NAME
----------------
orcl

SQL>

3、切换到scott用户,并确定会话ID

SQL> conn scott/tiger
Connected.
SQL> select sid from v$mystat where rownum=1;

       SID
----------
	70

SQL>

4、根据会话ID,确定会话的地址信息

SQL> select paddr from v$session where sid=70;

PADDR
----------------
000000006DAB6588

SQL>

5、根据会话的地址信息,确定操作系统的进程号

SQL> select spid from v$process where addr='000000006DAB6588';

SPID
------------------------
54685

SQL>

进入目录/u01/app/oracle/diag/rdbms/orcl/orcl/trace会发现,此时并不存在包含54685的跟踪文件,原因是要使用跟踪文件需要手动开启会话的跟踪。

6、开启会话的跟踪

SQL> alter session set sql_trace=true;

Session altered.

SQL>

7、执行一条简单的SQL语句,并检查/u01/app/oracle/diag/rdbms/orcl/orcl/trace目录,这时候就可以看到生成的跟踪文件。

[oracle@oracle12c trace]$ pwd
/u01/app/oracle/diag/rdbms/orcl/orcl/trace
[oracle@oracle12c trace]$ ls *54685.trc
orcl_ora_54685.trc
[oracle@oracle12c trace]$

四、使用跟踪文件诊断SQL

根据跟踪对于诊断SQL语句是非常有用的,下面通过一个简单的示例来说明。

1、执行下面的的SQL语句

select * from scott.emp where deptno=10;

select * from scott.emp where deptno=20;

select * from scott.emp where deptno=30;

这三条SQL分别查询10、20和30号部门的员工。通过观察发现,这三条SQL除了where的条件的参数值不一样,其他部分都是一样的。这样的SQL语句叫做“重复的SQL”。如果数据库中存在大量的重复SQL,会使得每次在执行的时候都会进行SQL的解析,再生成执行计划。从而影响数据库的性能。

下面通过跟踪文件来验证上面的结论。

2、由于前面开启了会话的跟踪,如果不再需要进行跟踪了,需要手动关闭一下。

SQL> alter session set sql_trace=false;

Session altered.

SQL>

3、使用tkprof工具格式化跟踪文件

[oracle@oracle12c trace]$ tkprof orcl_ora_54685.trc /home/oracle/a.txt sys=no sort=fchela

TKPROF: Release 12.2.0.1.0 - Development on Mon Jun 28 10:37:48 2021

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.
[oracle@oracle12c trace]$

4、查看生成的a.txt文件,如下所示:

SQL ID: 1mvxd868z75nf Plan Hash: 3956160932
select *
from scott.emp where deptno=30

SQL ID: 2nbac4n9hnzth Plan Hash: 3956160932
select *
from scott.emp where deptno=20

SQL ID: 062r5atccuyv4 Plan Hash: 3956160932
select *
from scott.emp where deptno=10

可以看成尽管三条SQL对应的SQL ID不一样,但是生成的Plan Hash是一样的。这就说明这三条SQL的执行计划是一样的。既然如此,我们可以使用绑定变量的方式来改写这三条SQL。让这三条SQL语句在执行的时候,不用每次都生成执行计划。只需要复用第一次生成的执行计划即可。从而提高性能。

以上就是使用Oracle的跟踪文件的详细内容,更多关于Oracle跟踪文件的资料请关注三水点靠木其它相关文章!

Oracle 相关文章推荐
Oracle 区块链表创建过程详解
May 15 Oracle
快速学习Oracle触发器和游标
Jun 30 Oracle
Oracle表空间与权限的深入讲解
Nov 17 Oracle
详解SQL的窗口函数
Apr 21 Oracle
分析SQL窗口函数之聚合窗口函数
Apr 21 Oracle
分析SQL窗口函数之取值窗口函数
Apr 21 Oracle
SQL试题 使用窗口函数选出连续3天登录的用户
Apr 24 Oracle
Oracle中DBLink的详细介绍
Apr 29 Oracle
Oracle数据库事务的开启与结束详解
Jun 25 Oracle
ORACLE中dbms_output.put_line输出问题的解决过程
Jun 28 Oracle
oracle设置密码复杂度及设置超时退出的功能
Jun 28 Oracle
Oracle查看表空间使用率以及爆满解决方案详解
Jul 23 Oracle
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
ORACLE查看当前账号的相关信息
DBCA命令行搭建Oracle ADG的流程
ORACLE数据库应用开发的三十个注意事项
Jun 07 #Oracle
Oracle创建只读账号的详细步骤
Oracle11g R2 安装教程完整版
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
You might like
ThinkPHP3.2框架自带分页功能实现方法示例
2019/05/13 PHP
php多进程应用场景实例详解
2019/07/22 PHP
Javascript 个人笔记(没有整理,很乱)
2007/07/07 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
jQuery检测鼠标左键和右键点击的方法
2015/03/17 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
2016/10/09 Javascript
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
vue实现移动端图片上传功能
2019/12/23 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
Python 调用VC++的动态链接库(DLL)
2008/09/06 Python
使用Python的PIL模块来进行图片对比
2016/02/18 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
对Python Class之间函数的调用关系详解
2019/01/23 Python
Python中三元表达式的几种写法介绍
2019/03/04 Python
Python实现个人微信号自动监控告警的示例
2019/07/03 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
CSS的background属性及CSS3的背景图片设置总结
2016/06/13 HTML / CSS
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
大学生找工作推荐信范文
2013/11/28 职场文书
关于爱情的广播稿
2014/01/16 职场文书
结婚喜宴主持词
2014/03/14 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
计划生育证明书写要求
2014/09/17 职场文书
机关作风建设自查报告及整改措施
2014/10/21 职场文书
个人工作总结怎么写?
2019/04/09 职场文书
2019个人工作计划书的格式及范文!
2019/07/04 职场文书
简历中的自我评价应该这样写!
2019/07/12 职场文书
演讲稿之我的初心我的成长
2019/08/12 职场文书
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python