达梦数据库
达梦数据库DM8安装流程
创建达梦数据库实例
达梦数据库实例优化与配置
模式和用户及库之间的概念理解
常见数据库运维问题
达梦数据库日常运维指令
达梦数据库空闲连接数过多问题排查与优化实践
达梦8主从集群同步模式部署测试
客户端连接达梦数据库的方式(dm_svc)
删除达梦数据库实例
达梦数据库disql操作存储过程
本文档使用 MrDoc 发布
-
+
首页
达梦数据库空闲连接数过多问题排查与优化实践
## 一、问题背景 在达梦数据库日常运维过程中,数据库连接数持续增长、空闲连接长期占用以及连接资源未及时释放等问题较为常见。随着业务系统数量增加和应用访问频率提升,多个业务服务可能通过各自的数据库连接池维持长连接,导致数据库会话数量持续处于较高水平。 当应用程序连接池配置不合理、连接释放机制不完善,或者空闲连接回收策略缺失时,可能造成大量数据库会话长期处于空闲状态,进而占用数据库会话资源,增加数据库连接管理开销,严重时可能触发数据库最大会话数限制,影响新连接建立及业务正常访问。 针对上述问题,可从**数据库会话统计、客户端 IP 分析、服务器 TCP 连接排查、应用程序连接池检查、数据库用户资源限制**五个方面开展排查和优化,逐步定位连接资源占用较高的业务系统,并制定针对性的优化措施。 ## 二、数据库连接来源分析 首先,通过达梦数据库管理工具连接目标数据库,执行 SQL 查询,统计不同客户端 IP 的数据库会话数量,识别数据库连接占用较多的服务器。 **1. 按客户端 IP 统计会话数量** 执行以下 SQL: ```sql SELECT SUBSTR(CLNT_IP, 1, INSTR(CLNT_IP, ':', -1) - 1) AS IP, COUNT(1) AS SESSION_COUNT FROM V$SESSIONS GROUP BY SUBSTR(CLNT_IP, 1, INSTR(CLNT_IP, ':', -1) - 1) ORDER BY SESSION_COUNT DESC; ``` **查询结果分析:** - IP:客户端连接数据库时使用的源 IP 地址。 - SESSION_COUNT:对应客户端 IP 当前建立的数据库会话数量。 - 排序方式:按照会话数量降序排列,优先展示连接占用较高的客户端。 通过查询结果,可以快速识别数据库连接数较多的服务器,为后续应用程序定位提供依据。 ## 三、服务器 TCP 连接排查 确定连接数较高的客户端 IP 后,登录对应服务器,进一步分析服务器内部各个应用程序与达梦数据库之间的 TCP 连接情况。 **1. 统计数据库端口连接对应的进程** 达梦数据库默认服务端口为 5237,可执行以下命令: ```bash netstat -tnp | grep ':5237' | awk '{print $7}' | sort | uniq -c | sort -rn ``` **命令说明:** | 命令 | 作用 | |---|---| | `netstat -tnp` | 查看 TCP 连接及对应进程信息 | | `grep ':5236'` | 筛选访问达梦数据库 5236 端口的连接 | | `awk '{print $7}'` | 提取进程 PID 和程序名称 | | `sort` | 对进程信息进行排序 | | `uniq -c` | 统计相同进程出现的次数 | | `sort -rn` | 按连接数量降序排列 | **查询结果示例:** ```text 120 12345/java 85 23456/java 32 34567/python 12 45678/golang ``` 上述结果表示,不同进程当前与数据库建立的 TCP 连接数量存在差异。其中,PID 为 12345 的 Java 进程占用 120 个连接,属于需要重点排查的对象。 **2. 根据 PID 定位应用程序** 获取连接数量较高的进程 PID 后,可通过以下命令进一步确认程序信息: ```bash ps -fp 12345 ``` 查看进程完整启动参数: ```bash ps -ef | grep 12345 ``` 查看进程工作目录: ```bash readlink -f /proc/12345/cwd ``` 通过进程启动参数、运行目录及部署信息,可以进一步确定对应的业务系统及应用实例。 **3. 检查应用程序连接池配置** 定位具体业务程序后,需要重点检查数据库连接池配置,主要包括: - 最大连接数(Maximum Pool Size):限制应用程序允许建立的最大数据库连接数量。 - 最小空闲连接数(Minimum Idle):控制连接池维持的最小空闲连接数量。 - 空闲连接回收时间(Idle Timeout):控制空闲连接的回收周期。 - 连接最大生命周期(Max Lifetime):控制数据库连接的最大存活时间。 - 获取连接超时时间(Connection Timeout):控制应用程序获取数据库连接时的最大等待时间。 [标准领域知识] 对于访问频率较低的业务系统,应避免设置过大的最小空闲连接数;对于访问频率较高的业务系统,应结合并发请求量、数据库承载能力及连接池使用情况,合理配置最大连接数和空闲连接回收策略。 ## 四、数据库用户维度连接分析 完成客户端服务器及应用程序排查后,还需要从数据库用户维度统计会话数量,识别连接占用较高的数据库账号。 **1. 按数据库用户及客户端 IP 统计会话数量** 执行以下 SQL: ```sql SELECT USER_NAME, SUBSTR(CLNT_IP, 1, INSTR(CLNT_IP, ':', -1) - 1) AS IP, COUNT(1) AS SESSION_COUNT FROM V$SESSIONS GROUP BY USER_NAME, SUBSTR(CLNT_IP, 1, INSTR(CLNT_IP, ':', -1) - 1) ORDER BY SESSION_COUNT DESC; ``` **查询结果分析:** | 字段 | 说明 | |---|---| | USER_NAME | 数据库连接使用的用户名 | | IP | 客户端服务器 IP 地址 | | SESSION_COUNT | 对应用户在指定客户端 IP 上建立的会话数量 | 通过该查询,可以进一步明确不同业务系统使用的数据库账号及连接占用情况。 例如,当某个数据库用户在同一客户端 IP 上存在大量会话时,可以结合前述服务器进程排查结果,确认对应应用程序是否存在连接池配置不合理、连接释放不及时等问题。 ## 五、数据库用户资源限制优化 对于确认存在连接占用过多问题的数据库用户,可通过达梦数据库管理工具调整用户资源限制,对数据库会话数量及空闲连接进行约束。 **1. 进入用户资源设置** 通过达梦数据库管理工具连接数据库,按照以下路径操作: 1. 展开数据库对象管理。 2. 找到用户管理模块。 3. 定位连接数量较多的数据库用户。 4. 右键选择目标用户,进入用户属性修改界面。 5. 选择资源设置项。 6. 根据业务实际情况调整会话资源限制。 **2. 调整会话资源参数** 重点关注以下配置: | 配置项 | 建议配置示例 | 配置说明 | |---|---:|---| | 会话空闲超时时间 | 10 分钟 | 控制空闲会话的超时时间,超过阈值后由数据库按照资源策略进行处理 | | 最大连接数限制 | 200 | 限制单个数据库用户允许建立的最大会话数量 | 上述参数仅作为配置示例,实际阈值需要结合业务并发量、应用程序连接池配置、数据库资源情况及业务连续性要求综合评估。 **3. 资源限制配置注意事项** - 会话空闲超时时间不宜设置过短,避免正常业务连接因短暂空闲被频繁回收。 - 最大连接数应结合业务实例数量及单实例连接池上限进行统一评估。 - 多个应用实例共用同一数据库用户时,需要按照所有实例的连接需求进行总量规划。 - 调整数据库用户资源限制前,应确认现有连接数量及业务峰值,避免连接限制过低导致应用程序获取连接失败。 - 对于连接数异常增长的业务,应优先修复应用程序连接池配置及连接释放机制,数据库资源限制主要用于控制连接资源使用上限。 ## 六、排查优化总结 达梦数据库空闲连接数过多问题,通常需要结合数据库端和应用端进行联合排查。单纯通过数据库会话统计只能确定连接来源,无法直接识别具体业务程序,因此需要进一步结合服务器 TCP 连接及进程信息完成定位。 建议按照以下流程开展排查: | 排查阶段 | 排查方式 | 排查目标 | |---|---|---| | 第一阶段 | 查询 `V$SESSIONS`,按客户端 IP 统计会话数量 | 确定连接占用较高的客户端服务器 | | 第二阶段 | 使用 `netstat` 统计 TCP 连接及进程信息 | 确定连接占用较高的应用程序进程 | | 第三阶段 | 根据 PID 定位应用程序 | 确认具体业务系统及应用实例 | | 第四阶段 | 检查数据库连接池配置 | 排查连接池参数不合理及连接释放问题 | | 第五阶段 | 按数据库用户及客户端 IP 统计会话数量 | 确定连接占用较高的数据库账号 | | 第六阶段 | 调整数据库用户资源限制 | 控制空闲会话及最大连接数量 | **优化建议:** 1. **应用层优化:** 合理设置数据库连接池最大连接数、最小空闲连接数及空闲连接回收时间,避免连接资源长期闲置。 2. **数据库层优化:** 根据业务需求设置用户会话空闲超时时间及最大连接数,防止单个业务系统过度占用数据库连接资源。 3. **资源使用监控:** 建议持续监控数据库总会话数、活动会话数、空闲会话数及不同客户端 IP 的连接数量,及时发现连接异常增长情况。 4. **连接容量规划:** 对共用数据库账号的多个业务系统,应统一评估各应用实例的连接池配置,确保连接总量处于数据库可承载范围内。 通过数据库会话统计与服务器进程分析相结合的方式,可以将数据库连接占用情况逐步关联到具体业务应用,明确连接资源异常增长的来源,并通过应用连接池优化和数据库用户资源限制实现连接资源的合理管控。 --- **技术补充:原始排查命令的两个注意事项** 为提高排查结果的准确性,建议在实际操作中补充以下处理: 1. `netstat` 统计结果包含 TCP 连接状态的影响,建议进一步区分 `ESTABLISHED`、`TIME_WAIT` 等状态,避免将非活动数据库连接状态直接计入应用连接池占用量。例如: ```bash netstat -tnp | awk '$4 ~ /:5237$/ && $6=="ESTABLISHED" {print $7}' | sort | uniq -c | sort -rn ``` 2. 原始 SQL 使用 `INSTR(CLNT_IP, ':', -1)` 提取 IP,需要确认 `CLNT_IP` 的实际格式。如果客户端地址包含 IPv6,应采用兼容 IPv6 的地址解析方式,避免错误截取。 [标准领域知识] 此外,数据库会话数量与服务器 TCP 连接数量并不一定完全一致,应结合数据库会话状态、连接建立时间及应用程序连接池监控数据进行交叉验证。
Nathan
2026年11月3日 17:23
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文件
Docx文件
分享
链接
类型
密码
更新密码