【赵强老师】使用Oracle的跟踪文件「终于解决」

【赵强老师】使用Oracle的跟踪文件「终于解决」一、什么是跟踪文件? 跟踪文件中包含了大量而详细的诊断和调试信息。通过对跟踪文件的解读和分析,我们可以定位问题、分析问题和解决问题。从跟踪文件的产生的来源来看,跟踪文件又可以分为两类:一类是数据库的操

【赵强老师】使用Oracle的跟踪文件

【赵强老师】使用Oracle的跟踪文件「终于解决」

一、什么是跟踪文件?

跟踪文件中包含了大量而详细的诊断和调试信息。通过对跟踪文件的解读和分析,我们可以定位问题、分析问题和解决问题。从跟踪文件的产生的来源来看,跟踪文件又可以分为两类:一类是数据库的操作人员有意生成的;另一类则是由于出现了异常错误,由数据库自动生成的。对于后一类,只对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的跟踪文件「终于解决」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6073.html

(0)
上一篇 2023-04-17
下一篇 2023-04-18

相关推荐

  • 部署python应用(python 应用)

    部署python应用(python 应用)所需工具:

    2023-11-27
    133
  • 快速认识elasticsearch – G

    快速认识elasticsearch – G快速认识elasticsearch what is Elasticsearch Elasticsearch被称为“Lucene穿了一件json的外衣” 把Lucene用Netty封装成服务,使用jso

    2023-03-11
    147
  • Python起始参数:完整指南

    Python起始参数:完整指南Python脚本通常可以在运行时动态地获取参数。命令行参数是由程序在运行时传递的字段,以决定程序的运行方式。Python的sys模块提供了一个名为sys.argv的列表,其中包含了传递到Python脚本的所有参数。其中,sys.argv[0]表示脚本名称,sys.argv[1]表示第一个参数,以此类推。下面是一个示例:

    2024-03-27
    61
  • Python字符串处理技术详解

    Python字符串处理技术详解字符串是在计算机科学中的重要概念,也是 Python 编程语言中最基本的数据类型之一。Python 提供了方便、快捷和灵活的字符串处理技术,使得我们能够轻松地对字符串进行操作,从而完成各种任务。

    2024-08-08
    20
  • 优化数字精度,求取以10为底的对数

    优化数字精度,求取以10为底的对数
            在数学中,以10为底的对数又称为常用对数,通常用“lg”表示。在计算机中求解常用对数时,需利用逼近法与级数展开法等数学工具,得到较高精度的近似值。求解常用对数的公式stronglg(x) = log10(x)/strong,其中,x > 0 ,为实数。

    2023-12-11
    102
  • Elasticsearch中mapping值得注意的一些小细节

    Elasticsearch中mapping值得注意的一些小细节简介 在Elasticsearch中mapping有很多可以配置的地方,但是使用多了就会发现,一般情况有关mapping最常用、也最实用的就简单的几个需要注意的地方。 下面就简单的介绍一下关于这些m…

    2023-04-03
    142
  • Python 3 Mac开发技巧分享

    Python 3 Mac开发技巧分享Python 3是一种高级编程语言,可用于各种用途,包括Web开发、数据分析、人工智能和机器学习。在Mac系统上使用Python 3进行开发,可以使开发变得更加简单和高效。

    2024-05-28
    45
  • linux安装Oracle11G「终于解决」

    linux安装Oracle11G「终于解决」
    阅读目录: linux安装Oracle11G 0、下载Orcle11G 1、上传文件到服务器或虚拟机的/install目录下 2、解压文件到当前目录: 3、…

    2023-04-05
    147

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注