我们有一个已经部署到50多个网站的应用程序。 在这些网站中,我们注意到了一些奇怪的行为,现在我们已经跟踪到了一个特定的查询。 有时候,通常每天有一两次,我们的一个debugging脚本报告
2006 : MySQL server has gone away
我知道这个错误可以抛出的原因有很多,但是最奇怪的是每次抛出它时都会发生同样的SQL查询。 这个查询没有什么奇怪或复杂的,它看起来像这样:
SELECT `advert_only` FROM `products` WHERE `id` = '6197'
该查询必须每天运行数万次,针对各种不同的产品ID,因此每次都不会失败。 它在我们的4台服务器上看似随机的网站上随机失败。 似乎没有共同点,我们注意到的一件小事情是,它有时会针对一个特定的人连续进行2或3页的加载,因为我们也跟踪发生的人的IP。
这是在运行MySQL 5.0.81的CentOS 5服务器上
该死的爆炸我的低声誉! 我不能发表上面的问题/评论。 所以我很抱歉,这不是一个答案,但希望它可能会导致你在正确的方向。
你是否更新产品表? 你看到任何关联? 你能够运行没有锁的SELECT,读取未提交的行吗?
如果您不需要将查询限制为已提交的数据,则应在select之前包含此声明以避免locking问题:
set transaction isolation level READ UNCOMMITTED;
此外,为了防止“消失”消息与性能相关,您是否在“id”列上有索引?
我认为,错误只是部分与该查询有关。 也许产品表是极端大,并发生超时(??)。 也许你应该检查指标是否分散。
看到这个链接的可能原因: http : //dev.mysql.com/doc/refman/5.1/en/gone-away.html请参阅此链接进行碎片整理: http : //dev.mysql.com/doc/refman/ 5.1 / EN / InnoDB的文件,defragmenting.html
我期望它崩溃或者你的应用服务器和mysql服务器之间有networking问题。
如果服务器崩溃,您会在日志中看到很多消息。 你看到日志上有什么东西吗?
如果你正在运行一个32位的盒子,那么这个崩溃可能是由于你没有考虑到你的调整中的地址空间而导致的。 不要调整它,使得使用的虚拟内存大于2G,否则你遇到了麻烦。
如果可以避免的话,不要运行32位的MySQL。