GaussDB(DWS)性能场景之copy慢怎么办
GaussDB(DWS)提供了多种入库方式:外表导入、GDS导入、copy导入等。JDBC场景下,使用copymanager也是一种常用的导入方式,内部实现也是通过copy实现的。用户在实际使用过程中,可能会遇到copy慢的场景,本文主要列举了出现copy慢场景时的常见原因和处理方法供大家参考。
场景1:日志归档参数未关闭
8.1.0版本默认打开了日志归档参数archive_mode,其余版本该参数默认关闭。开启该参数后,进行日志归档时会加全局锁,对实时查询和实时入库等场景影响较大。当实时入库场景出现慢的场景时,应首先排查该参数是否开启,如果开启需要关闭该参数。
排查方法:连接数据库,执行show archive;若结果为on表示存在该问题
解决方法:在管控面设置该参数为off,或通过gs_guc命令关闭:gs_guc reload -Z coordinator -Z datanode -N all -I all -c "archive_mode = off"
场景2:max_query_retry_times开启(仅线下651版本涉及)
在651版本中,当通过copy的方式导入数据,且在copy过程中有报错,触发cn retry后,可能会出现copy线程长时间不退出的情况,影响导入效率。
排查方法:651版本,业务侧使用了copy入库,且max_query_retry_times不为0。
解决方法:全局关闭max_query_retry_times或在copy语句执行前执行:set max_query_retry_times = 0;
场景3:通过等待视图观察等待事件
排除上述两种场景外,当出现copy慢的场景时,需要结合等待视图pgxc_thread_wait_status定位原因:
1. copy语句对应的等待视图中,等待状态全部为wait cmd:对应场景为源端供数慢,此类场景说明DWS侧已完成写入,正在等待上游继续供数,此类场景需要排查上游数据读取是否有瓶颈
2. 多个copy语句的等待视图中,在等待某个或某组固定的DN:入库数据存在倾斜或存在慢节点:
排查方法:
(1)首先查看目标表的分布列,结合入库数据排查在分布列上是否存在倾斜,如果存在倾斜,需要调整分布键
(2)登录对应DN所在的节点,查看节点上是否存在IO瓶颈,参考如下方法排查:https://bbs.huaweicloud.com/forum/thread-152917-1-1.html
3. 其他等待事件
当排除上述场景外,说明等待视图中存在其他等待事件,需要结合等待视图中的等待事件具体分析,常见的等待事件及处理方法可以参考:https://bbs.huaweicloud.com/blogs/338836
使用建议:
使用copy的入库场景一般分为两种:数据攒批入库和流式场景实时入库:
攒批入库:单次copy入库的数据量较大,入库频次低,数据规模一般在十万或百万级别;此类场景一般由上游业务攒批后一次性入库,对单条数据的时效性要求不高,这种情况下目标表适合列存表
实时入库:单次copy入库的数据量较少,数据量在几十到几百条,入库频繁,由上层业务实时调度,对入库时效性要求很高。此类场景目标表需要使用行存表,避免使用列存(列存表小批量导入存在CU空洞情况:https://bbs.huaweicloud.com/forum/thread-100112-1-1.html)
- 点赞
- 收藏
- 关注作者
评论(0)