文档首页/ 数据仓库服务 GaussDB(DWS)/ 故障排除/ 数据库参数修改/ 业务报错:Cannot get stream index, maybe comm_max_stream is not enough
更新时间:2024-06-20 GMT+08:00
分享

业务报错:Cannot get stream index, maybe comm_max_stream is not enough

问题现象

用户执行业务报错“ERROR: Failed to connect dn_6001_6002, detail:1021 Cannot get stream index, maybe comm_max_stream is not enough.”。

原因分析

用户数据库的comm_max_datanode参数为默认值1024,在正常批量业务运行时查到DN之间stream数量大约为600~700,当批量任务运行时如果有临时查询,就会超过上限,导致上述报错。

分析过程

  1. GUC参数comm_max_stream表示任意两个DN之间stream的最大数量。
    在CN上查询当前任意两个DN之间stream情况:
    1
    SELECT node_name,remote_name,count(*) FROM pgxc_comm_send_stream group by 1,2 order by 3 desc limit 100;
    
    在DN上查询当前DN与其他DN之间stream情况:
    1
    SELECT node_name,remote_name,count(*) FROM pg_comm_send_stream group by 1,2 order by 3 desc limit 100;
    
  2. comm_max_stream参数值必须大于并发数*每并发平均stream算子数*(smp的平方)。

    该参数默认值为:通过公式min(query_dop_limit * query_dop_limit * 2 * 20, max_process_memory(字节) * 0.025 /(最大CN数+当前DN数) / 260)计算,小于1024按照1024取值,其中query_dop_limit = 单个机器CPU核数 / 单个机器DN数。

    • 不建议该参数值设置过大,因为comm_max_stream会占用内存(占用内存=256byte*comm_max_stream*comm_max_datanode),如果并发数据流数过大,查询较为复杂及smp过大都会导致内存不足。
    • 如果comm_max_datanode参数值较小,进程内存充足,可以适当将comm_max_stream值调大。

处理方法

根据评估,内存充足,将comm_max_stream参数值调大为2048。(参数值2048仅适用示例场景,请根据实际业务的内存查询结果进行参数值调整。)

  1. 登录GaussDB(DWS) 管理控制台。
  2. 在左侧导航栏中,单击“集群管理”。
  3. 在集群列表中找到所需要的集群,单击集群名称,进入集群“基本信息”页面。
  4. 单击“参数修改”页签,修改参数“comm_max_stream”,然后单击“保存”。
  5. 在“修改预览”窗口,确认修改无误后,单击“保存”。
  6. 参数“comm_max_stream”所在行“是否重启”列显示为“否”,表示该参数修改后无需进行重启操作,即修改后立即生效。

相关文档