您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

consistent gets在Oracle使用特例

2025/11/30 11:13:13发布33次查看
oracle数据库中,consistent gets在判断一段sql的性能时非常有用,通常来讲比较两段sql的性能好坏不是看谁的执行时间短,而是看谁
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相同并不代表执行效率完全相同)
更多oracle相关信息见oracle 专题页面 ?tid=12
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product