1. 首页 > DB2教程 > 正文

DB2教程FG080-DB2连接管理优化实战

风哥教程参考DB2官方文档Connection Management、Performance等内容,详细介绍连接池配置、连接监控、连接优化等。更多视频教程www.fgedu.net.cn

目录大纲

Part01-连接管理概述

1.1 连接管理重要性

连接管理重要性:

  • 影响系统性能
  • 影响并发能力
  • 影响资源使用
  • 影响用户体验

1.2 连接类型

  • 本地连接:本地应用程序连接
  • 远程连接:远程客户端连接
  • 连接池:连接复用
  • 集中器:连接集中管理

Part02-连接池配置

2.1 服务器端连接池

# 配置连接池参数
UPDATE DATABASE MANAGER CONFIGURATION USING NUM_POOLAGENTS 100;
UPDATE DATABASE MANAGER CONFIGURATION USING MAX_POOLAGENTS 200;

# 配置代理参数
UPDATE DATABASE MANAGER CONFIGURATION USING MAXAGENTS 500;
UPDATE DATABASE MANAGER CONFIGURATION USING MAX_COORDAGENTS 300;

# 配置连接超时
UPDATE DATABASE MANAGER CONFIGURATION USING CONNECT_TIMEOUT 10;

# 配置空闲超时
UPDATE DATABASE MANAGER CONFIGURATION USING IDLE_TIMEOUT 600;

# 查看连接池配置
GET DATABASE MANAGER CONFIGURATION;

# 查看连接池状态
SELECT
POOL_CONFIG,
POOL_SIZE,
POOL_FREE
FROM SYSIBMADM.SNAPDBM;

2.2 客户端连接池

# JDBC连接池配置
# 最小连接数
minPoolSize=10

# 最大连接数
maxPoolSize=100

# 连接超时时间
connectionTimeout=30000

# 空闲超时时间
idleTimeout=600000

# 最大生命周期
maxLifetime=1800000

# 连接验证
validationQuery=SELECT 1 FROM SYSIBM.SYSDUMMY1

# 连接验证超时
validationQueryTimeout=5

# Python连接池示例
import ibm_db_dbi as dbi
from threading import Lock

class DB2ConnectionPool:
def __init__(self, max_connections=20):
self.max_connections = max_connections
self.pool = []
self.lock = Lock()

def get_connection(self):
with self.lock:
if self.pool:
return self.pool.pop()
else:
return self._create_connection()

def return_connection(self, conn):
with self.lock:
if len(self.pool) < self.max_connections: self.pool.append(conn) else: conn.close() def _create_connection(self): conn_str = "DATABASE=FGEDB;HOSTNAME=localhost;PORT=50000;PROTOCOL=TCPIP;UID=db2inst1;PWD=password;" return dbi.connect(conn_str) # Java连接池示例(HikariCP) HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:db2://localhost:50000/FGEDB"); config.setUsername("db2inst1"); config.setPassword("password"); config.setMaximumPoolSize(100); config.setMinimumIdle(10); config.setConnectionTimeout(30000); config.setIdleTimeout(600000); config.setMaxLifetime(1800000); HikariDataSource ds = new HikariDataSource(config);

Part03-连接监控

3.1 连接状态监控

# 查看当前连接
SELECT
AGENT_ID,
APPL_NAME,
APPL_STATUS,
CLIENT_PID,
UOW_START_TIME,
CURRENT TIMESTAMP – UOW_START_TIME AS DURATION
FROM SYSIBMADM.APPLICATIONS
ORDER BY DURATION DESC;

# 查看连接统计
SELECT
COUNT(*) AS TOTAL_CONNECTIONS,
COUNT(CASE WHEN APPL_STATUS = ‘UOWWAIT’ THEN 1 END) AS IDLE_CONNECTIONS,
COUNT(CASE WHEN APPL_STATUS = ‘UOWEXEC’ THEN 1 END) AS ACTIVE_CONNECTIONS
FROM SYSIBMADM.APPLICATIONS;

# 查看长时间运行的连接
SELECT
AGENT_ID,
APPL_NAME,
UOW_START_TIME,
CURRENT TIMESTAMP – UOW_START_TIME AS DURATION,
SUBSTR(STMT_TEXT, 1, 100) AS STMT_TEXT
FROM SYSIBMADM.APPLICATIONS
WHERE UOW_START_TIME < CURRENT TIMESTAMP - 1 HOUR ORDER BY DURATION DESC; # 查看锁等待的连接 SELECT AGENT_ID, APPL_NAME, LOCK_WAIT_START_TIME, CURRENT TIMESTAMP - LOCK_WAIT_START_TIME AS WAIT_DURATION FROM SYSIBMADM.APPLICATIONS WHERE LOCK_WAIT_START_TIME IS NOT NULL ORDER BY WAIT_DURATION DESC;

3.2 连接性能监控

# 查看连接CPU使用
SELECT
AGENT_ID,
APPL_NAME,
TOTAL_CPU_TIME,
TOTAL_USR_CPU_TIME,
TOTAL_SYS_CPU_TIME
FROM SYSIBMADM.APPLICATIONS
ORDER BY TOTAL_CPU_TIME DESC;

# 查看连接内存使用
SELECT
AGENT_ID,
APPL_NAME,
APPL_MEMORY_USED,
AGENT_STATEMENT_HEAP_USED
FROM SYSIBMADM.APPLICATIONS
ORDER BY APPL_MEMORY_USED DESC;

# 查看连接IO使用
SELECT
AGENT_ID,
APPL_NAME,
ROWS_READ,
ROWS_WRITTEN,
POOL_DATA_L_READS,
POOL_DATA_P_READS
FROM SYSIBMADM.APPLICATIONS
ORDER BY ROWS_READ DESC;

# 查看连接执行SQL数量
SELECT
AGENT_ID,
APPL_NAME,
TOTAL_APP_COMMITS,
TOTAL_APP_ROLLBACKS,
TOTAL_SELECTS,
TOTAL_INSERTS,
TOTAL_UPDATES,
TOTAL_DELETES
FROM SYSIBMADM.APPLICATIONS
ORDER BY TOTAL_SELECTS DESC;

Part04-连接优化

4.1 连接参数优化

# 优化连接参数
# 增大最大连接数
UPDATE DATABASE MANAGER CONFIGURATION USING MAXAGENTS 1000;
UPDATE DATABASE MANAGER CONFIGURATION USING MAX_COORDAGENTS 500;

# 优化连接池
UPDATE DATABASE MANAGER CONFIGURATION USING NUM_POOLAGENTS 200;
UPDATE DATABASE MANAGER CONFIGURATION USING MAX_POOLAGENTS 500;

# 优化应用内存
UPDATE DATABASE CONFIGURATION USING APPL_MEMORY AUTOMATIC;

# 优化语句堆
UPDATE DATABASE CONFIGURATION USING STMTHEAP AUTOMATIC;

# 优化包缓存
UPDATE DATABASE CONFIGURATION USING PCKCACHESZ AUTOMATIC;

# 查看优化效果
GET DATABASE MANAGER CONFIGURATION;
GET DATABASE CONFIGURATION;

4.2 连接管理最佳实践

# 1. 及时关闭连接
# Java示例
Connection conn = null;
try {
conn = dataSource.getConnection();
// 执行SQL
} finally {
if (conn != null) {
conn.close();
}
}

# 2. 使用连接池
# 避免频繁创建和销毁连接

# 3. 设置合理的超时时间
# 连接超时、查询超时、空闲超时

# 4. 监控连接使用
# 定期检查连接数量和状态

# 5. 清理空闲连接
# 定期断开长时间空闲的连接

# 6. 使用连接重试机制
# 连接失败时自动重试

# 清理空闲连接脚本
#!/bin/bash
# clean_idle_connections.sh

db2 connect to FGEDB

# 查找空闲超过1小时的连接
db2 “SELECT AGENT_ID FROM SYSIBMADM.APPLICATIONS
WHERE APPL_STATUS = ‘UOWWAIT’
AND UOW_START_TIME < CURRENT TIMESTAMP - 1 HOUR" > idle_connections.txt

# 断开空闲连接
while read agent_id; do
db2 “FORCE APPLICATION ($agent_id)”
done < idle_connections.txt db2 connect reset echo "Cleaned idle connections at $(date)"

Part05-风哥经验总结与分享

5.1 连接管理要点

  • 合理配置连接池大小
  • 设置合理的超时时间
  • 监控连接使用情况
  • 及时清理空闲连接
  • 使用连接重试机制
  • 建立连接监控告警

5.2 配置建议

参数 建议值 说明
MAXAGENTS CPU核心数 * 10 最大代理数
MAX_COORDAGENTS MAXAGENTS * 0.6 最大协调代理
NUM_POOLAGENTS MAX_COORDAGENTS * 0.5 连接池大小
IDLE_TIMEOUT 600秒 空闲超时

5.3 运维要点

  • 定期监控连接数量
  • 监控长时间运行的连接
  • 监控锁等待的连接
  • 定期清理空闲连接
  • 建立连接告警机制
  • 定期审查连接配置
更多视频教程www.fgedu.net.cn
学习交流加群风哥微信: itpux-com
风哥Oracle/MySQL/PostgreSQL/Greenplum/DB2/Redis等数据库培训课程,10年一线实战经验,企业级培训,真正掌握数据库核心技术!

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息