[转帖]关于MYSQL数据库提示max_user_connections的错误解决办法_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2827 | 回复: 0   主题: [转帖]关于MYSQL数据库提示max_user_connections的错误解决办法        下一篇 
masy
注册用户
等级:少校
经验:1234
发帖:182
精华:0
注册:2011-11-4
状态:离线
发送短消息息给masy 加好友    发送短消息息给masy 发消息
发表于: IP:您无权察看 2014-12-11 14:09:35 | [全部帖] [楼主帖] 楼主

很多用户在使用工具数据库的时候经常会遇到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个即可,其他的不变!!
如果把最小连接数和初始连接数设置过大,则会影响数据库连接池的性能,弄巧成拙!

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论