oracle学习----访问路径
什么是访问路径?表扫描数据的时候使用了什么方式,这个方式就是访问路径
1.全表扫描
TABLE ACCESS FULL 全表扫描,多块读,等待事件:db file scattered read
如果是并行全表扫描,等待事件: direct path read
11g 有个新特征,在进行全表扫描的时候也会产生 direct path read
在OLTP环境中要通过 10949 event 禁止该新特征
在OLAP环境中可以不用禁止
如果表上面有大量的行迁链接,会是单块读 等待事件表现为db file sequential read
如果表上面发生了一个大事物,全表扫描会从UNDO读取前镜像,也会是单块读
HINT: FULL(表名/别名)
等待事件:db file scattered read 在SGA中
等待事件:direct path read 在PGA中
禁用oracle11g的新特性,有两种方法
a.event 10949设置后,可以禁用direct path read。
开启
SQL> ALTER session SET EVENTS '10949 TRACE NAME CONTEXT FOREVER';
禁用
SQL> ALTER session SET EVENTS '10949 TRACE NAME CONTEXT off';
b.通过设置隐含参数_serial_direct_read来设置是否启用direct path read
禁用
SQL>alter session set "_serial_direct_read"=never;
开启(默认)
SQL> alter session set "_serial_direct_read"=auto;
2.索引唯一扫描
INDEX UNIQUE SCAN 索引唯一扫描。单块读 只可能发生在unique index/primary key 等值查找
等待事件:db file sequential read 但是你几乎看不到,因为只读一条数据
HINT 无需指定,有索引会自动走INDEX UNIQUE SCAN
索引唯一扫描在不回表的时候访问几个索引块?
索引高度这么多个块。
select * from t where id=10;返回一行数据,要扫描多少个块?
索引高度+1(在不发生行迁移连接的情况下)
索引高度+2(发生行迁移连接的情况)
3.索引范围扫描
INDEX RANGE SCAN 索引范围扫描。单块读 发生在对unique index/primary key 进行范围查找,
对non-unique index进行等值查找,范围查找
等待事件:db file sequential read 如果你监控某个SQL出现大量该等待事件,
有可能执行计划就有问题
HINT: INDEX(表名/别名 索引名)
在索引唯一扫描中很难捕获等待事件,因为只返回一条数据,单块读的时间为12ms,索引唯一扫描扫描索引高度这么多个块,返回一条数据
的时间小于1s,1s这个阈值是记录等待时间的要求,所以不会记录等待事件,这个阈值是ash的响应时间,什么是ash呢?
ASH以V$SESSION为基础,每秒采样一次,记录活动会话等待的事件。不活动的会话不会采样,采样工作由新引入的后台进程MMNL来完成。
那么在索引范围扫描中怎么能看见db file sequential read等待事件呢?
12ms*100等于1.2s超过了ash的阈值,就可以记录等待事件
100单块读,每个块包含1000条数据,就是10w条数据,也就是说通过索引范围扫描返回超过10w条数据时就会出现等待时间。
监控一个sql的等待事件
select (sysdate-logon_time)*24*60 minutes,username,machine,program,action,
status,inst_id,sid,serial#,event,p1,p2,p3,
row_wait_obj# obj#,row_wait_file# file#,row_wait_block# block#,sql_id,sql_child_number from gv$session where sql_id='XXX';
4.索引跳跃扫描
INDEX SKIP SCAN 索引跳跃扫描。单块读 只可能发生在组合索引上,引导列(组合索引第一列)没有包
含在where条件中,并且引导列基数很低。INDEX SKIP SCAN
一般来说只会返回少量数据,如果返回大量数据,说明该执
行计划可能有问题,也就是说索引建立不对。
等待事件:db file sequential read
HINT: INDEX_SS(表名/别名 索引名)
5.索引全扫描
INDEX FULL SCAN 索引全扫描。单块读 。它扫描的结果是有序的,因为索引是有序的。它通常发生在
下面几种情况(注意:即使SQL满足以下情况 不一定会走索引全扫描)
a. SQL语句有order by选项,并且order by 的列都包含
在索引中,并且order by 后列顺序必须和索引列顺序一致。
b. 在进行SORT MERGE JOIN的时候,如果要查询的列通过索
引就能获得,那就不必进行全表扫描了,另外也避免了排
序,因为INDEX FULL SCAN返回的结果已经排序。
c. 当查询中有GROUP BY,并且GROUP BY 的列包含在索引中。
等待事件:db file sequential read
HINT: INDEX(表名/别名 索引名)
索引全表扫描会扫描blevel+leaf个块
6.索引快速扫描
INDEX FAST FULL SCAN 索引快速全扫描。多块读 。当SQL要查询的数据能够完全从索引中获得,那么
Oracle就不会走全表扫描了,就会走索引快速全
扫描。索引快速全扫描类似全表扫描,它可以多块
读,并且可以并行扫描。
等待事件:db file scattered read
HINT:INDEX_FFS(表名/别名 索引名)
oracle学习----访问路径的更多相关文章
- ORACLE Index Lookup索引访问路径总结
在ORACLE中,索引访问/查找(Index Lookup)路径有五种方式,分别为INDEX UNIQUE SCAN.INDEX RANGE SCAN.INDEX FULL SCAN.INDEX FA ...
- oracle 网络访问配置tnsnames.ora文件的路径
转自:https://blog.csdn.net/jaray/article/details/22379811 oracle 网络访问配置tnsnames.ora文件的路径 oracle 9i 是: ...
- struts2学习二:Tomcat的部署目录和访问路径问题
1:idea中配置tomcat后,那么最终的web工程发布到哪里去了?为什么在访问路径中不加工程名就可以访问? 1.1:因为tomcat有段时间没接触了,先回顾下tomcat的目录结构吧? 如图所示: ...
- day10(java web之request&respone&访问路径&编码问题)
day10 请求响应流程图 response response概述 response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletR ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- Oracle数据访问组件ODAC的安装方法
Oracle数据访问组件ODAC(Oracle Data Access Components)顾名思义就是用来访问Oracle数据库的小程序.我们可以编程调用这些组件来实现在没有安装Oracle数据库 ...
- Oracle数据访问组件ODAC的安装方法:
Oracle数据访问组件ODAC(Oracle Data Access Components)顾名思义就是用来访问Oracle数据库的小程序.我们可以编程调用这些组件来实现在没有安装Oracle数据库 ...
- Oracle学习指南
Oracle学习指南 你走的那天,我决定不落泪,迎着风撑着眼帘用力不眨眼 创建数据库.创建用户.创建表空间.创建表.插入数据..... 1.用系统用户登录,任选系统用户 代码: >>sql ...
- Oracle学习系列1-7
Oracle学习系列1 两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 3 ...
随机推荐
- 《鸟哥的Linux私房菜》读书笔记一
1.CPU为一个具有特定功能的芯片,里面含有微指令集,一个CPU又可以分为两个主要的单元:算术逻辑单元和控制单元.CPU读取的数据都是从内存读取来的,内存内的数据是从输入单元传输来的.CPU处理完也要 ...
- 17.1.4 Replication and Binary Logging Options and Variables 复制和Binary logging 选项和变量
17.1.4 Replication and Binary Logging Options and Variables 复制和Binary logging 选项和变量 下面的章节包含信息关于mysql ...
- git tag的使用
查看所有的标签git tag 删除某一个标签git tag -d tagName 创建带注释的标签 git tag -a tagName -m "annotate" 轻量级标签 g ...
- Beta Round #9 (酱油杯noi考后欢乐赛)PLQ的寻宝
题目:http://www.contesthunter.org/contest/Beta%20Round%20%EF%BC%839%20%28%E9%85%B1%E6%B2%B9%E6%9D%AFno ...
- java中计时器的用法Timer和TimerTask的用法__java中利用Timer与TImerTask 计时器间隔执行任务
经常我们都会有这样的需求,要固定的每隔一段时间执行某一个任务.比如: 我们做一个缓存来减少与数据库的交互,而为了使缓存与数据库中的数据尽量达到同步,需要每个固定的一段时间去数据库中的数 ...
- poj 2586 Y2K Accounting Bug
http://poj.org/problem?id=2586 大意是一个公司在12个月中,或固定盈余s,或固定亏损d. 但记不得哪些月盈余,哪些月亏损,只能记得连续5个月的代数和总是亏损(<0为 ...
- 提高IIS的并发量
IIS 7.0使用的是默认配置,服务器最多只能处理5000个同时请求. 根据相关文档调整设置,可以让服务器从设置上支持10万个同时请求 . 调整IIS 7应用程序池队列长度 由原来的默认1000改为6 ...
- JavaScript高级程序设计37.pdf
用DOM范围实现简单选择 selectNode()和selectNodeContents()它们都接收一个DOM节点参数,然后使用该节点中的信息来填充范围,其中selectNode()方法选择整个节点 ...
- php class中public,private,protected的区别,以及实例
一,public,private,protected的区别 public:权限是最大的,可以内部调用,实例调用等. protected: 受保护类型,用于本类和继承类调用. private: 私有类型 ...
- C语言snprintf函数
int snprintf(char *restrict buf, size_t n, const char * restrict format, ...); 函数说明:最多从源串中拷贝n-1个字符到 ...