欢迎来到天天文库
浏览记录
ID:10526390
大小:50.29 KB
页数:10页
时间:2018-07-07
《greenplum的sql优化方案》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、GreenPlumn的SQL语句查询优化数据库查询预准备1.VACUUM·vacuum只是简单的回收空间且令其可以再次使用,没有请求排它锁,仍旧可以对表读写·vacuumfull执行更广泛的处理,包括跨块移动行,以便把表压缩至使用最少的磁盘块数目存储。相对vacuum要慢,而且会请求排它锁。·定期执行:在日常维护中,需要对数据字典定期执行vacuum,可以每天在数据库空闲的时候进行。然后每隔一段较长时间(两三个月)对系统表执行一次vacuumfull,这个操作需要停机,比较耗时,大表可能耗时几个小时。·reindex:执行vacuum之后
2、,最好对表上的索引进行重建2.ANALYZE·命令:analyze[talbe[(column,..)]]·收集表内容的统计信息,以优化执行计划。如创建索引后,执行此命令,对于随即查询将会利用索引。·自动统计信息收集·在postgresql.conf中有控制自动收集的参数gp_autostats_mode设置,gp_autostats_mode三个值:none、no_change、on_no_stats(默认) onone:禁止收集统计信息oonchange:当一条DML执行后影响的行数超过gp_autostats_on_change_t
3、hreshold参数指定的值时,会执行完这条DML后再自动执行一个analyze的操作来收集表的统计信息。ono_no_stats:当使用createtalbeasselect、insert、copy时,如果在目标表中没有收集过统计信息,那么会自动执行analyze来收集这张表的信息。gp默认使用on_no_stats,对数据库的消耗比较小,但是对于不断变更的表,数据库在第一次收集统计信息之后就不会再收集了。需要人为定时执行analyze.·如果有大量的运行时间在1分钟以下的SQL,你会发现大量的时间消耗在收集统计信息上。为了降低这一部分
4、的消耗,可以指定对某些列不收集统计信息,如下所示:·1.createtabletest(idint,nametext,notetext);上面是已知道表列note不需出现在join列上,也不会出现在where语句的过滤条件下,因为可以把这个列设置为不收集统计信息:1.altertabletestalternoteSETSTATISTICS0;3.EXPLAIN执行计划显示规划器为所提供的语句生成的执行规划。·cost:返回第一行记录前的启动时间,和返回所有记录的总时间(以磁盘页面存取为 单位计量)·rows:根据统计信息估计SQL返回结果
5、集的行数·width:返回的结果集的每一行的长度,这个长度值是根据pg_statistic表中的统计信息 来计算的。4.两种聚合方式·hashaggregate 根据groupby字段后面的值算出hash值,并根据前面使用的聚合函数在内存中维护对应的列表,几个聚合函数就有几个数组。相同数据量的情况下,聚合字段的重复度越小,使用的内存越大。·groupaggregate 先将表中的数据按照groupby的字段排序,在对排好序的数据进行全扫描,并进行聚合函数计算。消耗内存基本是恒定的。·选择 在SQL中有大量的聚合函数,groupby的字段重
6、复值比较少的时候,应该用groupaggregate5.关联分为三类:hashjoin、nestloopjoin、mergejoin,在保证sql执行正确的前提下,规划器优先采用hashjoin。·hashjoin:先对其中一张关联的表计算hash值,在内存中用一个散列表保存,然后对另外一张表进行全表扫描,之后将每一行与这个散列表进行关联。·nestedloop:关联的两张表中的数据量比较小的表进行广播,如笛卡尔积:select*fromtest1,test2·mergejoin:将两张表按照关联键进行排序,然后按照归并排序的方式将数据进
7、行关联,效率比hashjoin差。fullouterjoin只能采用mergejoin来实现。·关联的广播与重分布解析P133,一般规划器会自动选择最优执行计划。·有时会导致重分布和广播,比较耗时的操作6.重分布一些sql查询中,需要数据在各节点重新分布,受制于网络传输、磁盘I/O,重分布的速度比较慢。·关联键强制类型转换 一般,表按照指定的分布键作hash分部。如果两个表按照id:intege、id:numericr分布,关联时,需要有一个表id作强制类型转化,因为不同类型的hash值不一样,因而导致数据重分布。·关联键与分部键不一致·
8、groupby、开窗函数、groupingsets会引发重分布查询优化通过explain观察执行计划,从而确定如果优化SQL。1.explain参数显示规划器为所提供的语句生成的执行规划。·c
此文档下载收益归作者所有