使用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 DGMGRL ORA-16603报错的解决方法(DG Broker)
Apr 06 Oracle
ORACLE数据库对long类型字段进行模糊匹配的解决思路
Apr 07 Oracle
oracle通过存储过程上传list保存功能
May 12 Oracle
ORACLE数据库应用开发的三十个注意事项
Jun 07 Oracle
DBCA命令行搭建Oracle ADG的流程
Jun 11 Oracle
C#连接ORACLE出现乱码问题的解决方法
Oct 05 Oracle
详解Oracle块修改跟踪功能
Nov 07 Oracle
Lakehouse数据湖并发控制陷阱分析
Mar 31 Oracle
Oracle 多表查询基本语法实例
Apr 18 Oracle
详解SQL的窗口函数
Apr 21 Oracle
Oracle删除归档日志及添加定时任务
Jun 28 Oracle
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
ORACLE查看当前账号的相关信息
DBCA命令行搭建Oracle ADG的流程
ORACLE数据库应用开发的三十个注意事项
Jun 07 #Oracle
Oracle创建只读账号的详细步骤
Oracle11g R2 安装教程完整版
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
You might like
深入了解php4(2)--重访过去
2006/10/09 PHP
纯php打造的tab选项卡效果代码(不用js)
2010/12/29 PHP
PHP面向对象概念
2011/11/06 PHP
PHP中设置时区方法小结
2012/06/03 PHP
php中http与https跨域共享session的解决方法
2014/12/20 PHP
Zend Framework入门教程之Zend_View组件用法示例
2016/12/09 PHP
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
javascript简易画板开发
2020/04/12 Javascript
js实现五星评价功能
2017/03/08 Javascript
详细讲解vue2+vuex+axios
2017/05/27 Javascript
jQuery实现选中行变色效果(实例讲解)
2017/07/06 jQuery
AngularJS 多指令Scope问题的解决
2018/10/25 Javascript
vue自动路由-单页面项目(非build时构建)
2019/04/30 Javascript
js实现超级玛丽小游戏
2020/03/18 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
Python全局变量操作详解
2015/04/14 Python
开始着手第一个Django项目
2015/07/15 Python
Python列表解析配合if else的方法
2018/06/23 Python
Python读取数据集并消除数据中的空行方法
2018/07/12 Python
python的继承知识点总结
2018/12/10 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
浅析Python __name__ 是什么
2020/07/07 Python
python3中数组逆序输出方法
2020/12/01 Python
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
Fenty Beauty官网:蕾哈娜创立的美妆品牌
2021/01/07 全球购物
计算机应届毕业生自荐信范文
2014/02/23 职场文书
放飞中国梦演讲稿
2014/04/23 职场文书
留学经费担保书
2014/05/12 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
消防宣传标语大全
2015/08/03 职场文书