阅读905 返回首页    go 微信


性能压测注意事项__快速入门_云数据库 HybridDB-阿里云

云数据库HybridDB(ApsaraDB HybridDB)是一种在线MPP大规模并行处理数据仓库服务。云数据库HybridDB基于Greenplum Database开源数据库项目,并由阿里云深度扩展支持OSS存储、JSON数据类型、HyperLogLog预估分析等功能特性。

性能方面注意事项

使用 云数据库HybridDB 时,在性能方面需要注意以下事项:

1) 云数据库HybridDB 实例缺省状态下,没有启用 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. show enable_nestloop ;
  2. enable_nestloop
  3. -----------------
  4. off
  5. SET enable_nestloop = on ;
  6. show enable_nestloop ;
  7. enable_nestloop
  8. -----------------
  9. on
  10. explain select * from T1 join T2 on T1.c1 = T2.c1 where T1.c2 >= '230769548' and T1.c2 < '23432442' limit 100;
  11. QUERY PLAN
  12. -----------------------------------------------------------------------------------------------
  13. Limit (cost=0.26..16.31 rows=1 width=18608)
  14. -> Nested Loop (cost=0.26..16.31 rows=1 width=18608)
  15. -> Index Scan using T1 on c2 (cost=0.12..8.14 rows=1 width=12026)
  16. Filter: ((c2 >= '230769548'::bpchar) AND (c2 < '230769549'::bpchar))
  17. -> Index Scan using T2 on c1 (cost=0.14..8.15 rows=1 width=6582)
  18. Index Cond: ((c1)::text = (T1.c1)::text)

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

2)云数据库HybridDB 支持 ORCA 优化器。当执行一个较复杂的 SQL,并且发现性能不理想时,可以试试启用ORCA优化器进行优化。在数据库连接中,执行一个SET命令,即可启用ORCA(如下所示)。注意,SET命令作用在连接级别,只在同一连接内有效,对于新的连接需要重新执行SET,来启用ORCA。

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

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

3)目前 云数据库HybridDB 的存储支持两种压缩方式:zlib和RLE。RLE适用于数据中的相同值在物理上是连续存储的情况,zlib适用于其他情况。压缩方式可以在字段级别或表级别指定。具体参见文档

最后更新:2016-12-01 11:11:36

  上一篇:go 通过COPY数据导入__快速入门_云数据库 HybridDB-阿里云
  下一篇:go 客户端工具使用__快速入门_云数据库 HybridDB-阿里云