0
postgresql 中测试VM对INDEX ONLY SCAN的影响
464
6页
13次
墨值0
云和恩墨 成就所托 www.enmotech.com
实力成就稳健 技术创造价值
- 1 -
postgresql 中测试 VM INDEX ONLY SCAN
的影响
1. 概述
使用过 ORACLE 的都知道, SQL 查询的字段、条件字段都在 INDEX 中可以找到时,SQL
执行过程可以不用回表,大大提高查询效率。
postgresql 中也有这样的机制,但有所不同。
由于 postgresql index 中不保存事物信息,因此 postgresql 中的仅仅通过 INDEX 不能判断数据可
见性。
postgresql 中的 INDEX ONLY SCAN,扫描的 index tuple 需要通过 VM 去判断可见性,当
发现扫描的 tuple 所在的 heap block dead tuple 时,需要回表扫描来判断事务可见性。 INDEX
ONLY SCAN 并不是仅仅字面上的只通过 INDEX 查找数据。
VM
是用
BIT
位标识
page
中是否有
dead tuple
的,占用空间小,判断可见性时效率还是很高的。
2. 实验记录
--查看优化器参
test=# prepare p(varchar(20)) as select name,setting,reset_val from pg_settings where name like
'%'||$1||'%';
PREPARE
test=# execute p('scan');
name | setting | reset_val
------------------------------+---------+-----------
enable_bitmapscan | on | on
enable_indexonlyscan | on | on
enable_indexscan | on | on
云和恩墨 成就所托 www.enmotech.com
实力成就稳健 技术创造价值
- 2 -
enable_seqscan | on | on
enable_tidscan | on | on
min_parallel_index_scan_size | 64 | 64
min_parallel_table_scan_size | 1024 | 1024
synchronize_seqscans | on | on
(8 rows)
test=# create extension pageinspect;
CREATE EXTENSION
--造测试数据
create table tab4 (id int,s varchar(100));
create index idx_tab4 on tab4(id);
insert into tab4 select generate_series,'a' from generate_series(1,400);
--查看每个页面上的数据范围
select substring(ctid::text from '\(([0-9]+),[0-9]+\)')as page,min(id),max(id) from tab4 group by
substring(ctid::text from '\(([0-9]+),[0-9]+\)');
page | min | max
------+-----+-----
0 | 1 | 226
1 | 227 | 400
test=# select *from get_raw_page('tab4','vm',0) ;
ERROR: could not open file "base/16447/54036_vm": No such file or directory
vacuum tab4;
--查看 vm raw 数据
select substr(get_raw_page,1,100) from get_raw_page('tab4','vm',0) ;
of 6
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜
近期活动
全部
暂无活动,敬请期待...
相关课程
全部