mysql错误处理


1、数据库服务器断开连接后,客户端大量执行(我的问题出现随4000次左右query出现)query,造成MySQL client ran out of memory。

mysql的连接会偶发性的断掉,所以每次mysql_query()之前应该检查是否在连接状态(如何检查?,没发现有直接使用的api)。或执行query之后检查mysql_errno(),如果为CR_SERVER_GONE_ERROR或CR_SERVER_LOST,则需要重连。

mysql cpi (mysql_connect\mysql_query)报MySQL client ran out of memory错误,要仔细检查mysql句柄是否释放(一个MYSQL_RES句柄(mysql_store_result()得到)未是否会导致16kB内存泄漏),如果循环使用了这个过程,会造成大量泄漏而导致mysql 客户端内存耗尽,从而造成后续的重新连接也无法成功。

mysql 客户端可以有三四百M(自己粗略计算)内存用于传输数据。

简单解决方法:

每次query失败检查错误码,如果为CR_SERVER_GONE_ERROR或CR_SERVER_LOST,则做一次重连再试。

务必保证mysql_store_result()得到的结果集使用后做了释放。

 


2、连接数过多造成。

RealOpen(), mysql_real_connect FAILED: Can't create a new thread (errno 11); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug。

当db server对连接数的限制较低时,可能出现。

解决方法:

应用对数据库的连接数尽可能要少,以减少对db server连接内存(读缓冲区、写缓冲区)的占用。

(通常每个连接占用接近100M缓冲区(待考证))。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值