Oracle数据库中,consistent gets在判断一段SQL的性能时非常有用,通常来讲比较两段SQL的性能好坏不是看谁的执行时间短,而是看谁的consistent gets小。不过这也不是绝对的,下面这个例子就是一个反例。
一:通常情况下,不在logical RAM buffer中的数据要通过physical reads来读取,而physical reads后通常会紧跟着一个consistent gets.因此一般情况下consistent gets是要比physical reads大的。但是有一个特例,如果physical reads得到的数据直接用于HASH或者SORT,则只记为physical reads不记为consistent gets.所以加上order by后有可能physical reads多但consistent gets少。不过这个原因不是我这里现象产生的原因,因为我这个实验里根本没有physical reads.
二:arraysize的影响。arraysize是指读取数据时一次读取得到的行数。这个值默认为15,使用show arraysize命令可以查看。一个数据块例如有100条记录,那么并不是读取这个块一次就能取到所有数据,以arraysize=15为例,就要有 100/15=7次consistent gets.把arraysize设置得大一点可以降低consistent gets,不过有时候可能会消耗更多的资源。如果我们做select count(0) from test;操作,那么Oracle DBA会把arraysize暂时设为test的行数,因此consistent gets会很少:
代码如下:
ETL@RACTEST> select count(0) from test; Elapsed: 00:00:00.00 Execution Plan Plan hash value: 1950795681 --------------
| Id | Operation
| Name | Rows | Cost (%CPU)| Time
| | 0 | SELECT STATEMENT |
| 1 |
6 (0)| 00:00:01 | | 1 | SORT AGGREGATE |
| 1 |
| |
| 2 | TABLE ACCESS FULL| TEST | 10000 |
6 (0)| 00:00:01 | ------------------------------------------------------------------- Note
- dynamic sampling used for this statement Statistics
0 recursive calls
0 db block gets
23 consistent gets
0 physical reads
0 redo size
515 bytes sent via SQL*Net to client
465 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
可以看到select count(0)只需要23个逻辑读。一共10000条数据,10000/15=666.667 ,好,667+23=690!和第1个SQL的consistent gets竟然惊人的一致!这不是巧合,这就是consistent gets的计算公式。我们还可以发现select count(0)和第2个SQL的consistent gets竟然也惊人地一致,都是23!
TOM的解释是:
在select * from test order by 1;时,Oracle也把arraysize临时设为test表的行数,它把所有数据先全部取出来放到sort区做排序,而在sort区的读取就不算在 consistent gets里了。所以虽然第2个SQL和select count(0)的consistent gets相同,但它的效率一定比select count(0)低,我们看执行计划里的COST便可以得知,第2个SQL的COST为7,select count(0)的COST为6,第1个SQL的COST也为6.(COST相同并不代表执行效率完全相同)

转载于:https://blog.51cto.com/19880614/858238

consistent gets在Oracle使用特例相关推荐

  1. oracle consistent gets,consistent gets在Oracle使用特例

    Oracle数据库中,consistent gets在判断一段SQL的性能时非常有用,通常来讲比较两段SQL的性能好坏不是看谁的执行时间短,而是看谁的consistent gets小.不过这也不是绝对 ...

  2. oracle consistent gets,consistentgets在Oracle使用特例

    Oracle数据库中,consistent gets在判断一段SQL的性能时非常有用,通常来讲比较两段SQL的性能好坏不是看谁的执行时间短,而是看谁 Oracle数据库中,consistent get ...

  3. java开发经典文章

    2006-02-25 缩略显示 换个角度思考:div+css布局入门 换个角度思考:div+css布局入门(转载) 你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习 ...

  4. 设置UTL_FILE_DIR参数 使得数据库使用OS文件

    设置UTL_FILE_DIR参数 2008年03月13日 星期四 16:31 第一步:以管理员用户登陆       如:conn    sys/password@sid    as    sysdba ...

  5. mysql 归档日志恢复_Oracle丢失归档日志文件的数据库恢复方法

    使用案例描述:ORDTAB表空间的一个数据文件ordtab03.dbf毁坏,其包含很多ORDERS表的分区,数据文件热备于July 4, 2004,July 4 丢失归档日志文件的数据库恢复方法,从一 ...

  6. 执行计划中的参数解释

    执行计划中的各个参数解释: 一.Recursive calls (递归调用) 1.参考:Oracle Database Reference, 10g Release 2 (10.2).pdf第916页 ...

  7. oracle9i 全库备份,Windows下Oracle9i数据库文件如何自动备份?

    第一步: 在D盘根目录下新建文件夹Backup,这个目录可以任意,复制exp.exe文件到这个目录下,在该目录下新建文件expbkup.batexp test/test@test file=d:\ba ...

  8. oracle consistent gets,Oracle数据库consistent gets使用的特例

    Oracle数据库中,consistent gets在判断一段SQL的性能时非常有用,通常来讲比较两段SQL的性能好坏不是看谁的执行时间短,而是看谁的consistent gets小.不过这也不是绝对 ...

  9. Oracle一致性读(Consistent Read)的原理

    在Oracle数据库中,undo主要有三大作用: 提供一致性读(Consistent Read).回滚事务(Rollback Transaction)以及实例恢复(Instance Recovery) ...

最新文章

  1. python中的列表生成式_Python中的列表生成式
  2. 全球厂商已向自动驾驶投入800亿美元 依然群龙无首 | 厚势
  3. linux c 解析生成json(jansson安装和使用)
  4. 7.pip工具的使用
  5. 【LeetCode从零单排】No104 Maximum Depth of Binary Tree
  6. 挪车+php,还在苦苦寻找占你车位的人?关注这个微信号实现“一键挪车”
  7. [js] flash如何与js交互?
  8. springboot 2.x tomcat war包部署 localhost-startStop-1 启动卡顿卡死
  9. php echo输出两个变量,php实现关于var_dump和echo输出多变量的测试
  10. 装完金蝶电脑无限重启_金蝶财务软件快捷键大全,提高工作效率!
  11. 随想录(三言两语app)
  12. 安装配置nagios
  13. 20200708每日一句
  14. 解决Win10系统使用暴风激活导致的劫持浏览器主页问题
  15. 澳洲java待遇_2018年澳洲IT薪资一览,最新IT薪水Salary,给学IT的同学打一针鸡血...
  16. 5064. 友好城市
  17. Sails基础之View层
  18. Kaggle实战之 房价预测案例
  19. XP下解决暗黑2全屏模式花屏问题
  20. 一步一步实现中后台管理平台模板-08-登录页和用户信息保存

热门文章

  1. 怎么将算法改成程序_多肉烂根怎么办?将土培改成水培,长势好,叶子变得更水灵...
  2. 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | DexFile 构造函数及相关调用函数 | Android 源码中查找 native 函数 )
  3. 【Android 逆向】x86 汇编 ( push / pop 入栈 / 出栈 指令 | ret / retn 函数调用返回指令 | set 设置目标值指令 )
  4. 【Java 虚拟机原理】栈帧 | 动态链接 | 方法区 | 字节码文件二进制分析
  5. 【错误记录】Android 编译时技术报错 ( 注解处理器 process 方法多次调用问题 )
  6. 【Flutter】Hero 动画 ( Hero 实现径向动画 | Hero 组件 createRectTween 设置 )
  7. 【Android 安全】DEX 加密 ( 支持多 DEX 的 Android 工程结构 )
  8. 【Android 性能优化】布局渲染优化 ( CPU 渲染优化 | 减少布局的嵌套 | 测量布局绘制时间 | OnFrameMetricsAvailableListener | 布局渲染优化总结 )
  9. python3.6+RF环境搭建
  10. [Spring cloud 一步步实现广告系统] 12. 广告索引介绍