• 售前

  • 售后

热门帖子
入门百科

利用Oracle跟踪文件的题目详解

[复制链接]
123456809 显示全部楼层 发表于 2021-8-14 15:15:04 |阅读模式 打印 上一主题 下一主题
一、什么是跟踪文件?

跟踪文件中包罗了大量而具体的诊断和调试信息。通过对跟踪文件的解读和分析,我们可以定位题目、分析题目息争决题目。从跟踪文件的产生的泉源来看,跟踪文件又可以分为两类:一类是数据库的操纵人员有意天生的;另一类则是由于出现了非常错误,由数据库自动天生的。对于后一类,只对Oracle内部的技术支持人员是有效的,但对于我们,则多半看不懂。前一类,则是我们常常用到的,帮助我们分析、调解和优化应用性能,处理并解决题目。
那么在哪里可以找到跟踪文件呢?通过查询数据字典v$diag_info可以确定跟踪文件的存储路径,如下所示。
  1. select * from v$diag_info;
复制代码

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

二、跟踪文件的命名规则

一个跟踪文件的名字一般由以下几部分构成:
       
  • ORACLE_SID   
  • 固定字符   
  • 服务器的历程ID号   
  • 文件后缀名 .trc   
  • 各部分之间以下划线毗连。
例如:orcl_mmon_12210.trc,此中:“orcl" 是本情况下数据库的SID,"12210"为产生该跟踪文件会话所利用的服务器历程ID号。怎样知道我的ORACLE_SID和会话所利用的服务器历程ID呢?
三、怎样确定跟踪文件?

为了演示的方便,我们给一个平凡用户scott授予dba的脚色。
1、利用管理登录,并授予scott授予dba的脚色
  1. [oracle@oracle12c ~]$ sqlplus / as sysdba
  2. SQL> grant dba to scott;
  3. Grant succeeded.
  4. SQL>
复制代码
2、确定Oracle SID,如下所示。这里的SID就是:orcl
  1. SQL> select instance_name from V$instance;
  2. INSTANCE_NAME
  3. ----------------
  4. orcl
  5. SQL>
复制代码
3、切换到scott用户,并确定会话ID
  1. SQL> conn scott/tiger
  2. Connected.
  3. SQL> select sid from v$mystat where rownum=1;
  4.        SID
  5. ----------
  6.         70
  7. SQL>
复制代码
4、根据会话ID,确定会话的地址信息
  1. SQL> select paddr from v$session where sid=70;
  2. PADDR
  3. ----------------
  4. 000000006DAB6588
  5. SQL>
复制代码
5、根据会话的地址信息,确定操纵系统的历程号
  1. SQL> select spid from v$process where addr='000000006DAB6588';
  2. SPID
  3. ------------------------
  4. 54685
  5. SQL>
复制代码
进入目录/u01/app/oracle/diag/rdbms/orcl/orcl/trace会发现,此时并不存在包罗54685的跟踪文件,原因是要利用跟踪文件必要手动开启会话的跟踪。
6、开启会话的跟踪
  1. SQL> alter session set sql_trace=true;
  2. Session altered.
  3. SQL>
复制代码
7、实行一条简朴的SQL语句,并查抄/u01/app/oracle/diag/rdbms/orcl/orcl/trace目录,这时间就可以看到天生的跟踪文件。
  1. [oracle@oracle12c trace]$ pwd
  2. /u01/app/oracle/diag/rdbms/orcl/orcl/trace
  3. [oracle@oracle12c trace]$ ls *54685.trc
  4. orcl_ora_54685.trc
  5. [oracle@oracle12c trace]$
复制代码
四、利用跟踪文件诊断SQL

根据跟踪对于诊断SQL语句好坏常有效的,下面通过一个简朴的示例来说明。
1、实行下面的的SQL语句
  1. select * from scott.emp where deptno=10;
  2. select * from scott.emp where deptno=20;
  3. select * from scott.emp where deptno=30;
复制代码
这三条SQL分别查询10、20和30号部分的员工。通过观察发现,这三条SQL除了where的条件的参数值不一样,其他部分都是一样的。如许的SQL语句叫做“重复的SQL”。假如数据库中存在大量的重复SQL,会使得每次在实行的时间都会进行SQL的解析,再天生实行筹划。从而影响数据库的性能。
下面通过跟踪文件来验证上面的结论。
2、由于前面开启了会话的跟踪,假如不再必要进行跟踪了,必要手动关闭一下。
  1. SQL> alter session set sql_trace=false;
  2. Session altered.
  3. SQL>
复制代码
3、利用tkprof工具格式化跟踪文件
  1. [oracle@oracle12c trace]$ tkprof orcl_ora_54685.trc /home/oracle/a.txt sys=no sort=fchela
  2. TKPROF: Release 12.2.0.1.0 - Development on Mon Jun 28 10:37:48 2021
  3. Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.
  4. [oracle@oracle12c trace]$
复制代码
4、检察天生的a.txt文件,如下所示:
  1. SQL ID: 1mvxd868z75nf Plan Hash: 3956160932
  2. select *
  3. from scott.emp where deptno=30
  4. SQL ID: 2nbac4n9hnzth Plan Hash: 3956160932
  5. select *
  6. from scott.emp where deptno=20
  7. SQL ID: 062r5atccuyv4 Plan Hash: 3956160932
  8. select *
  9. from scott.emp where deptno=10
复制代码
可以看成只管三条SQL对应的SQL ID不一样,但是天生的Plan Hash是一样的。这就说明这三条SQL的实行筹划是一样的。既然如此,我们可以利用绑定变量的方式来改写这三条SQL。让这三条SQL语句在实行的时间,不用每次都天生实行筹划。只必要复用第一次天生的实行筹划即可。从而提高性能。
以上就是利用Oracle的跟踪文件的具体内容,更多关于Oracle跟踪文件的资料请关注脚本之家别的相干文章!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作