使用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数据库对long类型字段进行模糊匹配的解决思路
Apr 07 Oracle
Oracle 数据仓库ETL技术之多表插入语句的示例详解
Apr 12 Oracle
mybatis使用oracle进行添加数据的方法
Apr 27 Oracle
C#连接ORACLE出现乱码问题的解决方法
Oct 05 Oracle
详解Oracle数据库中自带的所有表结构(sql代码)
Nov 20 Oracle
Oracle使用别名的好处
Apr 19 Oracle
Oracle用户管理及赋权
Apr 24 Oracle
SQL试题 使用窗口函数选出连续3天登录的用户
Apr 24 Oracle
ORACLE中dbms_output.put_line输出问题的解决过程
Jun 28 Oracle
oracle delete误删除表数据后如何恢复
Jun 28 Oracle
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
ORACLE查看当前账号的相关信息
DBCA命令行搭建Oracle ADG的流程
ORACLE数据库应用开发的三十个注意事项
Jun 07 #Oracle
Oracle创建只读账号的详细步骤
Oracle11g R2 安装教程完整版
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
You might like
Parse正式发布开源PHP SDK
2014/08/11 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
Add Formatted Text to a Word Document
2007/06/15 Javascript
科讯商业版中用到的ajax空间与分页函数
2007/09/02 Javascript
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
JQuery 浮动导航栏实现代码
2009/08/27 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
2014/10/17 Javascript
JavaScript中的标签语句用法分析
2015/02/10 Javascript
巧用canvas
2017/01/21 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python translator使用实例
2008/09/06 Python
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
dataframe 按条件替换某一列中的值方法
2019/01/29 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
全网首秀之Pycharm十大实用技巧(推荐)
2020/04/27 Python
如何理解Python中包的引入
2020/05/29 Python
纯HTML+CSS3制作导航菜单(附源码)
2013/04/24 HTML / CSS
澳大利亚著名的纺织品品牌:Canningvale
2020/05/05 全球购物
外企C语言笔试题
2013/11/10 面试题
高校辅导员推荐信范文
2013/12/25 职场文书
劳动实践课感言
2014/02/01 职场文书
《听鱼说话》教学反思
2014/02/15 职场文书
旅游安全协议书
2014/04/21 职场文书
2014年人事部工作总结
2014/12/03 职场文书
少年雷锋观后感
2015/06/10 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书
2016年习总书记讲话学习心得体会
2016/01/20 职场文书
php字符串倒叙
2021/04/01 PHP
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技