Azure VM上PostgreSQL数据库层连接丢失 点图层闲置后数据消失问题
故障根因与修复方案
触发原因
该问题核心为空闲数据库连接被静默中断导致空间查询失败,三个常见触发点:
- Azure 公网IP默认TCP空闲超时阈值为4分钟,无流量的长连接会被网络层静默丢弃,不会向上层应用返回断连通知
- PostgreSQL 9.5 原生TCP保活参数
tcp_keepalives_idle默认值为7200秒(2小时),无法在Azure超时阈值前触发保活 - Tatuk Viewer默认复用初始建立的数据库连接执行空间查询,连接失效后缩放触发的空间范围查询无返回结果,图层渲染为空,且无自动重连逻辑
修复步骤
数据库侧配置调整
编辑PostgreSQL配置文件postgresql.conf,修改以下TCP保活参数:
# 空闲120秒后开始发送保活包 tcp_keepalives_idle = 120 # 保活包发送间隔30秒 tcp_keepalives_interval = 30 # 3次无响应后标记连接失效 tcp_keepalives_count = 3
修改后执行pg_ctl reload命令重载配置,无需重启数据库实例即可生效。
Azure网络侧配置调整
登录Azure门户,进入对应虚拟机的公网IP配置页,将空闲超时参数调整为最大值30分钟,进一步降低连接被中断的概率。
客户端适配调整
打开Tatuk Viewer的PostGIS连接配置,启用查询前验证连接有效性选项;如果版本无该选项,可在连接字符串中追加keepalives=1参数强制启用客户端TCP保活。
验证方式
配置完成后加载目标点图层,闲置10分钟以上执行缩放、平移操作,确认点位正常渲染即修复完成。
内容的提问来源于stack exchange,提问作者Bruno Bernardi Neves
相关产品推荐
相关产品推荐

