ActiveRecord“ Mysql :: Error:超出了锁定等待超时”,没有明显的锁定
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ActiveRecord“ Mysql :: Error:超出了锁定等待超时”,没有明显的锁定,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1991字,纯文字阅读大概需要3分钟。
内容图文
![ActiveRecord“ Mysql :: Error:超出了锁定等待超时”,没有明显的锁定](/upload/InfoBanner/zyjiaocheng/884/35ab78d90597414f87cebc50709b7641.jpg)
Rails版本:2.3.8
在一天当中的很多次,我的应用程序似乎会随机返回500错误,并在生产日志中返回相应的条目:
ActiveRecord::StatementInvalid (Mysql::Error: Lock wait timeout exceeded; try restarting transaction: INSERT INTO `forum_posts` (`forum_topic_id`, `created_at`, `body`, `ancestry`, `updated_at`, `quote_limit`, `user_id`, `ancestry_depth`, `quote_root`) VALUES(1224783, '2011-01-24 19:18:38', 'Post body', '1285704', '2011-01-24 19:18:38', 1, 57931, 1, 1))
检查MySQL慢查询日志后,该条目显示为:
# Time: 110124 11:19:29
# User@Host: db_user[db_user] @ localhost []
# Query_time: 51 Lock_time: 0 Rows_sent: 0 Rows_examined: 0
SET insert_id=0;
INSERT INTO `forum_posts` (`forum_topic_id`, `created_at`, `body`, `ancestry`, `updated_at`, `quote_limit`, `user_id`, `ancestry_depth`, `quote_root`) VALUES(1224783, '2011-01-24 19:18:38', 'Post body', '1285704', '2011-01-24 19:18:38', 1, 57931, 1, 1);
根据Rails日志,ActiveRecord由于锁定等待超时而返回错误.这个简单查询的长期运行特性似乎也表明了这一点.问题是,缓慢的查询日志无处可以找到需要较长时间才能处理的实际查询-它们都与上述示例类似.另外,在同一日志中,没有一个条目的Lock_time值大于0.
在座的人是否对导致此明显锁的原因以及如何隔离锁有一个想法?我正在使用的当前工具似乎并没有太大帮助.
提前致谢.
解决方法:
也许这会有所帮助:
http://www.mysqlperformanceblog.com/2007/02/25/pitfalls-of-converting-to-innodb/
我们通常建议客户将其当前数据库从MyISAM表转换为InnoDB.
在大多数情况下,传输本身几乎是简单的,但是新的意外错误可能会破坏应用程序
1205(ER_LOCK_WAIT_TIMEOUT)
锁定等待超时已过期.交易已回滚.
1213(ER_LOCK_DEADLOCK)
交易僵局.您应该重新运行事务.
处理这些错误并不难,但是您应该意识到.
这是我们在PHP应用程序中所做的事情:
class mysqlx extends mysqli {
...
function deadlock_query($query) {
$MAX_ATTEMPS = 100;
$current = 0;
while ($current++ < $MAX_ATTEMPS) {
$res = $this->query($query);
if(!$res && ( $this->errno== '1205' || $this->errno == '1213' ) )
continue;
else
break;
}
}
...
}
您可能想以不同的方式处理ER_LOCK_WAIT_TIMEOUT,尤其是对于长时间等待不好的Web应用程序,您会明白的.
内容总结
以上是互联网集市为您收集整理的ActiveRecord“ Mysql :: Error:超出了锁定等待超时”,没有明显的锁定全部内容,希望文章能够帮你解决ActiveRecord“ Mysql :: Error:超出了锁定等待超时”,没有明显的锁定所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。