MySQL数据库连接数

最近在学习性能测试时,注意到数据库连接池对系统性能的影响,所以在网上查看资料后,做了个简单的总结。

一、什么是数据库连接池

数据库连接池是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态的对连接池中的连接进行申请、使用和释放等操作。

二、数据库传统连接机制和数据库连接池连接机制的差别

传统连接机制:

1.通过数据库驱动程序连接数据库

2.执行sql语句

3.断开数据库连接

连接池连接机制:

1.程序初始化时创建连接池

2.使用时向数据库申请连接

3.使用完成后,将连接返回连接池,以便下次使用

4.程序退出时,释放连接池

三、查看数据库连接

1.SHOW PROCESSLIST:查看数据库打开的连接信息

2.SHOW VARIABLES LIKE 'MAX_CONNECTIONS':查看当前的最大连接数

3.SET GLOBAL MAX_CONNECTIONS=100:设置最大连接数

4.SHOW STATUS LIKE '%THREADS%':


含义:Threads_cached:当已有连接不再使用之后,mysql server不是直接断开连接,而是将已有连接转入到thread_cache中,以便下次在有create thread的需求时,可以在cache中复用,提高性能,降低资源消耗,当然,如果已经有了中间件或者其他的连接池管理,那么这个参数就没有那么重要了,但是如果没有其他的连接池管理,那么优化这个参数还是可以得到不错的回报的。

Threads_connected:打开的连接数,thread_connected等于show processlist的连接数量

Threads_created:新创建的thread(根据官方文档,如果thread_created增大迅速,需要适当调高thread_cache_size)

Threads_running:代表正在运行的thread

5.SHOW VARIABLES LIKE 'connect_timeout':查看数据库连接超时时间(单位:秒)

SET GLOBAL connect_timeout=10:设置数据库连接超时时间(单位:秒)

6.SHOW VARIABLES LIKE 'wait_timeout':查看数据库等待连接超时时间(单位:秒),超过时间数据库会杀死连接

SET GLOBAL wait_timeout=10:设置数据库等待超时时间(单位:秒)

四、数据库连接数持续偏高的原因

1.耗时长的sql较多,导致连接时间增大,导致占用连接数

解决:查看数据库慢查询日志slow_query_log,找到查询耗时长的sql,对sql进行优化(添加索引、优化sql语句等)

2.大量连接请求,导致数据库连接数不够用

解决:适当增加数据库最大连接数或连接池的数量

3.sql语句执行完成后,未及时关闭连接,导致连接数占用和内存溢出

解决:sql执行完成后,及时关闭连接释放资源,将连接返回给连接池(如果有连接池管理)

4.sql语句执行时,程序异常退出,导致占用连接数

解决:手动杀死无用连接,或适当减小wait_time

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容