这样设置mysql max_connections 有问题不?

一直不是很清楚数据库连接池相关的问题

我用的是hibernate +spring

现在我在做生成静态文件时常出现
Data source rejected establishment of connection message from server: "Too many connections";

在网上找解决方法:用的是

原因:

因为你的mysql安装目录下的my.ini中设定的并发连接数太少或者系统繁忙导致连接数被占满

解决方式:

打开MYSQL安装目录打开MY.INI找到max_connections(在大约第93行)默认是100 一般设置到500~1000比较合适,重启mysql,这样1040错误就解决啦。
max_connections=1000

原本100 现在突然设置到1000 有什么隐患?

网站同时访问人数 50左右

假设同时连接数据库达到了500 ,那么过了这个时间段,真正同时访问数据库的就60 ,那其它的460个线程是自己关掉了还是开在那里? 或什么时候他们会自己关掉?

2个回答

LZ的问题要分开来看才对.分成两部分第一部分:数据库(max-connection),第二部分应用程序(pool-size).在现在的应用程序里面我们都会用到一个叫数据库连接池的技术这个技术可以有效降低频繁构造和销毁数据库链接带来的性能销毁.对应数据库链接池我们有一个设置如pool-size,这个设置我们称为连接池的大小,就是初始化以后连接池里面有多少数据库链接数.这个pool-size不够用的时候,我们可以设置一个连接池的增长量不如每次增加10个,这些增加的在没用的情况下会被销毁掉.

现在LZ的问题是pool-size+增长量 > 数据库里面的max-connection的时候就会出现"Too many connections".也就是你对系统中可能的最大连接数的峰值评估不合理,修改max-connection是正常的行为.不过峰值是500,修改成1000也太过了.

而LZ的第二个问题
[quote]假设同时连接数据库达到了500 ,那么过了这个时间段,真正同时访问数据库的就60 ,那其它的460个线程是自己关掉了还是开在那里? 或什么时候他们会自己关掉?[/quote]
很明显,这部分与max-connection无关,这里需要的是数据库连接池的设置来控制. pool-size的大小决定了,当多余的链接不用时,具体会保留多少.多出来的一定会销毁掉的.

个人理解,望对LZ有用.

[color=red]那其它的460个线程是自己关掉了还是开在那里? 或什么时候他们会自己关掉? [/color]

自己关掉了啊,用户释放连接数据库就关闭.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问