连接池调优
2024-01-18 17:59:40 0 举报
AI智能生成
proxool连接池调优
作者其他创作
大纲/内容
proxool工作机制简述
工作过程
初始化连接池管理器,DBConnectionPoolManager
获取连接池
ConnectionPool负责创建、释放、回收连接
创建连接的2种场景
程序显性获取数据库库连接时,比如getConnection时,此时proxool可能会创建连接。
当无可用连接时,proxool便会即时创建一个连接,此时该连接状态为Available
当无可用连接时,proxool便会即时创建一个连接,此时该连接状态为Available
当当前连接数小于最小连接数或当前可用连接数小于最小可用连接数时,便会创建新连接,并将新建的连接状态置为Available.
连接如何回收、销毁
检查连接是否有效,如果测试失败,则proxool会从连接池中移除该对象,并销毁
由houseKeepingTestSql参数指定测试sql
连接sql执行时间是否超过最大activetime,超过时proxool会将其强行关闭,从pool中移除,并销毁
连接存活时间是否超过maximumConnectionLifetime
连接数量相关参数
maximumConnectionCount
最大连接数
默认:15
minimumConnectionCount
最小连接数,初始化时连接数
默认:5
prototypeCount
在不超过最大连接数的情况下,连接池中保证的空闲连接的数量
minimumConnectionCount把活动的连接也计算在内,而prototypeCount 只计算空闲的connections 的数量.
时间相关参数
线程池时间相关参数(单位:ms)
houseKeepingSleepTime
检测连接状态的时间间隔,默认时30秒。
可以理解成线程池job定时执行时间间隔
maximumActiveTime
连接活动最大时间,当一个sql执行超过该数值,连接会被关闭
要确保此值比期待响应时间要大,但是过大会导致请求阻塞
默认:5分钟
maximumConnectionLifetime
连接创建后存活的最长时间,此值要小于服务端的wait_timeout时间
默认:4小时
mysql服务端(单位:s)
wait_timeout
设置非交互连接(就是指那些连接池方式、非客户端方式连接的)的超时时间,默认是28800,就是8小时,
超过这个时间,mysql服务器会主动切断那些已经连接的,将状态置为是sleep
超过这个时间,mysql服务器会主动切断那些已经连接的,将状态置为是sleep
查看mysql服务端设置:
mysql> show variables like '%timeout%';
mysql> show variables like '%timeout%';
常见异常
The last packet successfully received from the server was 47,795,922 milliseconds ago.
The last packet sent successfully to the server was 47,795,92 原因分析:MySQL连接时,服务器默认的“wait_timeout”是8小时,
也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection。connections如果空闲超过8小时,
Mysql将其断开,而DB连接池并不知道该connection已经失效,如果这时有Client请求connection,
连接池将该失效的Connection提供给Client,将会造成异常。
The last packet sent successfully to the server was 47,795,92 原因分析:MySQL连接时,服务器默认的“wait_timeout”是8小时,
也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection。connections如果空闲超过8小时,
Mysql将其断开,而DB连接池并不知道该connection已经失效,如果这时有Client请求connection,
连接池将该失效的Connection提供给Client,将会造成异常。
0 条评论
下一页