数据仓库服务 GAUSSDB(DWS)-数据库SEQUENCE优秀实践:sequence相关的典型优化场景
sequence相关的典型优化场景
业务场景:
某业务场景中使用 CDM 数据同步工具进行数据迁移,从源端入库目标端 GaussDB (DWS)。导入速率与经验值相差较大,业务将CDM并发从1调整为5,同步速率仍无法提升。查看语句执行情况,除COPY入库外,其余业务均正常执行,无性能瓶颈,且观察无资源瓶颈,因此初步判断为该业务自身存在瓶颈,查看该表COPY相关的作业等待视图情况:
如上图所示,由于CDM作业执行了5个并发,因此在活跃视图中可以看到5个COPY语句,根据这5个COPY语句对应的query_id查看等待视图情况。查看到这5个COPY中,同一时刻,仅有1个COPY在向GTM申请序列值,其余的COPY在等待轻量级锁。因此,即使作业中开启了5并发在运行,实际效果较1并发并没有带来明显提升。
问题原因:
目标表在建表时使用了serial类型,默认创建的sequence的cache为1,导致在并发COPY入库时,CN频繁与GTM建连,且多个并发之间存在轻量锁争抢,导致数据同步效率低。
解决方案:
此种场景下可以调大sequence的cache值,防止频繁GTM建联带来的瓶颈。本业务场景示例中,业务每次同步的数据量在10万左右,根据业务评估,将cache值修改为10000(实际使用时应根据业务设置合理的cache值,既能保证快速访问,又不会造成序列号浪费)。
8.2.1.100及以上集群版本中支持使用ALTER SEQUENCE的方式修改cache值。
8.2.1及之前低版本集群中GaussDB(DWS)不支持通过ALTER SEQUENCE的方式修改cache值,可以通过如下方式修改已有sequence的cache值,以mytable表为例:
- 解除当前sequence与目标表的关联关系
1 2
ALTER SEQUENCE mytable_b_seq owned by none; ALTER TABLE mytable alter b drop default;
- 记录当前sequence值,作为新建sequence的start value。
1
SELECT nextval('mytable_b_seq');
删除sequence。
1
DROP SEQUENCE mytable_b_seq;
- 新建sequence并绑定目标表,xxx替换为上一步查到的nextval值。
1 2 3
CREATE SEQUENCE mytable_b_seq START with xxx cache 10000 owned by mytable.b; ALTER SEQUENCE mytable_b_seq owner to u1;--u1为mytable表的属主,如果当前用户即为属主,可不执行此语句。 ALTER TABLE mytable alter b set default nextval('mytable_b_seq');
- 数据仓库服务GaussDB(DWS)_SQL on Anywhere
- GAUSS(DWS)工具_gsql工具_DataStudio工具_DSC工具
- GaussDB(DWS)常用SQL_常用SQL命令_SQL语法
- DWS产品介绍_DWS产品优势_DWS功能_DWS使用场景_DWS是什么
- Gauss(DWS)数据加解密_数据加解密算法_数据加解密函数
- DWS安全_数据仓库服务安全_DWS数据安全管理_DWS安全保障_DWS安全策略
- 调用GaussDB(DWS) API接口_数据仓库服务调用API_如何调用API_在DWS中调用API
- GaussDB性能_Gaussdb数据库性能_高斯数据库性能-华为云
- 数据库监控DMS_数据库智能运维_了解Auto Pilot_DMS_DWS节点监控
- GaussDB性能怎么调_华为gaussdb_gaussdb性能_gaussdb学习