动态负载管理
背景信息
动态负载管理指数据库内部根据用户负载情况,自动对复杂查询进行队列控制,不再需要手动设置参数,做到系统参数免调优。
前提条件
动态负载管理功能不能在加速集群场景下使用,需要设置enable_acceleration_cluster_wlm的取值为off。
gs_guc set -Z coordinator -Z datanode -N all -I all -c "enable_acceleration_cluster_wlm=off"
操作步骤
- 以操作系统用户omm登录GaussDB 200集群任一主机。执行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令启动环境变量。
- 打开开关enable_dynamic_workload为on。
gs_guc set -Z coordinator -Z datanode -N all -I all -c "enable_dynamic_workload=on"
- 打开开关enable_memory_limit为on。
gs_guc set -Z coordinator -Z datanode -N all -I all -c "enable_memory_limit=on"
- 使用业务用户执行复杂作业。
说明:
- 集群有一个CN会作为中心协调节点(CCN),用于收集和调度作业执行,该节点可以通过gs_om -t status --detail查询到,Central Coordinator State会显示其状态。当CCN不存在时,作业不再受动态负载管理控制。
- 单CN上依然受到max_active_statements参数限制,但不是强制限制,实际运行的作业可能稍微大于该数值。
- 简单查询作业(估算值<32MB)、非DML(即非INSERT、UPDATE、DELETE和SELECT)语句,不走自适应负载,需要通过max_active_statements来进行单CN的上限控制。
- 默认work_mem数值为64MB,在自适应负载特性下,该数值不能变大,否则会引起内存不受控(例如未做Analyze的语句)。
- 以下场景或语句由于内存使用特殊性和不确定性,可能导致大并发场景内存不受控,如果遇到需要降低并发数。
- 单条元组占用内存过大的场景,例如,基表包含超过MB级别的宽列。
- 完全下推语句的查询。
- 需要在CN上耗费大量内存的语句,例如,不能下推的语句,withhold cursor场景。
- 由于计划生成不当导致hashjoin算子建立的hash表重复值过多,占用大量内存。
- 包含UDF的场景,且UDF中使用大量内存的场景。
查看更多:华为GaussDB 200 负载管理(队列控制)「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」关注作者【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。评论