行预取(raw prefecting)和聚簇因子(clustering_factor)

简介: 行预取:每次应用程序请求驱动从数据库返回1条记录的时候,会预取多条记录并将它们存储在客户端的内存中。这样,多个连续的请求就不需要执行数据库的调用来读取数据。
行预取:每次应用程序请求驱动从数据库返回1条记录的时候,会预取多条记录并将它们存储在客户端的内存中。这样,多个连续的请求就不需要执行数据库的调用来读取数据。可以直接从客户端内存中得到他们。结果,到数据库的往返次数随预取记录数量的增加呈比例的降低。因此,检索包含大量记录的结果集的开销会显著的降低;
Oracle数据库引擎只通过一次逻辑读就可以同时获取多行数据,以提高性能。一次行预取读取的行数由arraysize指定。
聚簇因子表明索引中多少相邻的索引键值 指向表中相同的数据块,简单来说,聚簇因子高(即接近于表行数),表示索引键值顺序和行在数据块中的存储顺序很不一样,行预取的作用就不明显;聚簇因子低(即接近于表数据块个数),表示索引键值顺序和行在数据块中的存储顺序很相似,行预取的作用就很明显。
下面做个简单的 实验
--创建一个包含主键的测试表:
SQL>create table t (
2 id number,
3 pad varchar2(4000),
4 constraint t_pk primary key (id)
5 );
--以id升序的顺序插入1000行数据:
SQL>insert into t
2 select rownum as id, dbms_random.string('p',500) as pad
3 from dual
4 connect by level --查看表占用了多少数据块:
SQL>analyze table T compute statistics;
SQL>select blocks,num_rows from user_tables where table_name='T';

BLOCKS NUM_ROWS
---------- ----------
73 1000
--查看索引的聚簇因子:
SQL>select clustering_factor from user_indexes where index_name='T_PK';

CLUSTERING_FACTOR
-----------------
72
可以发现聚簇因子和表的数据块个数相近,说明聚簇因子很低,这种情况非常理想,行预取作用明显,可以有效地降低全索引扫描的逻辑读:
SQL>set autotrace traceonly
SQL>select /*+ index(t t_pk) */ * from t;
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=ALL_ROWS (Cost=75 Card=1000 Bytes=503000)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'T' (TABLE) (Cost=75 Card =1000 Bytes=503000)
2 1 INDEX (FULL SCAN) OF 'T_PK' (INDEX (UNIQUE)) (Cost=3 Card=1000)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
205 consistent gets
0 physical reads
0 redo size
512484 bytes sent via SQL*Net to client
741 bytes received via SQL*Net from client
68 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1000 rows processed
--以id无序的顺序插入
SQL>truncate table t;
SQL>insert into t
2 select rownum as id, dbms_random.string('p',500) as pad
3 from dual
4 connect by level --查看表占用了多少数据块:
SQL>analyze table T compute statistics;
SQL>select blocks,num_rows from user_tables where table_name='T';

BLOCKS NUM_ROWS
---------- ----------
73 1000
--查看索引的聚簇因子:
SQL>select clustering_factor from user_indexes where index_name='T_PK';

CLUSTERING_FACTOR
-----------------
986
可以发现聚簇因子和表的数据行数相近,说明聚簇因子很高,这种情况很不理想,行预取几乎无法发挥作用,逻辑读很高:
SQL>set autotrace traceonly
SQL>select /*+ index(t t_pk) */ * from t;
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=ALL_ROWS (Cost=990 Card=1000 Bytes=503000)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'T' (TABLE) (Cost=990 Card=1000 Bytes=503000)
2 1 INDEX (FULL SCAN) OF 'T_PK' (INDEX (UNIQUE)) (Cost=3 Card=1000)

Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
1056 consistent gets
0 physical reads
0 redo size
512482 bytes sent via SQL*Net to client
741 bytes received via SQL*Net from client
68 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1000 rows processed

====================================
其实可以这么理解聚簇因子:索引键值是有序的,而表却不一定是有序的,聚簇因子用来度量表的有序程度,聚簇因子越低(越接近于数据块个数),表示表的有序程度越高;聚簇因子越高(越接近于表行数),表示表的有序程度越低。

测试的结果表明:行预取的值越大越好,但是系统为什么不默认设置成最大值?
相关文章
|
数据可视化 JavaScript 前端开发
Echarts项目开发:柱状图动态数据可视化排名榜(1)
Echarts项目开发:柱状图动态数据可视化排名榜(1)
677 0
|
SQL 关系型数据库 MySQL
MySQL InnoDB中的锁-临键锁(next-key lock)
MySQL InnoDB 锁 临键锁 next-key lock
2221 0
MySQL InnoDB中的锁-临键锁(next-key lock)
|
12月前
|
人工智能 关系型数据库 双11
2024阿里云双11优惠活动开启,云服务器79元一年起,能领代金券和上云补贴金
2024年阿里云双11优惠活动开启,云服务器低至79元一年起,涵盖云数据库、对象存储OSS、无影云电脑等产品,提供代金券、企业算力补贴及上云扶持金等多项优惠,助您轻松上云。
|
11月前
|
数据可视化 数据挖掘 项目管理
日本企业的团队协作之道:道术结合的核心应用
日本企业如何通过“道术结合”实现团队协作与高效项目管理的卓越表现?
165 1
日本企业的团队协作之道:道术结合的核心应用
|
存储 缓存 算法
高并发架构设计三大利器:缓存、限流和降级
软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。
3598 6
|
关系型数据库 MySQL Linux
Docker容器数据卷技术(实现数据同步)
一、什么是数据卷 数据卷是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux中的mount操作。 数据卷可以提供很多有用的特性,如下所示:
|
NoSQL Go MongoDB
golang下的UUID生成
包括标准的UUID,snowflake,MongoDB ObjectID等等。。
1721 0
|
Ubuntu Unix Linux
被 Docker 日志坑惨了
被 Docker 日志坑惨了
1276 1
|
机器学习/深度学习 安全 区块链
隐私计算顶级赛事iDASH2021揭榜 蚂蚁链摩斯获同态加密、联邦学习两项第一
内部钉钉交流群:摩斯产品应用交流(群号:35544266)摩斯产品官网:https://antchain.antgroup.com/products/morse1月28日,2021年iDASH国际隐私计算竞赛正式公布比赛结果,来自蚂蚁集团的蚂蚁链摩斯团队斩获同态加密、联邦学习两项第一。这是自2014年iDASH举办以来,首次来自中国的参赛队夺得上述赛道第一,蚂蚁链摩斯也成为首支同时拿下两项第一的中
隐私计算顶级赛事iDASH2021揭榜 蚂蚁链摩斯获同态加密、联邦学习两项第一
|
人工智能 大数据 物联网
北京大学肖臻老师《区块链技术与应用》公开课笔记1——课程简介
北京大学肖臻老师《区块链技术与应用》公开课笔记1——课程简介
783 0
北京大学肖臻老师《区块链技术与应用》公开课笔记1——课程简介