0
点赞
收藏
分享

微信扫一扫

查询sql效率问题方案记录

查询sql效率问题方案记录


解决方案:sql内加入并行


/*+parallel(table_name, DOP)*/

select /*+parallel(t1,4)*/ * from t1;


排查记录:

1.使用sqlhc(数据库健康)脚本

使用方法

START sqlhc.sql T djkbyr8vkc64h


2.使用10053 trace跟踪

查看当前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语句已经解析过,执行计划已经缓存到数据库的共享池内,则需要使用下面的命令刷新一下共享池

SQL> alter system flush shared_pool;  

#####不建议执行

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


执行sql


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



相关资料:


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



3.10046事件   ###10046 SQL(执行计划)运行地如何, 10053 优化器SQL选择某个执行计划的原因


SQL>  alter session set events '10046 trace name context forever,level 12';

执行语句

alter session set events '10046 trace name context off';

SQL> select * from v$diag_info;

字段 Default Trace File

定位生成文件

select distinct(m.sid),p.pid,p.tracefile from v$mystat m,v$session s,v$process p where m.sid=s.sid and s.paddr=p.addr;



4.set autotrace on/off

查看执行计划


5.空闲块dba_tab_statistics


6.filesystemio_options

相关资料:

filesystemio_options 控制着操作系统io的设置。该参数只作用于文件系统。它有四个值可供设置,分别是:{none | setall | directIO | asynch }

I/O 说明

说明

在Synchronous I/O 的机制下,若一个Oracle进程想调用一个I/O请求,那么必须等待其他请求完成后才能调用。例如,如果它发起对几个数据块的读取,那么进程就必须等待它把所有数据块都读取到内存之后,才能进行下一个动作。


说明

在Asynchronous I/O 的机制下,进程可以与I/O请求同时工作。对已经读取的数据块,可以直接进行处理,不用等待所有数据块全部加载完毕再处理。


说明

在buffer I/O机制下,操作系统有自己的一套用于维护磁盘数据的cache,而不是直接从process buffer读取或者写入。其原理是从磁盘中读取数据写入cache,然后拷贝至process buffer。或者从process buffer中拷贝至cache然后写入到磁盘中。


说明

Direct I/O 能让所有的读和写的请求直接来自于磁盘,绕过操作系统缓存。


在ASM磁盘管理下,为了防止集群管理的数据库的数据损坏,必须直接使用Direct I/O。


对于使用文件系统的数据库环境,Oracle发出的读取请求可以从OS缓冲区中得到满足,而一旦启用direct I/O又不增加SGA大小,将导致磁盘读取需要更多的时间才能完成。为了充分利用direct I/O,需要将用于OS缓存部分增加到数据库SGA中。


7.oradebug

其他文章


8.sgastat查看共享池占用

SELECT name, bytes FROM v$sgastat WHERE pool='shared pool' order by 2;  


9.收集统计信息

其他文章


10.查看对应的等待事件

col wait_class for a20

set lines 200 pages 200

col event for a60

select event,count(*),wait_class from v$session_wait group by event,wait_class order by 3;


举报

相关推荐

0 条评论