oracle trace发起用户,Oracle 使用TRACE进行SQL性能分析

设置sql_trace参数为true会对整个实例进行跟踪,包括所有进程:用户进程和后台进程,会造成比较严重的性能问题,生产环境一定要慎

设置sql_trace参数为true会对整个实例进行跟踪,包括所有进程:用户进程和后台进程,会造成比较严重的性能问题,生产环境一定要慎用。

一、根据相关事务或者sql 执行trace操作:

1) 使用前需要注意的地方

1,初始化参数timed_statistics=true。允许sql trace 和其他的一些动态性能视图收集与时间(cpu,elapsed)有关的参数。一定要打开,不然相关信息不会被收集。这是一个动态的参数,也可以在session级别设置。

SQL>alter session set titimed_statistics=true

2,MAX_DUMP_FILE_SIZE跟踪文件的大小的限制,如果跟踪信息较多可以设置成unlimited。可以是KB,MB单位,9I开始默认为unlimited这是一个动态的参数,也可以在session级别设置。

SQL>alter system set max_dump_file_size=300

SQL>alter system set max_dump_file_size=unlimited

2)trace执行过程:

1. 启动SQL_TRACE:SQL> alter session set sql_trace=true;

2. 进行相关事务或者sql操作:SQL> select * from t;

3. 关闭SQL_TRACE:SQL> alter session set sql_trace=false;

也可以通过Oracle提供的系统包 DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION来实现。例如:首先从os上利用top命令找到当前占用cpu资源最高的一个进程的PID号;然后在数据库中根据PID号找到相应的sid和serial#。

SQL>execute dbms_system.set_sql_trace_in_session(sid,serial#,true);

SQL>execute dbms_system.set_sql_trace_in_session(sid,serial#,false);

二、获得当前生成trace文件的位置:

在Oracle 10g中,SQL_TRACE生成的trace文件默认路劲是$ORACLE_BASE/admin/SID/udump;到了11g,trace 默认路径在:$ORACLE_BASE/diag/rdbms/orcl/orcl/trace目录下。

也可以通过查询出trace文件所在的默认路径:SELECT VALUE FROM V$PARAMETER WHERE NAME = 'user_dump_dest'(BACKGROUND_DUMP_DEST)

如需修改:alter system set user_diagnostic_dest = 'd:\oracle\trace';

或者: select tracefile from v$process where addr in (select paddr from v$session where sid in (select sid from v$mystat));

此外,也可以直接用如下SQL直接查出当前的trace文件名。

SELECT d.VALUE || '\' || LOWER (RTRIM (i.INSTANCE, CHR (0))) || '_ora_' || p.spid || '.trc'

AS "trace_file_name"

FROM (SELECT p.spid

FROM v$mystat m, v$session s, v$process p

WHERE m.statistic# = 1 AND s.SID = m.SID AND p.addr = s.paddr) p,

(SELECT t.INSTANCE

FROM v$thread t, v$parameter v

WHERE v.NAME = 'thread'

AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i,

(SELECT VALUE

FROM v$parameter

WHERE NAME = 'user_dump_dest') d;

三、转换生成trace文件:

SQL_TRACE 生成最原始的trace文件的可读性比较差,所以通常我们使用tkprof 工具来处理trace文件。 Tkprof 工具是Oracle 自带的一个工具,用于处理原始的trace文件,它的作用主要是合并汇总trace文件中的一些项,规范化文件的格式,使文件更具有可读性。 Tkprof 是系统级别的,直接在系统下执行即可。

注意:tkprof 工具只能用在处理SQL_TRACE和10046事件产生的trace,其他事件如10053不能处理。

格式: tkprof tracefile outputfile [optional | parameters ]

C:/Users/Administrator/VIDI>tkprof d:/app/administrator/diag/rdbms/orcl/orcl/trace/orcl_ora_3048.trc orcl_ora_3048.txt sys=no

参数和选项:

explain=user/password执行explain命令将结果放在SQL trace的输出文件中

sys=[yes/no]确定系统是否列出由sys用户产生或重调的sql语句。设置为no后,trace文件具有更佳的可读性

sort=sort_option按照指定的方法对sql trace的输出文件进行降序排序

sort_option选项:设置排序选项,可以用逗号分隔多个选项。默认是跟踪文件中发现的SQL顺序。

prscnt按解析次数排序

prscpu按解析所花cpu时间排序

prsela按解析所经历的时间排序

prsdsk按解析时物理的读操作的次数排序

prsqry按解析时以一致模式读取数据块的次数排序

prscu按解析时以当前读取数据块的次数进行排序

execnt按执行次数排序

execpu按执行时花的cpu时间排序

exeela按执行所经历的时间排序

exedsk按执行时物理读操作的次数排序

exeqry按执行时以一致模式读取数据块的次数排序

execu按执行时以当前模式读取数据块的次数排序

exerow按执行时处理的记录的次数进行排序

exemis按执行时库缓冲区的错误排序

fchcnt按返回数据的次数进行排序

fchcpu按返回数据cpu所花时间排序

fchela按返回数据所经历的时间排序

fchdsk按返回数据时的物理读操作的次数排序

fchqry按返回数据时一致模式读取数据块的次数排序

fchcu按返回数据时当前模式读取数据块的次数排序

fchrow按返回数据时处理的数据数量排序

注:这些排序中经常用到的是fchdsk,fckchela ,fchqry.因为有问题的sql一般都是大的查询造成的,当然更新,插入,删除时也会存在全表扫描,这就需要:exedsk,exeqry,exeela等选项。根据具体情况具体分析。

Cpu时间和Elapsed时间都是以秒为单位,而且两个值基本上一样,但我比较常用elapsed,他是反映的用户相应时间,从运行sql到用户得到结果的时间,会更实际些。

tkprof输出文件各列的含义:

parse:将sql语句转换成执行计划,包括检查是否有正确的授权,需要到得表,列及其他引用到得对象是否存在,这些信息分别存在v$librarycache.v$rowcache..

execute:oracle实际执行的语句,如:insert,update,delete,这些会修改数据,对于select操作,这部只是确定选择的行数。

fetch:返回查询获得的行数,只有执行select会被收集。

Count:这个语句被parse,execute,fetch的次数的统计

Cpu:这个语句所有的parse,execute,fetch所用的cpu总的时间,以秒为单位。如果TIMED_STATISTICS 关闭的话,值为0。

Elapsed:这个语句所有的parse,execute,fetch所消耗的总的时间,以秒为单位。如果TIMED_STATISTICS 关闭的话,值为0。

Disk:这个语句所有的parse,,execute,fetch从磁盘上的数据文件中读取的数据块的数量

Query:在一致性读的模式下,这个语句所有的parse,execute,fetch所获取的数据块数量(这部分是从内存读取的也就是逻辑读取的,相当于执行计划里的consistent gets)

Current:在current模式下,这个语句所有的parse,execute,fetch所获取的数据块数量,一般是current模式下发生的delect,insert,update的操作都会获取。数据块

Rows:语句返回的行数,不包括子查询中返回的记录数目。对于select语句,返回在fetch这步,对于insert,delete,update操作,返回记录是在execute这步。

四、对trace文件分析过程:

1,先找磁盘多的sq l(sort= fchdsk ),意味着全表扫描;

2,找运行时间长的(sort= fchela),意味着sql可能写的不好或磁盘,逻辑读较多;

3,找出一致性读较多的(sort= fchqry),当表不是很大的时候(可能全部缓存住了),没有发生磁盘读,但不意味着不需要建立索引,或者sql需要优化;

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/244345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python画二次函数图像的顶点_画二次函数图像的步骤

画二次函数图像的步骤2019-11-14 09:26:25文/叶丹画二次函数图像的步骤:五点法是选五个极其重要的点,分别为顶点、与x轴的交点、与y轴的交点及其关于对称轴的对称点,然后根据这五点作图。二次函数的画法五点法五点草图法又被叫做五点作图法是…

php rss xml,php 一个完全面向对象的RSS/XML类的简单示例

这篇文章主要为大家详细介绍了php 一个完全面向对象的RSS/XML类的简单示例,具有一定的参考价值,可以用来参考一下。感兴趣的小伙伴,下面一起跟随512笔记的小编罗X来看看吧。经测试代码如下:/*** RSS/XML类** param* arrange (512.…

zynq中mgtx应用_基于ZYNQ的UCOS移植(TCP通讯)

周五在某小徐处借到了一块Zedboard开发板,平时在公司没有机会做SDK开发的笔记,今天就趁着这块开发板简要记录一些SDK的基本操作。一、功能简介通过第三方库创建SDK工程在ZYNQ-UCOS中实现TCP echo通讯二、配置需求操作系统Windows 10(64位)开发环境SDK 20…

oracle主机名的脚本,一个开启Oracle服务和更改主机名的脚本-Oracle

一个开启Oracle服务和更改主机名的脚本真不知道该起一个什么题目,这是昨天数据库老师提出的问题。由于实验室的机器都装了还原卡,每次开机或重启都会回到初始状态,所以数库的listener.ora、tnsnames.ora文件里的host不是本机的计算机名&#…

python中的字体英文名_对python opencv 添加文字 cv2.putText 的各参数介绍

如下所示:cv2.putText(img, str(i), (123,456)), font, 2, (0,255,0), 3)各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细其中字体可以选择FONT_HERSHEY_SIMP…

oracle备份 ram,Oracle备份时出现AIX系统的3D32B80D错误

环境:数据库: AIX5.3下的64位Oracle 10.2.0.1.0TSM5.4:Windows2003带库:IBM3100问题描述:1、aix系统出现3D32B80D错误。如下:JTXXDBS01:> errpt |moreIDENTIFIER TIMESTAMPT C RESOURCE_NAMEDESCRIPTION3D32B80D020…

python僵尸进程和孤儿进程_python学习笔记——孤儿进程和僵尸进程

1 基本概述1.1 孤儿进程和僵尸进程父进程创建子进程后,较为理想状态是子进程结束,父进程回收子进程并释放子进程占有的资源;而实际上,父子进程是异步过程,两者谁先结束是无顺的,一般可以通过父进程调用wait…

linux weblogic启动目录,Linux下WebLogic开机启动设置

为了方便管理,可以写一个启动脚本用来启动weblogic,方法如下:用root用户登录Linux,打开目录/etc/rc.d/init.d,新建一个空文本文件,名称改为weblogic(此文件名为将来的服务名,可自定义,最好以域名…

算法描述怎么写_管件材料描述怎么写

通过以上及其我们了解到了管道上不同的管道元件,包括:弯头、三通、异径管、管帽等。但在材料等级表中如何清楚的描述它们的特性,至关重要,因为这涉及材料采购是否正确。以下主要介绍管件材料描述的写法:①弯头 ②DN15~…

linux复制文件通信方式,Linux分布式文件拷贝

在开发过程中总会遇到这种情况,就是需要将一个文件从一个机器拷贝到其他的很多台机器中,最简单的方法是用U盘拷出来再一个一个机器的插进去拷贝,另一张方法则是利用飞鸽传书或者QQ等工具传输,但是都不是很方便,因为每次…

python矩阵施密特标准型_矩阵与数值计算(3)——Schur标准型和Jordan分解

前言之前介绍过几种矩阵分解方法,都可以有效的提升矩阵方程的数值求解问题,其中LU分解尤其适合于中小型、稠密矩阵的求解问题。我们最理想的矩阵就是可相似对角化的矩阵,直接可以分解成两个酉矩阵和一个对角矩阵的形式,那么如果一…

安装linux修复系统文件夹,误删除 Linux 系统文件了?这个方法教你解决

误删除linux系统文件了?不用急,本文将给你一个恢复linux文件的方法,让你轻松应对运维中的各风险问题。方法总比问题多~说在前面的话针对日常维护操作,难免会出现文件误删除的操作。大家熟知linux文件系统不同win有回收站,删除后的…

python亲和度_数据挖掘——亲和性分析

亲和性分析根据样本个体之间的相似度,确定它们关系的亲疏。应用场景:1.向网站用户提供多样化的服务或投放定向广告。2.为了向用户推荐电影或商品3.根据基因寻找有亲缘关系的人比如:统计顾客购买了商品1,然后再购买商品2的比率,算相…

linux 命令 考试,linux常用命令总结-第一次考试

1.1 mkdir创建目录语法:cat [选项] [文件名]选项:-p 多层目录创建-v 每次创建新目录都显示信息范例:1.创建多层嵌套目录[rootns2 tmp]# mkdir -pv /tmp/test/file/newmkdir: 已创建目录 "/tmp/test"mkdir: 已创建目录 "/t…

onvif python 音视频_python3控制基于onvif的安防摄像头

参考链接:一、python3控制基于onvif的安防摄像头使用的是tp-link安防摄像头安装在Python3中,是安装pip install onvif-zeep实现控制二、实现已经保证了摄像头具有的以下的能力,所以不再对设备是否具有能力进行判断。实现获取设备、控制设备、…

python fact函数_第5天:Python 函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段,所以我经常说函数是程序员规模化使用的基础。函数能提高应用的模块性,和代码的重复利用率。在程序设计中,常将一些常用的功能模块编写成函…

linux编写日志接口so,linux下动态链接问题(.so文件的编写与调用) .

.o 就相当于windows里的obj文件.a 是好多个.o合在一起,用于静态连接.so 是shared object,用于动态连接的,和dll差不多sotest.c#includeint test(int a){printf("#########:%d\n",a);return a;}//test.c#include int test(int a);int main(int argc,char argv[]){int …

python获取包下的所有对象_Python访问COM对象的comtypes包简介

Python访问COM对象的comtypes包简介虽然pywin32包中包含的派遣高级客户端支持基于COM接口,它是无法访问COM 对象,除非他们在C 封装代码自定义COM接口。在Python中是无法直接访问COM对象接口,需要借助专门访问的COM包:comtypes&am…

linux tmux 详细教程,Linux下的神器介绍之Tmux分屏器

前言我们为什么需要分屏器呢?对于这个问题,我想大家肯定都有自己的看法。主流的观点是这样的,对于生活在Linux下的人(开发人员、运维人员、普通爱好者)都不可避免的使用终端模拟器(比如,gnome-terminal)去执行一些命令或者脚本。但…

laravel created_at 时间戳_使用 HTTP 测试测试 Laravel 中间件

文章转发自专业的Laravel开发者社区,原始链接:https://learnku.com/laravel/t/34002在本文中,我将展示一个使用 HTTP 测试中间件的实例。HTTP 级测试更能适应变化,可读性更强。在最近与 Adam Wathan 和 Taylor Otwell 合拍的《全栈…