Skip to content
gqlxj1987's Blog
Go back

mysql最大连接数

Edit page

问题出现的背景

字体管家的后台接口返回很慢,登录到相关机器,发现机器的负载高达28,30左右,定位为数据库的问题

定位的思路

问题的结论

问题的主要的点,还是在于php使用mysql的方式。由于php没有像java的那种线程池,其对数据库的访问都是以短socket的方式来进行。由于将max-connection设置为5000,由于流量的增大,php就可以不断地获取到数据库的连接,从而进行相关数据的操作。但同时的访问很多,连接不断的增多,导致mysql所需要的资源也越多,这也解释了mysql导致系统负载偏高的原因。

关于最大连接数这个参数,由于php采用短socket的方式,连接->操作->释放,没有线程池的概念,所以,这块的最大连接数基本代表了1s内的数据库的请求并发数。但是,随着流量变大,请求的增多,请求所需要的连接数也会不断地增大。为了保证数据库操作的快速,迅捷,基本都会增加最大连接数这个参数,保证相关数据库操作能够快速地进行,而不是在那里等待上个数据库连接的释放。但是,增加连接数也带来了另一个问题,相关连接的资源消耗也是巨大的,包括cpu,内存,文件句柄数,网络等等。所以,最大连接数这部分也不宜太大。

问题出现的原因,就是最大连接数设置的太大,导致php请求,可以无限制地获取到数据库连接,请求的增多,导致瞬间增大了当前的数据库连接数,极大地增加了mysql的资源损耗,从而导致整体系统负载非常高。

问题的发散

以前的java由于存在连接池的概念,在应用里设置的获取的最大连接数也没超过200,对应日均2000的网站。那这块是否可以借鉴呢?


Edit page
Share this post on:

Previous Post
11.01一周总结
Next Post
10.25一周总结