实验结果显示,当设置最大连接数为100,最大空闲连接数为1,并发请求10个goroutine时,大量连接被关闭,统计显示MaxIdleClosed数量激增。反之,当最大空闲连接数为20时,无MaxIdleClosed关闭统计。抓包验证同样显示,当并发数大于MaxIdConns时,出现关闭连接现象,符合代码逻辑。总结指出,高并发场景下,超出...
MySQL的MaxIdleConns不合理,会变成短连接
石墨文档线上业务性能问题案例分析
石墨文档在线业务在遇到突发流量时,服务性能出现急剧下降。经过排查发现,问题源于数据库连接管理。具体表现为数据库配置中MaxIdleConns参数设置不当,导致连接管理出现问题。
深入分析发现,Go MySQL客户端配置关键在于MaxIdleConns和MaxOpenConns两个参数。当最大空闲连接数小于客户端与数据库建立的连接数时,客户端将关闭最大连接数计数器,导致连接被关闭,形成短连接。在高并发场景下,请求量过大,超出最大空闲连接数负载,新连接在尝试加入连接池时被关闭。
实验结果显示,当设置最大连接数为100,最大空闲连接数为1,并发请求10个goroutine时,大量连接被关闭,统计显示MaxIdleClosed数量激增。反之,当最大空闲连接数为20时,无MaxIdleClosed关闭统计。抓包验证同样显示,当并发数大于MaxIdConns时,出现关闭连接现象,符合代码逻辑。
总结指出,高并发场景下,超出MaxIdleConns负载导致新连接被关闭,形成短连接,影响服务性能。优化措施包括调整MaxIdleConns与MaxOpenConns参数设置,确保两者匹配,合理管理连接,以及在服务器端实现缓冲机制,以应对突发流量。
实验代码用于验证逻辑正确性和不同场景下的表现。2024-10-29