mysql 并发 连接池 连接不复用

174 views
Skip to first unread message

tylerpiece

unread,
Apr 18, 2017, 11:18:02 PM4/18/17
to openresty
mysql采用连接池处理。
我使用工具压力在服务器上测并发,连接池大小设为1000,并发1200。
并用get_reused_time查看连接复用情况。
发现resued的次数都是0,超过1000的连接,日志显示mysql connect timeout,连接不会复用,且会限制超过连接池大小的连接,

单次的请求,是可以看到reused的值会增加

我的mysql 处理如下
local db, err = mysql:new()
  if not db then
      ngx.log(ngx.ERR,"new mysql error : ", err)
   
  end
db:set_timeout(30000)
local res, err, errno, sqlstate = db:connect(mysql_props_dnps)
if not res then
    ngx.log(ngx.ERR,"connect to mysql error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate)
    db:close()
end

function close_db(db)
    if not db then
        return
    end
    local pool_max_idle_time = 20000 --ms
    local pool_size = 1000 --connections
    local ok, err = db:set_keepalive(pool_max_idle_time, pool_size)
    if not ok then
        ngx.log(ngx.ERR,"set keepalive error : ", err)
    end
end

当我把set_keepalive注释掉,改为db:close()
我的并发1200都可以成功。
说明set_keepalive 的连接池的数量限制是生效了的。

是因为我短时间内大量并发,导致连接复用失败?





 

FQ Liu

unread,
Apr 18, 2017, 11:53:25 PM4/18/17
to openresty, tyler...@163.com
连接池的大小影响的是缓存的长连接的数量,不会限制最大的连接数。

在 2017年4月19日星期三 UTC+8上午11:18:02,tylerpiece写道:

tylerpiece

unread,
Apr 19, 2017, 2:58:48 AM4/19/17
to open...@googlegroups.com
我看懂了。是我连接池设置太大了。导致将数据库的最大连接数全部占用为长连接,且短时间不会释放,
导致多的向数据库的连接无法建立,最后超时。
将连接池的数量设置小一些,留一些给灵活的短连接使用是有必要的。
--
--
邮件来自列表“openresty”,专用于技术讨论!
订阅: 请发空白邮件到 openresty+subs...@googlegroups.com
发言: 请发邮件到 open...@googlegroups.com
退订: 请发邮件至 openresty+unsub...@googlegroups.com
归档: http://groups.google.com/group/openresty
官网: http://openresty.org/
仓库: https://github.com/agentzh/ngx_openresty
教程: http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html


 

Yuansheng Wang

unread,
Apr 19, 2017, 6:10:34 AM4/19/17
to open...@googlegroups.com
连接池的大小,应该是日常业务下并发到后端数据库连接数量决定更合适。

订阅: 请发空白邮件到 openresty+subscribe@googlegroups.com
发言: 请发邮件到 open...@googlegroups.com
退订: 请发邮件至 openresty+unsubscribe@googlegroups.com


 

--
--
邮件来自列表“openresty”,专用于技术讨论!
订阅: 请发空白邮件到 openresty+subscribe@googlegroups.com
发言: 请发邮件到 open...@googlegroups.com
退订: 请发邮件至 openresty+unsubscribe@googlegroups.com



--

membphis
Reply all
Reply to author
Forward
0 new messages