admin 管理员组文章数量: 1184232
2024年4月14日发(作者:discuz邀请码)
GreenPlumn的SQL语句查询优化
数据库查询预准备
1. VACUUM
•
vacuum只是简单的回收空间且令其可以再次使用,没有请求排它锁,仍旧可以对
表读写
•
vacuum full执行更广泛的处理,包括跨块移动行,以便把表压缩至使用最少的磁
盘块数目存储。相对vacuum要慢,而且会请求排它锁。
•
定期执行:在日常维护中,需要对数据字典定期执行vacuum,可以每天在数据库
空闲的时候进行。然后每隔一段较长时间(两三个月)对系统表执行一次vacuum full,
这个操作需要停机,比较耗时,大表可能耗时几个小时。
•
reindex:执行vacuum之后,最好对表上的索引进行重建
2. ANALYZE
•
•
命令:analyze [talbe [(column,..)]]
收集表内容的统计信息,以优化执行计划。如创建索引后,执行此命令,对于随即
查询将会利用索引。
•
•
自动统计信息收集
在中有控制自动收集的参数gp_autostats_mode设置,
gp_autostats_mode三个值:none、no_change、on_no_stats(默认)
o
none:禁止收集统计信息
o
on change:当一条DML执行后影响的行数超过
gp_autostats_on_change_threshold参数指定的值时,会执行完这条
DML后再自动执行一个analyze 的操作来收集表的统计信息。
o
no_no_stats:当使用create talbe as select 、insert 、copy时,如果在
目标表中没有收集过统计信息,那么会自动执行analyze 来收集这张表的
信息。gp默认使用on_no_stats,对数据库的消耗比较小,但是对于不断
变更的表,数据库在第一次收集统计信息之后就不会再收集了。需要人为定
时执行analyze.
•
如果有大量的运行时间在1分钟以下的SQL,你会发现大量的时间消耗在收集统计
信息上。为了降低这一部分的消耗,可以指定对某些列不收集统计信息,如下所示:
•
1. create table test(id int, name text,note text);
上面是已知道表列note不需出现在join列上,也不会出现在where语句的过滤条
件下,因为可以把这个列设置为不收集统计信息:
1. alter table test alter note SET STATISTICS 0;
3. EXPLAIN执行计划
显示规划器为所提供的语句生成的执行规划。
cost:返回第一行记录前的启动时间, 和返回所有记录的总时间(以磁盘页面存取
为
单位计量)
•
•
•
rows:根据统计信息估计SQL返回结果集的行数
width:返回的结果集的每一行的长度,这个长度值是根据pg_statistic表中的统计
信息
来计算的。
版权声明:本文标题:GreenPlum的SQL优化方案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1713082052a618950.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论