如何摆脱死锁和锁定超时类型问题?


17

我读过多个博客,尝试过搜索google,但没有从任何解决方案中获得满意的结果。我有以下问题:

PDOException: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction: DELETE FROM {cache_field} WHERE (cid LIKE :db_condition_placeholder_0 ESCAPE '\\') ; Array ( [:db_condition_placeholder_0] => field\_info:% ) in cache_clear_all() (line 163 of \includes\cache.inc).

PDOException: SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction: SELECT 1 AS expression FROM {sessions} sessions WHERE ( (sid = :db_condition_placeholder_0) AND (ssid = :db_condition_placeholder_1) )

我试图通过在my.ini中增加innodb_pool_buffer_size和来解决此问题,wait_timeout但没有成功。

我将缓存表的引擎从Innodb更改为MyIasm。问题已经解决,但这不是一个完美的解决方案。在升级drupal之后,表引擎将被更改。此问题不会影响网站上的任何内容,但我不希望这种情况发生。

有解决方案的人吗?


您正在定期执行cron吗?成功完成了吗?
mpdonadio

是cron成功运行。
Sumit Madan

是什么让您认为升级时缓存表引擎将被更改?这不是我的经验。
keithm 2014年

我的意思是,如果我升级了drupal,则缓存表将从MyIasm更改为Innodb。没有???
Sumit Madan

Answers:


16

阅读并关注这篇文章;它假定为InnoDB。

特别是,请参阅将以下内容添加到settings.php文件的部分。

$databases['default']['default']['init_commands'] = array('isolation' => "SET SESSION tx_isolation='READ-COMMITTED'");

在Give链接中,他只是在谈论cache_field死锁。但是在我的站点上,所有高速缓存表上都发生了死锁和锁等待超时。
Sumit Madan

嗨,迈克,谢谢您的链接。我检查了您的其他帖子,并将其添加到settings.php $databases['default']['default']['init_commands'] = array('isolation' => "SET SESSION tx_isolation='READ-COMMITTED'");解决了我在本地服务器上的问题。我尚未在实时服务器上检查它。如果您经过测试,请确认它将来不会出现任何问题?我正在使用商务启动。
Sumit Madan

我实时使用所有建议,听到有关drupal.org使用已读提交的报告。另外,请确保使用最新的d7版本,因为它也具有死锁修复功能。
mikeytown2'4

1
Mikeytown2从您的发言中我了解到,现在drupal 7版本已经解决了吗?想知道它,因为我仍然在最新版本中遇到相同的问题。
Marko Blazekovic

1
@MarkoBlazekovic死锁的大多数主要问题在D7中已解决了一半。数据库缓存表仍然存在一些死锁和元数据锁定问题。我正在研究一个解决它们的模块:drupal.org/project/apdqc。我的测试中的APDQC几乎解决了有关缓存表的每个数据库锁定问题。安装状态报告后,请务必修复状态报告中的所有问题。请注意,该模块仍处于开发阶段,因为我尚未发布该模块的非开发版本。
mikeytown2

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.