Oracle SQL_TRACE和10046事件的优化SQL实例

一数据库版本

LEO1@LEO1>select * from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

PL/SQL Release11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

TNS for Linux:Version 11.2.0.1.0 - Production

NLSRTL Version11.2.0.1.0 - Production

二演示使用SQL_TRACE和10046事件对其它会话进行跟踪,并给出trace结果

SQL_TRACE:Oracle这个功能主要是为了追踪SQL的执行过程,分析SQL的性能,资源消耗情况。

1.查看SQL是如何操作处理数据

2.查看SQL在执行过程中产生了的等待事件

3.查看SQL的执行过程资源消耗

4.查看SQL的实际执行计划

5.查看SQL的递归语句

6.如果要探索SQL如何执行的可以详细看看

10046:用于分析SQL执行过程中性能消耗情况,可以查看绑定变量信息,可以查看等待事件信息,它比SQL_TRACE输入输出更多参数。

上述工具使用场合:1.优化SQL语句

2.查看SQL语句执行计划

3.跟踪SQL语句执行过程

4.把会话中SQL的信息重定向到一个文件里

SET AUTO TRACE:1.输出SQL语句估算的执行计划(猜出来的)

2.SQL语句并没有真正执行,只关注这条SQL的执行计划对不对

3.只是用来估算执行计划

实验

使用SQL_TRACE对其它会话进行跟踪

如果对当前会话进行跟踪只需alter session set sql_trace=true;即可,如果对其它会话进行跟踪还需要设置另外一些参数。

我们现在做一下,从144会话跟踪12会话的SQL

144会话我们使用leo1用户操作

12会话我们使用leo2用户操作

144会话

LEO1@LEO1> selectdistinct sid from v$mystat;   可以查询当前会话ID

SID

----------------

144

我们用会话ID和串号来唯一定位一个会话,现在我们把2个会话信息都显示出来了

LEO1@LEO1>select sid,serial# from v$session where sid in (144,12);

SID   SERIAL#

---------------------------------

12      4472

144       979

这时我有了一个疑问,定位一个会话一般来说看sid就可以了,那么为什么后面还跟着个serial呢,这个serial是干什么用的呢,咨询了一下Alantany查了一下官方文档

SID NUMBER:Sessionidentifier   就是会话标识

SERIAL#  NUMBER  :是用来标识唯一一个会话操作对象的,保证这个会话发出的命令可以正确的应用到对应的会话对象上。

场合一个会话的结束和另一个会话开始都使用了同一个SID,区分这是2个不同的会话

例子

第一次leonarding登陆sid=12,操作了leo1表,退出

SID   SERIAL#

---------------------------------

12       4472

第二次Alan登陆sid=12,又操作了leo2表,退出

SID   SERIAL#

---------------------------- ----

12      4777

如果只是看SID我们不能分辨出是谁登录了会话操作了leo1表和leo2表,而serial可以分辨出不同会话的命令正确应用到对应的对象上,区分这是2个不同的人登录的会话。

LEO1@LEO1> droptable leo1;                  清理环境

Table dropped.

LEO1@LEO1>create table leo1 as select * from dba_objects;   用leo1用户创建leo1表

Table created.

LEO1@LEO1>select count(*) from leo1;                    看看有多少条记录

COUNT(*)

----------------

72007

LEO1@LEO1>execute dbms_stats.gather_table_stats('LEO1','LEO1',method_opt=>'for allcolumns size 254');

PL/SQL proceduresuccessfully completed.

随便做个表分析和直方图

LEO1@LEO1> conn/ as sysdba                  切换为管理员

时间: 2024-07-28 17:54:46

Oracle SQL_TRACE和10046事件的优化SQL实例的相关文章

Oracle常见的等待事件

db file scattered read 对于一些频繁访问的表,如果没有建立索引或没有建立 合适的索引,Oracle只能对其进行全表扫描,就会导致大量该等待事件. 全表扫描时,读 取的数据在磁盘上一般是连续的,但是读到内存时却是不连续的,因此该事件命名为离散读 (scattered read),注意不要被它的名字所迷惑. 一次多块读取的数量受参数 DB_FILE_MULTIBLOCK_READ_COUNT的影响. 在实际诊断过程中,可以通过v$session_wait 视图发现session

SQL_Trace 和 10046 +

1.SQL_TRACE 当SQL语句出现性能问题时,我们可以用SQL_TRACE来跟踪SQL的执行情况,通过跟踪,我们可以了解一条SQL或者PL/SQL包的运行情况,SQL_TRACE命令会将SQL执行的整个过程输出到一个trace文件中,我们可以读这个trace 文件来了解在这个SQL执行过程中Oracle 都做了哪些操作.  可以通过sql命令启动SQL_TRACE,或者在初始化参数里面.  SQL>alter session set sql_trace=true; 或者 SQL> alt

深入理解Oracle调试事件:10046事件详解

       之前也写过一篇10046的文章:10046简介        今天,Think想和大家一起共同深入去理解一下Oracle的这些调试事件            10046事件是SQL_TRACE的扩展,被戏称为"吃了兴奋剂的SQL_TRACE"       有效的追踪级别:              ① 0级:SQL_TRACE=FASLE       ② 1级:SQL_TRACE=TRUE,这是缺省级别       ③ 4级:1级+绑定变量       ④ 8级:4级+等

应用事件探查器优化SQL Server系统

概述 当你的SQL Server数据库系统运行缓慢的时候,你或许多多少少知道可以使用SQL Server Profiler(中文叫SQL事件探查器)工具来进行跟踪和分析.是的,Profiler可以用来捕获发送到SQL Server的所有语句以及语句的执行性能相关数据(如语句的read/writes页面数目,CPU的使用量,以及语句的duration等)以供以后分析.但本文并不介绍如何使用Profiler 工具,而是将介绍如何使用read80trace(有关该工具见后面介绍)工具结合自定义的存储过

oracle语句-求高手优化sql 主要针对group by

问题描述 求高手优化sql 主要针对group by SELECT r.custid custid i.productid i.officialsocialprice price SUM(i.quanitity) amount FROM IMEIBATCH i RDCUST r RDCUSTDETAIL d WHERE (i.vendororgacode = 'ZD' OR i.vendororgacode IN (SELECT orgacode FROM organiza WHERE pare

[20120915]10046事件与执行计划改变.txt

    使用10046事件来跟踪解决oracle的许多问题,是非常常用的手段,但是实际上可能出现跟踪的sql执行计划与原来不同的情况,自己应该引起注意. 测试如下: 1.测试环境建立: SQL> select * from v$version ; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition

使用dbms_system来对其他会话进行10046事件12级别的跟踪看不到等待统计信息

数据库版本是10.2.0.1.0和10.2.0.4.0 SQL> select * from v$version where rownum<2; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod SQL> select * from v$version where r

通过分析SQL语句的执行计划优化SQL(二)

优化|语句|执行 第5章 ORACLE的执行计划 背景知识:        为了更好的进行下面的内容我们必须了解一些概念性的术语: 共享sql语句    为了不重复解析相同的SQL语句(因为解析操作比较费资源,会导致性能下降),在第一次解析之后,ORACLE将SQL语句及解析后得到的执行计划存放在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享.因此,当你执行一个SQL语句(有时被称为一个

Oracle 11g r2全外连接优化执行计划(三)NATIVE_FULL_OUTER_JOIN提示

虽然上一篇介绍了NATIVE_FULL_OUTER_JOIN和NO_NATIVE_FULL_OUTER_JOIN两个HINT,但是实际上NATIVE_FULL_OUTER_JOIN并没有发挥任何的作用,因为Oracle对全外连接的优化使得新的执行计划的代价比原始执行计划要低,所以Oracle默认就选择这个执行计划,因此看不到NATIVE_FULL_OUTER_JOIN提示的效果. SQL> SET AUTOT ON SQL> SELECT T1.ID, T2.ID 2  FROM T1 FUL