Как избавиться от проблем с блокировками и блокировками?


17

Я читал несколько блогов, пытался гуглить, но не нашел удовлетворения ни от одного решения. У меня есть следующие проблемы:

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) )

Я пытался решить эту проблему путем увеличения innodb_pool_buffer_sizeи wait_timeoutв my.ini, но не сработало.

Я изменил движок своей кеш-таблицы с Innodb на MyIasm. Проблема ушла, но это не идеальное решение. Движок стола будет изменен после обновления drupal. Эта проблема не затрагивает ничего на сайте, но я не хочу, чтобы это произошло.

Любое решение, ребята?


Вы используете периодический cron? Это успешно завершается?
mpdonadio

Да, cron успешно работает.
Сумит Мадан

Что заставляет вас думать, что движок кеш-таблицы будет изменен при обновлении? Это был не мой опыт.
Keithm

Я имею в виду, если я обновлю drupal, таблица кеша изменится с MyIasm на Innodb. Нет ???
Сумит Мадан

Ответы:


16

Прочитайте и следуйте этому посту ; это предполагает InnoDB.

В частности, смотрите раздел, в котором говорится, что нужно добавить следующее в файл settings.php.

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

В данной ссылке он говорит только о тупике cache_field. Но на моем сайте время ожидания взаимоблокировок и блокировок происходит во всех таблицах кеша.
Sumit Madan

Привет, Майк, спасибо за ссылку. Я проверил ваш другой пост и добавил это в settings.php, $databases['default']['default']['init_commands'] = array('isolation' => "SET SESSION tx_isolation='READ-COMMITTED'");решил мою проблему на локальном сервере. Я еще не проверил это на живом сервере. Пожалуйста, подтвердите, что это не даст никаких проблем в будущем, если оно будет проверено вами? Я использую коммерческий кикстарт.
Сумит Мадан

Я использую все рекомендации в прямом эфире, слышал сообщения о том, что drupal.org использует чтение совершено. Также убедитесь, что вы используете последнюю версию d7, поскольку она также имеет исправление тупика.
mikeytown2

1
Mikeytown2 Из того, что вы говорите, я понял, что теперь у версий drupal 7 это решено? интересно об этом, поскольку я все еще придумываю ту же проблему в последней версии.
Марко Блазекович

1
@MarkoBlazekovic Большинство основных проблем с блокировкой полностью решены в D7. В таблицах кэша базы данных по-прежнему существуют проблемы взаимоблокировки и блокировки метаданных. Я работаю над модулем, чтобы решить их: drupal.org/project/apdqc . APDQC из моего тестирования решает практически каждую проблему блокировки базы данных в отношении кеш-таблиц. Обязательно исправьте все проблемы в отчете о состоянии после его установки. Обратите внимание, что модуль все еще находится в стадии доработки, так как я еще не выпустил его версию без разработки.
mikeytown2

4

Лучший способ раз и навсегда избавиться от ошибок взаимоблокировки - это модуль Asynchronous Prefetch Database Query Cache .

Я не могу рекомендовать это достаточно. Блестяще написано и большой выигрыш в производительности.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.