
# 业务报错：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情况：
   ```
   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情况：
   ```
   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. 登录[DWS控制台](https://console.huaweicloud.com/dws)。
2. 在左侧导航栏中，单击"集群 \> 集群列表"。
3. 在集群列表中找到所需要的集群，单击集群名称，进入"集群详情"页面。
4. 单击"参数修改"页签，在"参数列表"中找到"comm_max_stream"修改其参数值，然后单击"保存"。
5. 在"修改预览"窗口，确认修改无误后，单击"保存"。
6. 参数"comm_max_stream"所在行"是否重启集群"列显示为"是"，表示该参数修改后重启生效。 
   ![](https://support.huaweicloud.com/trouble-dws/figure/zh-cn_image_0000001328757666.png "点击放大")
   
   
 
