更新时间:2024-12-02 GMT+08:00
分享

GaussDB(DWS)连接管理规范

规则1.1 GaussDB(DWS)集群必须配置负载均衡

违反规则的影响

  • 负载不均衡导致性能问题,严重情况会导致业务中断。
  • CN故障场景,业务无法自恢复或恢复时间长。

方案建议

规则1.2 连接数据库完成所需操作后,必须关闭数据库连接(连接池场景除外)

违反规则的影响

  • 空闲连接过多,触发连接上限,导致新建连接报错。
  • 空闲连接过多,内部占用过多资源,导致资源过载。

方案建议

  • 应用侧与数据库建连并使用完成后,手动关闭连接。
  • 服务侧设置session_timeout参数,连接空闲超时自动断开。

规则1.3 开启的事务最后必须提交或回滚

违反规则的影响

  • 事务长时间不提交,持锁阻塞ALTER等操作,进而阻塞所有业务。
  • 大量“idle in transaction”连接,触发连接上限,导致新建连接报错。

方案建议

  • 默认使用autocommit自动提交方式,如关闭autocommit,则必须手动提交。
  • 显式start transaction开启的事务,执行完相关操作后,必须显式commit/rollback结束事务。

规则1.4 应用侧使用连接池场景,其空闲超时配置必须小于服务侧的SESSION_TIMEOUT配置

违反规则的影响

  • 连接池的连接被服务侧的空闲超时机制清理,连接复用效果下降。

方案建议

  • 将连接池的空闲超时参数设置为小于服务侧的SESSION_TIMEOUT值,或调大SESSION_TIMEOUT为大于连接池超时参数(不推荐)。

规则1.5 应用侧使用连接池场景,如使用连接SET设置过参数,当将连接归还连接池前,必须进行参数重置

违反规则的影响

  • 连接被其他业务复用时,可能会应复用其他业务设置的参数出现业务性能、业务报错等问题。

方案建议

  • 在将连接归还连接池之前,使用“SET SESSION AUTHORIZATION DEFAULT;RESET ALL;”重置参数。

注意

在应用侧使用连接池的场景,如果在DWS服务侧通过GS_GUC RELOAD设置了全局的GUC参数,需要重启应用侧连接池才能够享受该参数变化,因为该设置只针对新建的连接生效,针对连接池中已有的老连接不生效。

规则1.6 应用侧使用连接池场景,如使用连接创建过临时表,当将连接归还连接池前,必须手动清理所创建的临时表

违反规则的影响

  • 连接被其他业务复用时,可能出现创建临时表报错问题。

方案建议

  • 在将连接归还连接池之前,使用DROP清理当前SESSION创建的临时表。

相关文档