You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求解决ADF无法重用或断开Progress DB ODBC连接的问题

Progress ODBC + Azure Data Factory 会话堆积问题解决方案

问题背景

使用授权的Progress ODBC连接器(版本11.7,PROGRESS_OE_11.7_WIN_64_SQLCLIENTACCESS)与Progress DB建立ODBC连接,Azure Data Factory(ADF)通过该连接执行数据复制、存储过程调用等任务时功能正常,但在Until循环场景下存在会话堆积问题:每次循环执行SQL命令后,ADF会创建新会话,既不重用原有连接也不主动关闭旧会话;旧会话需约100秒后超时回收,速度不足以避免会话达到上限。此前尝试配置ODBC扩展属性(SQL_ATTR_CONNECTION_POOLING=0、CPTimeout=0、Pooling=0、SQL_INFX_ATTR_CONNECTION_POOLING=0、CONNECTION_POOLING=0)未生效。

解决方案

1. 启用ADF活动的连接复用

  • 在ADF的SQL类活动(如Stored Procedure、Lookup活动)的高级设置中,开启Connection reuse选项,确保同一Linked Service的连接被复用,而非每次操作新建连接。
  • 确保Until循环内所有SQL操作绑定同一个Linked Service实例,禁止在循环内动态创建新的Linked Service。

2. 修正Progress ODBC连接池配置

之前的参数配置方向错误(禁用了连接池),需调整为启用连接池并设置合理回收超时:

  • ODBC数据源管理器配置:打开64位ODBC数据源管理器,找到目标Progress数据源,进入配置页面的连接池设置,勾选启用连接池,设置Connection Timeout为30秒(或更短,根据业务调整)。
  • ADF连接字符串配置:在Linked Service的ODBC连接字符串中添加正确的池化参数:
    Pooling=Yes;CPTimeout=30
    
    注意:Progress ODBC 11.7的池化参数使用Pooling=Yes/No而非数值,CPTimeout定义闲置连接的回收超时秒数。

3. 优化ADF Until循环设计

  • 将循环内的多次SQL操作合并为单次批量执行,例如封装为一个存储过程,减少连接创建频次。
  • 避免在循环内重复初始化SQL活动,通过参数传递动态调整执行内容,复用同一活动实例的连接。

4. 调整Progress DB的会话回收策略

  • 缩短闲置会话超时时间:使用Progress管理命令设置会话超时为30秒(需DBA权限):
    proshut <数据库名称> -C "-timeout 30"
    
  • 临时调整最大会话数参数-M,但仅作为应急方案,核心仍需解决连接复用问题。

5. 检查Self-Hosted Integration Runtime(SHIR)状态

  • 若使用SHIR,确认已安装64位Progress ODBC驱动,且SHIR进程无内存泄漏。
  • 重启SHIR服务,清除残留的未释放连接。

内容的提问来源于stack exchange,提问作者Tautvydas Perminas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 17:05:18