Oracle事件之10053 跟踪的trace文件相关解释

简介: Oracle事件之10053 跟踪的trace文件相关解释 一. 10053事件   当一个SQL出现性能问题的时候,可以使用SQL_TRACE 或者 10046事件来跟踪SQL. 通过生成的trace来了解SQL的执行过程。

Oracle事件之10053 跟踪的trace文件相关解释





一. 10053事件

  当一个SQL出现性能问题的时候,可以使用SQL_TRACE 或者 10046事件来跟踪SQL. 通过生成的trace来了解SQL的执行过程。 我们在查看一条SQL的执行计划的时候,只能看到CBO 最终告诉我们的执行计划结果,但是不知道CBO 是根据什么来做的。 如果遇到了执行计划失真,如:一个SQL语句,很明显oracle应该使用索引,但是执行计划却没有使用索引。无法进行分析判断。

  而10053事件就提供了这样的功能。它产生的trace文件提供了Oracle如何选择执行计划,为什么会得到这样的执行计划信息。

  10053事件生成trace文件目录和SQL_TRACE一样。
  在Oracle 10g中,SQL_TRACE生成的trace文件默认路劲是$ORACLE_BASE/admin/SID/udump.       
  在Oracle 11g,trace 默认路径在:$ORACLE_BASE/diag/rdbms/orcl/orcl/trace目录下

  对于10053事件的trace文件,我们只能直接阅读原始的trace文件,不能使用tkprof工具来处理tkprof工具只能用来处理sql_trace 和 10046事件产生的trace文件。

10053事件有两个级别:

     Level 2:2级是1级的一个子集,它包含以下内容:

Column statistics
Single Access Paths
Join Costs
Table Joins Considered
Join Methods Considered (NL/MS/HA)

     Level 1: 1级比2级更详细,它包含2级的所有内容,在加如下内容:

Parameters used by the optimizer
Index statistics 

1.1启用10053事件:

ALTER SESSION SET EVENTS='10053 trace name context forever, level 1'; ALTER SESSION SET EVENTS='10053 trace name context forever, level 2';

1.2关闭10053事件:

ALTER SESSION SET EVENTS '10053 trace name context off';

说明:

(1)sqlplus中打开autotrace看到的执行计划实际上是用explain plan 命令得到的,explain plan 命令不会进行bind peeking。应该通过v$sql_plan查看SQL的真实的执行计划。

(2)10053只对CBO有效,而且如果一个sql语句已经解析过,就不会产生新的trace信息。

二. 实验10053事件:

1.设定当前的trace 文件

  1.1 设定trace 文件名称

SQL> alter session set tracefile_identifier='10053事件';

会话已更改。

  设置标识的目的就是方便我们查找生成的trace文件。我们只需要在trace目录查找文件名里带有标识的文件即可。

  1.2直接用如下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;
复制代码

2.启动10053事件

SQL> ALTER SESSION SET EVENTS='10053 trace name context forever, level 1';

3.执行事务

SQL> select * from pub_user u, pub_department dept where u.department_id = dept.department_id;

SQL>Explain plan for select * from pub_user u, pub_department dept where u.department_id = dept.department_id;

 4.关闭10053事件

SQL> ALTER SESSION SET EVENTS '10053 trace name context off';

三. 查看生成的trace文件

  在此之前设置了标识,所以直接进入trace目录,找到含有 ‘10053事件’标识的trace 文件。

Trace file D:\oracle\product\10.2.0\admin\dw\udump/10053事件.trc

四、10053事件内容解析 

1.  Predicate Move-Around (PM)(对SQL语句的谓词进行分析、重写,把它改为最符合逻辑的SQL语句)

2.  解释trace文件用到的一些缩写的指标定义

3.  Peeked values of the binds in SQL statement(绑定变量的描述)

4.  Bug Fix Control Environment(一些修复的bug信息)

5.  PARAMETERS WITH DEFAULT VALUES(性能相关的初始化参数)

6.  BASE STATISTICAL INFORMATION(SQL引用对象的基本信息)

7.  CBO计算每个对象单独访问的代价

8.  CBO计算列出两个表关联方式,并计算出每一种关联方式的代价,最终选择最小的cost

五、实验:10053事件的妙用

  在我们写sql时,一条明显可以查询出来数据的语句,为什么我们写完之后却不返回数据?这时,10053可以解答我们的疑问。
  见如下order by 查不出数据实验:

复制代码
---10.2.0.1版本加了order by查不出数据实验 Drop table test1 purge; Drop table test2 purge; create table test1 (id number(20),name varchar2(20)); insert into test1 values (1,'A'); insert into test1 values (2,'A'); insert into test1 values (3,'A'); insert into test1 values (4,'A'); insert into test1 values (5,'B'); insert into test1 values (6,'B'); insert into test1 values (7,'C'); insert into test1 values (8,'C'); insert into test1 values (9,'C'); insert into test1 values (10,'C'); create table test2 (id number(20),name varchar2(20)); insert into test2 values (1,'A'); insert into test2 values (2,'A'); insert into test2 values (3,'A'); insert into test2 values (4,'A'); insert into test2 values (5,'A'); insert into test2 values (6,'A'); insert into test2 values (7,'A'); insert into test2 values (8,'B'); insert into test2 values (9,'C'); insert into test2 values (10,'C');
复制代码
复制代码
SELECT * FROM (SELECT * FROM (SELECT INNER_TABLE.*, ROWNUM OUTER_TABLE_ROWNUM FROM (select test2.* from test2,
                               (SELECT t.id, t.name FROM test1 T WHERE T.id = (SELECT MAX(T1.id) FROM test1 T1 WHERE T.name = T1.name)) test1 where test2.name = test1.name order by test2.name ---加上order by就没有数据   ) INNER_TABLE) WHERE OUTER_TABLE_ROWNUM <= 18) OUTER_TABLE WHERE OUTER_TABLE_ROWNUM > 0;
复制代码
复制代码
SELECT * FROM (SELECT * FROM (SELECT INNER_TABLE.*, ROWNUM OUTER_TABLE_ROWNUM FROM (select test2.* from test2,
                               (SELECT t.id, t.name FROM test T WHERE T.id in (SELECT MAX(T1.id) FROM test T1 group by name)) test1 where test2.name = test1.name order by test2.name) INNER_TABLE) WHERE OUTER_TABLE_ROWNUM <= 18) OUTER_TABLE WHERE OUTER_TABLE_ROWNUM > 0;
复制代码

 

 















<








>






<

<




<

<




























 
 
 
 
    

 

 









<
        

 <<
 <<
 <<
        
 

<





<









 






 
 
 <
 
 
 
 
 
 
 
 
 
 

 

















































<










                        

         

    

                

            






















 






 

                                

        
    
      
   
       
   


                      
 

    








 








































 







        



           















<<







      




         
 












       



 






         



      
 



 

         



        






<







          




        
 












         


        
 






        
       
       
>       






       
      




<<





<















<
<


































             













 















 

         

                                          

                                            

                                          

                           

 

        

                                      

                                              

                                         

                                      

                      

                      

                                 











                

                        

                         

                             

                              

                             

 

 

 






 

  

 




 






 


>

>

<

<

>><<


















 

 

 




                                   

                                      

                                   

                                   

                                  

                            



 








 


 




  


 







 

 



 

                      

    

 

 

  

 

      

   

>              

      

>

>

>

>

>   

                        

                          

                          

                          

                      

                

                      

                  

          

          

          

          

      

      

    

 

    

  

 

  

  

>    

                            

            

>             

                            

                      

>               

>  

>

                   

      >                   

      >                    

      >                     

      >                

      >  

                  

>    

                            

            

>   

>

                            

            

>      

                        

                        

                        

                        

                      

              

                    

                  

      

      

      

      

      

      

>  

  

    

>

>

              

              

            



    
    
    
    
     
   

   
    

     
    
    

    


  

>

>

  

  

  

 

  

>      

>

  

  

  

            

                    

        

  

>   

>

  

  

  

             

                    

        

>

              

              

            

>  

>

              

              

            


  


 


 







 
                  





>                

>  

>      

>

                   

      >                   

      >                    

      >                     

      >                

      >  

                  

>

    

                            

  

  

  

  

>

  

    

>

                        

                            

                    

                        

  


   

  


>                 

>

>    

><   

>               

  

      

>       

>       

>

              

      >

      >

      >

      >

      >

                  

>

                

      >

      >

      >

      >

      >

                  

>    

>   

  

      

>        

>  

      

  

  

          

        

      

        

        

      

    

       

        

        

    

      

              

                    

  

      

  

    

          

        

  

    

          

     

    

        

            

    

          

     

  

    

    

      

                            

      

           

          

         

    

  

            

     

  

             >

            

           

      

  

          

    

           

  

  

              

    

  

    

      

                      

      

           

          

          

    

  

          

     

  

           

      

      

      

  

          

    

      

  

  

              

    

                   

       

  

    

         

    

     

        

      

          

    

  

              

    

    

  

          

      

      

  

    

    

      

      

      

    

               

             

    

   

       

    

    

   

        

    

    

  

            

   

      

          

    

  

        

      

      

  

  

    

    

    

  

        

      

      

  

  

    

    

      

      

  

     

          

          

  

       

    

    

      

     

        

      

      

                      

                                

                                    

                          

                   

               

>

>

                      

                        

                                    

                          

                  

            


>                

>  

>     

>             

  

    

><    

>                       

>>

>    

  

    

>  

  

    

>

             

      >

      >

      >

      >

      >

                  

>   

              

                  

                              

          

>

                          

                          

                                      

              

                    

><   

>  

  

    

>    

>

              

                  

                              

          

>

    

      >

      >

      >

      >

      >

                  

>  

>    

          

>     

>  

    


        
            

    
            



  
    
        
  
        
      
      
  
  
    
  
      

>

                          

                          

                                      

                

                    



        
















  1.      

  2.     

  3.       


  4.  
  5.       
  6.       
  7.   

  8.  >        >   

  9.   

  10.  >     

  11.  

  12.  >        >   

  13.   

  14.  >     

  15.  

  16.  >    















  17.   

  18.  >   
  19.        

  20.  > 
  21.         
  22.       
  23.   
  24.      

  25.     

  26.       


  27.  
  28.       
  29.       
  30.   

  31.  > 

  32.  >     

  33.  

  34.  >        >   

  35.   

  36.  >     

  37.  

  38.  >    















  39.   

  40.  > 
  41.  >   
  42.        


  43.  >  
  44.  >        >   

  45.   




  46.   


  47.               

  48.               
  49.             
  50.                 
  51.              
  52.                 


  53.    


  54.      
  55.      >



  56.        




  57.          
  58.           
  59.           
  60.           
  61.         
  62.           
  63.           
  64.             
  65.            
  66.            
  67.             


  68.  >   
  69.  >        >        





  70.  > 



  71.  > 
  72.  > 
  73.  > 
  74.  > 
  75.         
  76.       
  77.   
  78.      

  79.     

  80.       


  81.  
  82.       
  83.       
  84.   

  85.  > 
  86.  >     

  87.  

  88.  >        >   
  89.     

  90.   

  91.  > 
  92.  

  93.  >    















  94.   

  95.  >   


  96.  >





    


DBA笔试面试讲解
欢迎与我联系

目录
相关文章
|
7月前
|
存储 Oracle NoSQL
Oracle 表空间、数据文件、schema的关系
Oracle 表空间、数据文件、schema的关系
189 2
|
7月前
|
XML Java 数据库连接
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——hibernate的config文件(hibernate.cfg.xml)
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——hibernate的config文件(hibernate.cfg.xml)
|
17天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
【赵渝强老师】Oracle的控制文件与归档日志文件
|
17天前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
17天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的数据文件
在Oracle数据库中,数据库由多个表空间组成,每个表空间包含多个数据文件。数据文件存储实际的数据库数据。查询时,如果内存中没有所需数据,Oracle会从数据文件中读取并加载到内存。可通过SQL语句查看和管理数据文件。附有视频讲解及示例。
|
3月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
打开oracle数据库报错“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。 数据库没有备份,无法通过备份去恢复数据库。用户方联系北亚企安数据恢复中心并提供Oracle_Home目录中的所有文件,急需恢复zxfg用户下的数据。 出现“system01.dbf需要更多的恢复来保持一致性”这个报错的原因可能是控制文件损坏、数据文件损坏,数据文件与控制文件的SCN不一致等。数据库恢复工程师对数据库文件进一步检测、分析后,发现sysaux01.dbf文件损坏,有坏块。 修复并启动数据库后仍然有许多查询报错,export和data pump工具使用报错。从数据库层面无法修复数据库。
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
|
2月前
|
Oracle 关系型数据库 数据库
oracle数据恢复—Oracle数据库文件损坏导致数据库打不开的数据恢复案例
打开oracle数据库时报错,报错信息:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。急需恢复zxfg用户下的数据。 出现上述报错的原因有:控制文件损坏、数据文件损坏、数据文件与控制文件的SCN不一致等。数据恢复工程师对数据库文件做进一步检测分析后发现sysaux01.dbf文件有坏块。修复sysaux01.dbf文件,启动数据库依然有许多查询报错。export和data pump工具无法使用,查询告警日志并分析报错,确认发生上述错误的原因就是sysaux01.dbf文件损坏。由于该文件损坏,从数据库层面无法修复数据库。由于system和用户表空间的数据文件是正常的,
|
6月前
|
SQL Oracle 关系型数据库
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
77 0
|
6月前
|
存储 SQL Oracle
oracle 存储过程导出sql语句 导出为文件
oracle 存储过程导出sql语句 导出为文件
185 0
|
7月前
|
存储 监控 Oracle
Oracle数据文件:数据王国的秘密藏宝图
【4月更文挑战第19天】Oracle数据文件是数据库物理存储的核心,存储实际数据,犹如数据王国的宝藏。它们对数据库性能至关重要,影响数据分布和访问效率。有效管理数据文件涉及合理规划大小、数量,监控使用情况,利用自动扩展功能,并能实现跨磁盘存储和高可靠性。理解数据文件原理有助于优化数据库性能和资源利用,发掘更多数据潜力。