Trafodion/EsgynDB 性能优化求生指南

I. 建表

A. 主键/聚集键
Trafodion表按主键排序,若查询经常按某个字段做WHERE过滤,适合将此字段放置于主键/聚集键
注意事项:
(1) 主键字段长度应尽量短,如VARCHAR(100)字段就不适合放在主键
(2) 除非必须存储中文,否则对于字符类型,尽量用CHAR/VARCHAR(n BYTES),而非CHAR/VARCAHR(n CHARS) CHARACTER SET UTF8,因为会占用4X空间
(3) 若主键包含多个字段,为使MDAM更高效,将UEC低的字段放在前面
(4) 默认情况下,主键中的字段都应该非空,如果希望往主键字段插入空值,可以使用cqd ALLOW_NULLABLE_UNIQUE_KEY_CONSTRAINT ‘ON’实现
B. 分区
Trafodion建表时可以通过SALT USING N PARTITIONS语法对表进行预分区,适当的分区可以实现表数据的均衡分布、查询性能提升
注意事项:
(1) 分区数要根据节点数、磁盘数及表的数据量综合考量,不宜随意指定
(2) 对于小表(如<100万)可不分区;对于大表(如>1000万)可适当分区,分区数一般为节点数的n倍(n<=8),生产环境下,每个分区的数据在百万行级别较合适
(3) HBase不建议单台RegionServer中的Region个数太多,一般不超过1000
(4) 在满足(3)的前提下,适当增加大表的分区数可以在查询时启用更多ESP并发查询,有利于提升查询性能
C. 行格式
Trafodion有两种行格式-默认行格式及ALIGNED格式,ALIGNED格式在插入、查询场景性能更优,但对更新、删除操作会一定的负作用。Trafodion新版本中,默认的行格式为ALIGNED格式
D. HBase存储选项
由于每个Trafodion表是一个单独的HBase表,HBase层面调优主要涉及三个参数-COMPRESSION、DATA_BLOCKENCODING、MEMSTORE_FLUSH_SIZE,因此在Trafodion中建表一般会添加以下选项,
HBASE_OPTIONS (
DATA_BLOCK_ENCODING = ‘FAST_DIFF’,
COMPRESSION = ‘SNAPPY’,
MEMSTORE_FLUSH_SIZE = ‘1073741824’ )
E. 创建索引
Trafodion允许在表上创建索引,合适地索引可以提升查询性能,但会影响插入、更新及删除的性能。
注意事项:
(1) 索引也可以分区,一般情况下,创建索引使用和主表同样的分区方式,语法为:SALT LIKE TABLE
(2) 当主表有大量插入或更新操作时,不适宜在主表创建较多的索引
(3) 在某些场景,查询语句只涉及表中很少的几个字段时,可以在那几个字段上创建一个组合索引(Covering Index),可以避免回表

II. 数据加载

A. 数据加载类型

特征INSERTUPSERTUPSERT USING LOADLOAD
交易(Transaction)不,使用HBase WAL来恢复不,使用快照(snapshot)来恢复
操作方法(Method of operation)在CheckAndPut会话中,使用标准HBase的写路径。 行在交易协处理器(coprocessor)内存中中止了,除非交易被递交。在Put会话中,使用标准HBase的写路径。在Put会话中,使用标准HBase的写路径。使用HBase bulk加载的写路径,并直接新建HFile文件,在大多数操作中忽略HBase RegionServers。
唯一限制(Uniqueness constraint)强制不强制。有相同键值的行覆盖之前的行。不强制。有相同键值的行覆盖之前的行。 只在行集属于单一语句时强制。对已经在表中的行不强制。
索引(Index)能在有索引的表中使用。能在有索引的表中使用。如果在有索引的表中使用,它会转换成UPSERT。能在有索引的表中使用。在LOAD时,索引不起作用。
最大支持(Maximum size)对少于10000*n行适用,这里n是集群中节点的数量。对少于10000*n行适用,这里n是集群中节点的数量。对少于5百万*n行适用,这里n是集群中节点的数量。对少于20亿*n行适用,这里n是集群中节点的数量。
最小支持(Minimum size)1行1行1行对1百万*n行适用
速度(Speed)最慢比INSERT快比UPSERT快最快

B. 持续加载
持续加载(Trickle Load)分为三种-UPSERT USING LOAD、UPSERT、INSERT
注意事项:
(1) 通常情况下,UPSERT USING LOAD最快,其次是UPSERT,最后是INSERT
(2) 数据加载的吞吐量与节点数成正比,节点越多,加载性能越高
(3) 可以使用cqd PARALLEL_NUM_ESPS ‘’开启ESP并发加载数据,并发数最大不超过表的Region个数
(4) 减少WAL文件复制因子也可以提升性能,通过修改hbase.regionserver.hlog.tolerable.lowreplication ‘’实现,默认值为3
C. 批量加载
批量加载(Bulk Load)绕过HBase的写路径,而是直接转换文件为HFile移动到HBase下,因此Bulk Load通常情况下会更快
注意事项:
(1) 从Hive源表加载到Trafodion时,使用cqd HIVE_MAX_STRING_LENGTH ‘’可以较大提升性能,value的值根据Hive源表最大字段长度定义
(2) Bulk Load向目标表加载数据时每个Region启用1个ESP,这个无法修改;从Hive源表读数据默认每个节点启用2个ESP,这个可以修改,通过cqd HIVE_NUM_ESPS_PER_DATANODE ‘’实现
(3) 如果目标表上有索引会影响加载性能,如果能确定源数据没有重复数据,可以使用cqd TRAF_LOAD_ALLOW_RISKY_INDEX_MAINTENANCE ‘ON’提升性能

III. 统计信息

注意事项:
(1) 当表加载数据之后,需要更新统计信息,否则执行计划可能不对,因为默认情况下Trafodion对每个表做100行数据假设,更新统计信息语法:UPDATE STATISTICS FOR TABLE table_name ON EVERY COLUMN;
(2) 对大表更新统计信息可能会十分耗时,为提升效率,利用SAMPLE语法,如下
UPDATE STATISTICS FOR TABLE table_name ON EVERY COLUMN SAMPLE;
(3) 如果表是持续注入数据,建议使用CronJob或其他方式定期更新统计信息

IV. 查询性能

注意事项:
(1) 对查询涉及到的表必须先更新统计信息,防止因为执行计划不准确导致查询性能下降
(2) 对于SQL执行很长时间,可以用$MY_SQROOT/export/limited-support-tools/LSO/offender -s active找到对应,然后使用GET STATISTIS FOR QID DEFAULT;查看执行统计信息
(3) 如果希望取消正在执行的查询,可以使用CONTROL QUERY CANCEL QID ;实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值