广告
返回顶部
首页 > 资讯 > 数据库 >oracle sql_trace 简单应用介绍
  • 190
分享到

oracle sql_trace 简单应用介绍

2024-04-02 19:04:59 190人浏览 安东尼
摘要

sql_TRACE是oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法。1.通过putty 或其他主机工具进入数据库所在主

sql_TRACE是oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法。

1.通过putty 或其他主机工具进入数据库所在主机.

2.在命令行中通过sqlplus登录oracle.

   连接数据库命令:sqlplus username/passWord

3.使用SQL_TRACE分析sql语句.

SQL_TRACE可以作为初始化参数在全局启用,也可以通过命令行方式在具体session启用。(以下案例均在session下进行)

 1).在全局启用 

 在参数文件(pfile/spfile)中指定:

 sql_trace =true

在全局启用SQL_TRACE会导致所有进程的活动被跟踪,包括后台进程及所有用户进程,这通常会导致比较严重的性能问题,所以在生产环境中要谨慎使用,这个参数在10g之后是动态参数,可以随时调整,在某些诊断中非常有效。
提示: 通过在全局启用sql_trace,我们可以跟踪到所有后台进程的活动,很多在文档中的抽象说明,通过跟踪文件的实时变化,我们可以清晰的看到各个进程之间的紧密协调.

所以不建议使用以上方式


 2).在当前session级设置

 大多数时候我们使用sql_trace跟踪当前进程.通过跟踪当前进程可以发现当前操作的后台数据库递归活动(这在研究数据库新特性时尤其有效),
 研究SQL执行,发现后台错误等.


启用当前session的跟踪:
SQL> alter session set sql_trace=true;

Session altered.

此时的SQL操作将被跟踪:
SQL> select count(*) from dba_users;--此sql语句可被更换成需要跟踪分析的sql.

  COUNT(*)
----------
        34
结束跟踪:
SQL> alter session set sql_trace=false;

Session altered.

或者使用 DBMS_SESSION程序包 来开启或关闭sql_trace
SQL> exec DBMS_SESSION.SET_SQL_TRACE (sql_trace boolean);

   

一般放seesion追踪的信息,对应系统初始化参数文件参数show parameter user_dump   --11g之前使用user_dump_dest
对应的就是它的位置。

SQL> show parameter user_dump --查看session中trace文件的存放位置

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
user_dump_dest                       string                            /oracle/diag/rdbms/templatedb/
                                                                                      templatedb/trace
  
  SQL> show parameter trace --查看trace在当前session中的相关参数的值,sql_trace的值会随着trace的开启与关闭发生变化,如下为仅为验证过程.

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
log_arcHive_trace                    integer                           0
sec_protocol_error_trace_action      string                            TRACE
sql_trace                            boolean                           FALSE
trace_enabled                        boolean                           TRUE
tracefile_identifier                 string
SQL> alter session set sql_trace=TRUE;

Session altered.

SQL> show parameter trace

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
log_archive_trace                    integer                           0
sec_protocol_error_trace_action      string                            TRACE
sql_trace                            boolean                           TRUE
trace_enabled                        boolean                           TRUE
tracefile_identifier                 string



SQL> select value from v$diag_info where name='Default Trace File';--查看当前session默认的trace文件url

VALUE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/oracle/diag/rdbms/templatedb/templatedb/trace/templatedb_ora_5581.trc

--设置自定义标识符,也可以不设置,设置后的则会改变当前session文件名末尾的字符串 如:templatedb_ora_5581.trc 变为 templatedb_ora_5581_testsession.trc,如下所示
SQL> alter session set tracefile_identifier='testsession';

Session altered.

SQL> select value from v$diag_info where name='Default Trace File';

VALUE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/oracle/diag/rdbms/templatedb/templatedb/trace/templatedb_ora_5581_testsession.trc


5 退出sqlplus

使用exit命令即可退出.


6 根据刚才设置的标示符可以很容易的定当前session所涉及的trace文件

[oracle@uatcrvcrtdb trace]$ ll *test*

-rw-r----- 1 oracle oinstall 2780 Dec 11 11:41 templatedb_ora_10420_testsession.trc

-rw-r----- 1 oracle oinstall  136 Dec 11 11:41 templatedb_ora_10420_testsession.trm


使用Oracle自带的一个命令行工具tkprof,将trace文件生成一个易读的文本文件

[oracle@uatcrvcrtdb trace]$ tkprof templatedb_ora_10420_testsession.trc testsession.txt

[oracle@uatcrvcrtdb trace]$ ll *test*

-rw-r----- 1 oracle oinstall 2780 Dec 11 11:41 templatedb_ora_10420_testsession.trc

-rw-r----- 1 oracle oinstall  136 Dec 11 11:41 templatedb_ora_10420_testsession.trm

-rw-r--r-- 1 oracle oinstall 5605 Dec 11 11:44 testsession.txt


cat testsession.txt

TKPROF: Release 11.2.0.4.0 - Development on Mon Dec 11 11:44:46 2017

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

Trace file: templatedb_ora_10420_testsession.trc
Sort options: default

********************************************************************************
count    = number of times OCI procedure was executed
cpu      = cpu time in seconds executing
elapsed  = elapsed time in seconds executing
disk     = number of physical reads of buffers from disk
query    = number of buffers Gotten for consistent read
current  = number of buffers gotten in current mode (usually for update)
rows     = number of rows processed by the fetch or execute call
********************************************************************************
SQL ID: 61yfbh4s7h6x1 Plan Hash: 2596900044
select count(1) from test_random_04
call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        2      0.10       0.10          0       2769          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.10       0.10          0       2769          0           1
Misses in library cache during parse: 0
Optimizer mode: ALL_ROWS
Parsing user id: 62
Number of plan statistics captured: 1
Rows (1st) Rows (avg) Rows (max)  Row Source Operation
---------- ---------- ----------  ---------------------------------------------------
         1          1          1  SORT AGGREGATE (cr=2769 pr=0 pw=0 time=102729 us)
    999999     999999     999999   TABLE ACCESS FULL TEST_RANDOM_04 (cr=2769 pr=0 pw=0 time=192830 us cost=762 size=0 card=999999)
********************************************************************************


oracle性能优化:如何懂tkprof


CALL :每次SQL语句的处理都分成以下三个部分
  Parse:这步将SQL语句转换成执行计划,包括检查是否有正确的授权和所需要用到的表、列以及其他引用到的对象是否存在。
  Execute:这步是真正的由Oracle来执行语句。对于insert、update、delete操作,这步会修改数据,对于select操作,这步就只是确定选择的记录。
  Fetch:返回查询语句中所获得的记录,这步只有select语句会被执行。 
COUNT:这个语句被parse、execute、fetch的次数。 
CPU:这个语句对于所有的parse、execute、fetch所消耗的cpu的时间,以秒为单位。
ELAPSED:这个语句所有消耗在parse、execute、fetch的总的时间。
DISK:从磁盘上的数据文件中物理读取的块的数量。一般来说更想知道的是正在从缓存中读取的数据而不是从磁盘上读取的数据。
QUERY:在一致性读模式下,所有parse、execute、fetch所获得的buffer的数量。一致性模式的buffer是用于给一个长时间运行的事务提供一个一致性读的快照,缓存实际上在头部存储了状态。 
CURRENT: 在current模式下所获得的buffer的数量。一般在current模式下执行insert、update、delete操作都会获取 buffer。在current模式下如果在高速缓存区发现有新的缓存足够给当前的事务使用,则这些buffer都会被读入了缓存区中。 
ROWS: 所有SQL语句返回的记录数目,但是不包括子查询中返回的记录数目。对于select语句,返回记录是在fetch这步,对于insert、update、delete操作,返回记录则是在execute这步。

 

A、query+current/rows 平均每行所需的block数,太大的话(超过20)SQL语句效率太低
B、Parse count/Execute count parse count应尽量接近1,如果太高的话,SQL会进行不必要的reparse
C、rows Fetch/Fetch Fetch Array的大小,太小的话就没有充分利用批量Fetch的功能,增加了数据在客户端和服务器之间的往返次数。
D、disk/query+current 磁盘IO所占逻辑IO的比例,太大的话有可能是db_buffer_size过小(也跟SQL的具体特性有关)
E、elapsed/cpu 太大表示执行过程中花费了大量的时间等待某种资源
F、cpu Or elapsed 太大表示执行时间过长,或消耗了了大量的CPU时间,应该考虑优化
G、执行计划中的Rows 表示在该处理阶段所访问的行数,要尽量减少


您可能感兴趣的文档:

--结束END--

本文标题: oracle sql_trace 简单应用介绍

本文链接: https://www.lsjlt.com/news/40818.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle sql_trace 简单应用介绍
    SQL_TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法。1.通过putty 或其他主机工具进入数据库所在主...
    99+
    2022-10-18
  • oracle lob 简单介绍
    何为LOB?lob为oracle数据库的一个大对象数据类型,可以存储超过4000bytes的字符串,二进制数据,OS文件等大对象信息.最大可存储的容量根oracle的版本和oracle 块大小有关.有那几种...
    99+
    2022-10-18
  • 简单介绍Fedora Core 3系统应用
    Fedora Core 3是一种基于Linux操作系统的发行版,它是由Fedora项目开发的。Fedora Core 3提供了许多不...
    99+
    2023-09-23
    Fedora
  • 简单介绍下MySQL的基础应用
    下面讲讲关于MySQL的基础应用,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完MySQL的基础应用这篇文章你一定会有所受益。 1.登入到MySQL云服务器[root@...
    99+
    2022-10-18
  • Django admin简单介绍
    生成同步数据库的脚本: python manage.py makemigrations 同步数据库: python manage.py migrate 创建后台用户 python manage.py createsuperuser 访...
    99+
    2023-01-31
    简单 Django admin
  • Django ajax 简单介绍
    AJAX Asynchronous Javascript And XML是 "异步Javascript和XML"。即使用 Javascript 语言与服务器进行异步交互,传输的数据为XML。 同步交互:客户端发出一个请求后,需要等待服务器...
    99+
    2023-01-31
    简单 Django ajax
  • C++ OpenMP简单介绍
    目录一、背景知识1、program作用2、C++不同版本区别二、什么是OpenMP三、关键字1、reduction 作用2、default(shared)作用一、背景知识 1、pro...
    99+
    2023-05-20
    c++ OpenMP简介 c++ OpenMP
  • Android Socket 简单介绍
    文章目录 前言一、Socket是什么?百度百科的解释我自己的理解 二、简单示例1.服务端2.客户端3.布局4.实现 参考总结 前言 最近需求需要使用Socket进行通讯,我在工作...
    99+
    2023-09-23
    android
  • 4:GTID简单介绍
    概述: 当使用GTIDs时,可以识别和跟踪每一个事务,因为它是在原始服务器上提交的,并由任何slave应用;简单来说就是master提交的所有事务都在slaves应用一次,两者的数据就能保证一致性,此外,...
    99+
    2022-10-18
  • 1.AutoMapper简单介绍
    官网:http://automapper.org/ 源码:https://github.com/AutoMapper/AutoMapper NUGET安装: PM> Install-Package AutoMapper Au...
    99+
    2020-08-26
    1.AutoMapper简单介绍
  • 201_DMA-BUF简单介绍
    一、DMA-BUF等概念的介绍 首先需要明确DMA-BUF,Dma buffer,ION和DMA-BUF Heap是不同的概念。 在Android 多媒体系统中为了减少因不同进程之间内存的多次拷贝而产生的不必要的开销,最直接的想法是希望跟硬...
    99+
    2023-08-16
    linux android java 缓存
  • 免杀简单介绍
    免杀简单介绍 免杀是什么? ​ 免杀,指的是一种能使病毒木马免于被杀毒软件查杀的技术。 为什么要制作免杀? ​ 当前不论是个人PC还是服务器都有杀软,如个人PCwindows操作系统自带的 W...
    99+
    2023-09-01
    服务器 php 运维
  • python使用sqlite简单介绍
    python连接sqlite非常简单,基本步骤如下: 用sqlite3.connect创建数据库连接,假设连接对象为conn 如果该数据库操作不需要返回结果,就直接用conn.execute查询,如建表、删表、添加、修改删除数据...
    99+
    2023-01-31
    简单 python sqlite
  • python元组简单介绍
    目录1、拆包2、enumerate3、list()元组的特点:是一种不可变序列,一旦创建就不能修改 1、拆包 将元组的元素取出赋值给不同变量 >>> a = ...
    99+
    2022-11-12
  • Java单例模式简单介绍
    一、概念单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,...
    99+
    2023-05-31
    java 单例模式 ava
  • 简单介绍如何使用GitHub
    在现代互联网社会中,程序员们都离不开GitHub这个开源代码仓库。它不仅可以用于托管代码,还可以与其他合作者共同合作开发同一项目。但是,对于初次使用GitHub的人来说,可能会感到有些困惑。在本文中,我们将介绍如何使用GitHub。首先,需...
    99+
    2023-10-22
  • C# FileStream简单介绍和使用
    FileStream 是 C# 中用于操作文件的类,它提供了一种以字节为单位读取和写入文件的功能。使用 FileStream,可以实...
    99+
    2023-08-08
    C#
  • WCF基础介绍并创建简单应用程序
    什么是WCF? WCF, 英文全称(windows Communication Foundation) , 即为windows通讯平台。 windows想到这里大家都知道了 , WC...
    99+
    2022-11-13
  • scrapy框架的简单介绍
    这篇文章主要介绍“scrapy框架的简单介绍”,在日常操作中,相信很多人在scrapy框架的简单介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”scrapy框架的简单介绍”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-02
  • MyBatis入门介绍(超简单)
    MyBatis 简介MyBatis的前身叫iBatis,本是apache的一个开源项目, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。MyBatis是支...
    99+
    2023-05-31
    mybatis 入门 batis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作