GaussDB(DWS) 910.200版本性能优化建议
1 集群参数校验
1.1 autovacuum相关:
autovacuum =true
autovacuum_max_workers=6
autovacuum_max_workers_hstore=3
enable_col_index_vacuum=on
1.2 V3表disk cache/异步IO/预读相关:
预读:
cu_preload_count = 600
cu_preload_max_distance = 20
异步IO:
enable_aio_scheduler = on
obs_worker_pool_size = 64
多盘缓存:
enable_disk_cache = on
disk_cache_max_size = 管控面下发是盘的一半大小
disk_cache_base_paths = disk_cache 开的话会有多盘路径(两个路径)
enable_disk_cache_recovery = on
1.3 性能相关:
优化器:
cost_model_version = 4 //控制代价估算模型,取值范围1-4
enable_mixedagg=on
执行器:
runtime_filter_type = 'all'
enable_topk_optimization=on //仅支持turbo计划
late_read_strategy = 'topk' //默认开启
enable_cu_predicate_pushdown=on
2 建表
2.1 绝大多数场景建议选择列存,特殊点查场景选择行存
存储类型 |
适用场景 |
建表参数 |
默认建表 |
列存 |
适用于大部分场景,如统计分析类查询 (关联、分组操作较多的场景)、即席查询(查询条件不确定)、点查询(返回记录少,基于索引的简单查询)、批量入库、实时入库等。 |
WITH (ORIENTATION = column, enable_hstore_opt = on) |
不设置时默认为行存。 |
行存 |
点查询性能要求较高且列存hstore无法满足要求的场景,增、删、改操作较多且列存hstore脏数据较高的场景。 |
WITH (ORIENTATION = row) |
2.2 建议在时间、区域等字段上创建分区
名称 |
描述 |
建表参数举例 |
范围分区 (Range Partitioning) |
基于一个数值型范围划分数据,例如按日期或价格区间定义。 |
PARTITION BY RANGE (分区字段)( PARTITION p1 VALUES LESS THAN(20161231), PARTITION p2 VALUES LESS THAN(20171231), PARTITION pxxxx VALUES LESS THAN(maxvalue)); |
列表分区 (List Partitioning) |
基于一个值列表划分数据,例如按销售范围或产品属性定义。 |
PARTITION BY LIST (分区字段)( PARTITION province1 VALUES ( 'city2'), PARTITION province2 VALUES ('city3'), PARTITION rest VALUES (DEFAULT)); |
【建议】使用具有明显区间性的字段进行分区,比如日期、区域等字段上建立分区。分区数量不建议超过1000。
【建议】分区名称应当体现分区的数据特征。例如,关键字+区间特征。
【建议】将分区上边界的分区值定义为MAXVALUE,以防止可能出现的数据溢出。
【建议】查询数据可落到区间范围指定的分区内,这样才能通过分区剪枝,只扫描查询需要的分区,从而提升数据扫描效率,降低数据扫描的IO开销。
2.3 建议选择V3表,本地盘建议单DN设置250GB
场景 |
V2表 |
V3表 |
建表参数 |
With(COLVERSION=2.0) |
With(COLVERSION=3.0) |
集群支持版本 |
所有版本 |
存算分离(DWS 3.0) |
存储 |
列存表的每列合并存储在一个文件中,文件存储在磁盘上,文件名以relfilenode.C1.0命名。 |
列存表的每列合并存储在一个文件中,文件存储在OBS文件系统上,文件名以C1_fileid.0命名。 |
建议使用场景 |
所有场景 |
性能要求不高、成本控制较高;批量加工/报表查询场景建议使用V3 Hstore(默认opt) + Turbo引擎 + 全缓存 |
默认建表 |
存算一体版本,不指定时默认v2表。 |
存算分离版本,不指定时默认v3表。 |
3 性能优化
1、字段建议类型:
(1)numeric类型要求都指定精度,精度尽可能38以内,19以内性能更优,无精度性能很差。
(2)字符串类型总是会比整数/时间类型慢,能用整数/时间类型的都不建议使用字符串类型。
(3)字符串尽可能使用varchar(n),n在16以内性能最优。
2、主键:
满足业务前提下,主键最好不超过5列,尽可能使用整数类型的列,并且把distinct值多的列放前面。
3、bitmap索引:
在有过滤条件的字符串字段上都可以指定上bitmap索引,非字符串字段不适用。
样例:with (orientation=column, enable_hstore_opt=on, bitmap_columns='scope_name, server_ip, group_path')
4、PCK/异步排序:
在最常见的过滤条件字段上可以创建PCK,不建议超过两列。影响批量入库性能,异步排序占用额外CPU/IO资源。
样例:create table tb_v3_hash_pck (a int, b int, c int, partial cluster key(a)) with (orientation = column, colversion = 3.0, enable_hstore_opt=on);
- 点赞
- 收藏
- 关注作者
评论(0)