很多用户在使用工具数据库的时候经常会遇到ERROR 1226 (42000): User 'dbjavams' has exceeded the 'max_user_connections' resource (current value: 20) 这个提示
如图:
1.jpg
提示说明: 这个提示是说连接数据库的并发超出 20个限定,所以不能在增加新的数据库连接!
小提示:使用jsp连接却没有问题,出现这个提示只是管理软件不能连接到数据库上,而网站却不受影响!
为什么会出现这个提示呢??
那是因为我们的jsp虚拟主机所有的数据库都有数据库并发的限制,比如个人A型jsp空间他的数据库并发的限制就是20个,如果您超出了20个数据库连接,第21个数据库的连接就不会被允许
这个问题一般是由于,您使用了数据库连接池造成的,我们的数据库并发限制是20个 ,您在您程序里面设置数据库连接池的最大连接是大于20个的话就会有这个提示出现!
应该怎么解决这个问题?
1: 把数据库连接池最大设置为18或者19,把最小连接设置为5 初始连接设置为5 停止tomcat等5分钟 (中间等5分钟数据库会自动释放以前被占满的数据库连接) 在启动tomcat,即可解决这个问题
2:关闭数据库连接池功能,使用jdbc直接连接数据库,这个问题就不会在出现(前提是每次连接数据库都会自动释放数据库连接,否则只申请数据库连接用完了却不释放数据库连接,20个数据库并发很快会用完)
高级部分:
什么是数据库并发??
数据库并发是指数据库可以同时被多少人操作,我们的每款jsp虚拟主机他的数据库并发限制都不一样, 比如您有20个数据库连接,当您jsp网页每调用一次数据库,他的这个数据库连接都会保存到我们的数据库系统里面,您jsp里调用完了这个数据库,调用 stmt.close(); conn.close(); 释放这个数据库连接,这个数据库连接才会消失,这样是一个完整的数据库并发!
比如用户从打开一个jsp网页到加载完毕用了1秒的时间,你们可以简单的理解为数据库并发的操作是1秒钟可以有20个人同时访问!! 如果您的jsp网页里面多次连接了数据库(5次),,那么就说明在1秒内,可以有4个人同时访问这个jsp网页!
所以很多人问,数据库并发是多长时间可以允许多少人访问,这个真很难回答,和网页连接了多少次数据库有关系和每次访问的加载时间 和用户的网速也有关系! 原理已经和大家说了,大家自己判断!
上面说的是正常情况下,还有一种可能是,部分用户申请完数据库连接后,忘记关闭这个数据库连接(这样的问题由于程序员的大意也是时有发生的),
如果您的代码一不小心忘记关闭数据库的连接,你们这个数据库连接就会一直保存着,直到他自动释放(我们公司的数据库自动释放时间是8小时),如果您大意忘记释放他,他就会占用您20个连接里面的1个连接,一直到20个并发用完,就会出现上面的那个提示!
由于我们的系统是8小时才自动释放,如果您忘记关闭数据库连接,你们就说明是8个小时才可以有20个数据库并发,这个是很恐怖的会严重影响您网站的访问…… 为此很多用户选择使用数据库连接池技术,来避免上述的问题发生!
什么是数据库连接池??
数据库连接池是不需要用户申请和释放数据库的连接,他会自动帮您管理数据库的连接用户只管使用这个连接,连接池呢会自动释放已经用过的连接,当连接不够用的时候他会自动申请新的连接,这样循环周而复始,保证数据库连接的可用性!!!大家可以理解为连接池是自动帮助用户管理数据库的连接的地方,这样就不会发生上面的数据库连接忘记关闭的问题
数据库连接池会在tomcat启动的时候就自动申请好数据库连接(申请多少数据库连接根据您的配置文件里设置的决定的),放在一个虚拟的池子里面,您调用数据库的时候从这个池子里拿,用完了池子会自动回收你已经用过的这个连接,为下一个连接做准备!
使用了数据库连接池,连接池会有一个配置文件,配置文件里可以规定他在启动的时候申请最大多少个连接,最小多少个连接,初始多少个连接,一个连接可以存活多久等!!
为什么限制我的并发??
由于越来越多的人使用数据库连接池,很多人会设置最大连接数比较大,几百,几千的都有,为了达到公平的效果…我们会限制每个用户最大数据库并发数,如果您设置的最大连接数超出了我们的限制,你们则以我们的为准,比如:您的限制是20个并发,您在程序里设置最大100个并发,那么您连接池实际可申请的最大并发为20个,这个时候您启动tomcat,可以正常的访问您的网站,但是您用工具去连接管理数据库,则连接不上出现上述提示!原因是20个数据库连接已经被您用完,没办法在进行连接管理数据库了!!
连接池应该设置多少比较合适?
以20个并发为例子 连接池我们建议设置
最大连接为:19
最小连接为:5
初始连接为:5
过期时间为:120秒
如果并发是30个的话只需要把上面的最大连接数设置为29个即可,其他的不变!!
如果把最小连接数和初始连接数设置过大,则会影响数据库连接池的性能,弄巧成拙!
--转自