当前位置: 首页 > news >正文

how to makeget trace file

在oracle中,要查看sql语句执行计划有很多种办法,这里介绍其中的2种:
sql_trace和10046 events。
通过tracle跟踪文件,可以看到比sql*plus中跟详尽的信息,从而针对sql语句优化更有针对性,这里只是介绍如何生成sql的trace file。以及简单的tkprof的使用。

<!--more-->

1. 设置参数sql_trace=true
在这里先介绍下,跟踪文件的生成目录,通过参数可以查看具体目录:
[oracle@gtlions ~]$ sqlplus store/store

SQL*Plus: Release 11.2.0.1.0 Production on 星期三 12月 22 16:40:38 2010

Copyright (c) 1982, 2009, Oracle. All rights reserved.

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

store@TEST> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
store@TEST> show parameter user_dump_Dest;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest string /opt/oracle/db/diag/rdbms/test
/TEST/trace
查看下这个目录下的文件
[oracle@gtlions trace]$ pwd
/opt/oracle/db/diag/rdbms/test/TEST/trace
[oracle@gtlions trace]$ ls -l | grep "^-" | wc -l
777
可以看到有777个文件,原因是在正常运行过程中经常会不断地被填充,这么多文件中要查找我们要生成的跟踪文件似乎比较麻烦,虽然有规律可循,但是这里首先要介绍一个简单的办法,通过设置会话的跟踪文件的标识:
设置你的标识
store@TEST> alter session set tracefile_identifier='this_is_my_tracefile';

会话已更改。
设置会话参数sql_trace启用生成跟踪文件
store@TEST> alter session set sql_trace=true;

会话已更改。
执行sql语句
store@TEST> select * from emp;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 09-12月-82 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 12-1月 -83 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10

已选择14行。
关闭跟踪
store@TEST> alter session set sql_trace=false;

会话已更改。

store@TEST>

接下来看下生成的文件
[oracle@gtlions trace]$ ls -l |grep 'this'
-rw-r----- 1 oracle oinstall 56256 12-22 16:51 TEST_ora_3786_this_is_my_tracefile.trc
-rw-r----- 1 oracle oinstall 380 12-22 16:51 TEST_ora_3786_this_is_my_tracefile.trm
直接查看trc文件是很难受的,通过tkprof工具我们给你做个简单的加工
[oracle@gtlions trace]$ tkprof TEST_ora_3786_this_is_my_tracefile.trc ~/this_is_my_tracefile.trc

TKPROF: Release 11.2.0.1.0 - Development on 星期三 12月 22 16:58:32 2010

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

接着查看tkprof生成的新文件
[oracle@gtlions trace]$ cat ~/this_is_my_tracefile.trc
。。
SQL ID: a2dk8bdn0ujx7
Plan Hash: 3956160932
select *
from
emp

call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.01 0.02 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 2 0.00 0.02 6 8 0 14
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 4 0.01 0.04 6 8 0 14

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 93

Rows Row Source Operation
------- ---------------------------------------------------
14 TABLE ACCESS FULL EMP (cr=8 pr=6 pw=0 time=0 us cost=3 size=532 card=14)

********************************************************************************
。。。
摘选部分段落

刚才说的定位跟踪文件的办法,还有个办法查询系统参数和当前session信息:
store@TEST> select c.value || '/' || d.instance_name || '_ora_' || a.spid || '.trc' trace
2 from v$process a, v$session b, v$parameter c, v$instance d
3 where a.addr = b.paddr
4 and b.audsid = userenv('sessionid')
5 and c.name = 'user_dump_dest';

TRACE
----------------------------------------------------------------------------------------------------
/opt/oracle/db/diag/rdbms/test/TEST/trace/TEST_ora_3786.trc
可以看到,如果我们不加自己的标识,这个就是本次生成的跟踪文件。

2. 设置events
第2个办法,设置session的events

store@TEST> alter session set events '10046 trace name context forever,level 12';

会话已更改。

store@TEST> select * from emp;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 09-12月-82 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 12-1月 -83 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10

已选择14行。

store@TEST> alter session set events '10046 trace name context off';

会话已更改。

3. 其他
使用dbms工具包。
本文只是简单介绍了通过设置会话的sql_trace或者10046 events来生成跟踪文件,以及是tkprof工具生成更易于查看的跟踪文件。
-The End-

相关文章:

  • contentSize、contentInset和contentOffset
  • 100个vc小项目开发:一、仿qq主界面
  • Android 数据库框架OrmLite的使用(一)
  • nyoj--1233--差值(贪心模拟+大数)
  • “滑机约拍”--第二阶段冲刺(2)
  • android学习SeekBar的使用
  • 2010年走到转折点的IT人:他们被迫改变
  • 如何消除inline-block元素间间距问题(转)
  • 经典算法研究系列:一、A*搜索算法
  • 基于Objectvie-C基础教程(第2版)做的笔记
  • S3C2440-LCD图片显示
  • 1203有穷自动机
  • eclipse 导入tomcat7源码
  • 硬件黑客
  • Python生成器实现杨辉三角打印
  • php的引用
  • Apache的80端口被占用以及访问时报错403
  • iOS小技巧之UIImagePickerController实现头像选择
  • JavaScript的使用你知道几种?(上)
  • JavaWeb(学习笔记二)
  • Mybatis初体验
  • MYSQL 的 IF 函数
  • Python连接Oracle
  • Python学习笔记 字符串拼接
  • React Native移动开发实战-3-实现页面间的数据传递
  • React系列之 Redux 架构模式
  • SegmentFault 2015 Top Rank
  • Vue2.x学习三:事件处理生命周期钩子
  • vue自定义指令实现v-tap插件
  • 电商搜索引擎的架构设计和性能优化
  • 面试总结JavaScript篇
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 我感觉这是史上最牛的防sql注入方法类
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​水经微图Web1.5.0版即将上线
  • ###C语言程序设计-----C语言学习(6)#
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (AngularJS)Angular 控制器之间通信初探
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (算法设计与分析)第一章算法概述-习题
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • .net(C#)中String.Format如何使用
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • @Builder用法
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians
  • [BZOJ 3531][Sdoi2014]旅行(树链剖分+线段树)
  • [C#]C# winform实现imagecaption图像生成描述图文描述生成
  • [c++] 自写 MyString 类
  • [CTF]php is_numeric绕过
  • [GXYCTF2019]禁止套娃
  • [html] 动态炫彩渐变背景