开发者社区> 问答> 正文

如何在不同操作场景下使用云数据库 HybridDB for PostgreSQL

云数据库 HybridDB for PostgreSQL 是一种在线分布式云数据库,它基于 Greenplum Database 开源数据库项目开发,经阿里云深度扩展,由多个 计算组 组成,提供大规模并行处理(MPP)数据仓库服务。
本文介绍在不同操作场景下使用云数据库 HybridDB for PostgreSQL 时的一些具体建议。选择合适的操作实践将有效地帮助您提高 HybridDB for PostgreSQL 的性能、减少存储成本等。

使用列存加压缩


对于更新不频繁、字段较多的表,如果想提高性能、提高导入速度或者降低成本,建议使用列存加压缩。这样在保证性能的基础上,压缩比率一般可以达到 3 倍以上,而且通常导入速度更快。
例如,在建表语句中加入子句 WITH (APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zlib, COMPRESSLEVEL=3, BLOCKSIZE=1048576),即可创建列存压缩表。
具体语法参见文档 CREATE TABLE

启用 Nested Loop


在实例缺省状态下,HybridDB for PostgreSQL 没有启用 Nested Loop(嵌套连接)。对于只涉及或返回少部分数据的查询,性能可能不是最优的。
例如下面的 SQL 语句: select * from T1 join T2 on T1.c1 = T2.c1 where T1.c2 >= '230769548' and T1.c2 < '230769549' limit 100;

其特点是 T1 和 T2 表都比较大,T1 上的选择条件(T1.c2 >= '230769548' and T1.c2 < '23432442')过滤了绝大多数数据记录,且有 LIMIT 子句,所以查询实际上只涉及总数据量中的一小部分。这种情况下,使用 Nested Loop 的连接方式是最优的。
要使用 Nested Loop 连接,需要执行一下 SET 命令,如下所示: ```
show enable_nestloop ;
enable_nestloop
-----------------
off
SET enable_nestloop = on ;
show enable_nestloop ;
enable_nestloop
-----------------
on
explain select * from T1 join T2 on T1.c1 = T2.c1 where T1.c2 >= '230769548' and T1.c2 < '23432442' limit 100;
                                            QUERY PLAN
-----------------------------------------------------------------------------------------------
Limit  (cost=0.26..16.31 rows=1 width=18608)
   ->  Nested Loop  (cost=0.26..16.31 rows=1 width=18608)
         ->  Index Scan using T1 on c2  (cost=0.12..8.14 rows=1 width=12026)
               Filter: ((c2 >= '230769548'::bpchar) AND (c2 < '230769549'::bpchar))
         ->  Index Scan using T2 on c1  (cost=0.14..8.15 rows=1 width=6582)
               Index Cond: ((c1)::text = (T1.c1)::text)
```


可以发现,T1 和 T2 两张表是使用 Nested Loop 连接的,从而获得了最优的性能。

使用 ORCA 优化器


HybridDB for PostgreSQL 支持 ORCA 优化器。当执行一个较复杂的 SQL,并且发现性能不理想时,可以试试启用 ORCA 优化器进行优化。在数据库连接中,执行如下 SET 命令,即可启用 ORCA。
[backcolor=transparent]注意:SET 命令作用在连接级别,只在同一连接内有效,对于新的连接需要重新执行 SET,来启用 ORCA。 EXPLAIN <SQL text>
SET optimizer = on;
EXPLAIN <SQL text>


在上面的例子中,我们在启用 ORCA 前后,分别使用 EXPLAIN 命令来查看查询计划。这样可以检查 ORCA 是否真正改变了 SQL 的查询计划。

使用压缩


目前, HybridDB for PostgreSQL 的存储支持两种压缩方式:zlib 和 RLE。

  • RLE 适用于数据中的相同值在物理上是连续存储的情况。
  • zlib 适用于其他情况。压缩方式可以在字段级别或表级别指定。

详情请参见文档 CREATE TABLE

使用其他数字类型


如果查询中包含 COUNT(DISTINCT) 的唯一值统计操作,建议被统计的字段不要使用字符串类型,也不要使用 Numeric 类型,尽量采用其他数字类型(例如整型)代替,这样可以将性能提高数倍。

展开
收起
云栖大讲堂 2017-11-01 11:42:50 1922 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
PostgreSQL 物联网六脉神剑 立即下载
PostgreSQL在哈啰的实践-周飞 立即下载
PostgreSQL高并发数据库应用数据 立即下载