全部产品
阿里云办公

提高使用性能

更新时间:2018-07-18 14:54:14

云数据库 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 语句:

  1. 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 命令,如下所示:

  1. ```
  2. show enable_nestloop ;
  3. enable_nestloop
  4. -----------------
  5. off
  6. SET enable_nestloop = on ;
  7. show enable_nestloop ;
  8. enable_nestloop
  9. -----------------
  10. on
  11. explain select * from T1 join T2 on T1.c1 = T2.c1 where T1.c2 >= '230769548' and T1.c2 < '23432442' limit 100;
  12. QUERY PLAN
  13. -----------------------------------------------------------------------------------------------
  14. Limit (cost=0.26..16.31 rows=1 width=18608)
  15. -> Nested Loop (cost=0.26..16.31 rows=1 width=18608)
  16. -> Index Scan using T1 on c2 (cost=0.12..8.14 rows=1 width=12026)
  17. Filter: ((c2 >= '230769548'::bpchar) AND (c2 < '230769549'::bpchar))
  18. -> Index Scan using T2 on c1 (cost=0.14..8.15 rows=1 width=6582)
  19. Index Cond: ((c1)::text = (T1.c1)::text)
  20. ```

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

使用 ORCA 优化器

HybridDB for PostgreSQL 支持 ORCA 优化器。当执行一个较复杂的 SQL,并且发现性能不理想时,可以试试启用 ORCA 优化器进行优化。在数据库连接中,执行如下 SET 命令,即可启用 ORCA。

注意:SET 命令作用在连接级别,只在同一连接内有效,对于新的连接需要重新执行 SET,来启用 ORCA。

  1. EXPLAIN <SQL text>
  2. SET optimizer = on;
  3. EXPLAIN <SQL text>

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

使用压缩

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

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

详情请参见文档 CREATE TABLE

使用其他数字类型

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

本文导读目录