web-dev-qa-db-ja.com

デッドロックとロックタイムアウトタイプの問題を取り除く方法は?

私は複数のブログを読んでグーグルしようとしましたが、どの解決策からも満足感を見つけられませんでした。次の問題があります。

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_sizewait_timeoutを増やすことでこれを解決しようとしましたが、うまくいきませんでした。

キャッシュテーブルのエンジンをInnodbからMyIasmに変更しました。問題はなくなりましたが、完全な解決策ではありません。 drupalのアップグレード後にテーブルエンジンが変更されます。この問題はサイトの何にも影響を与えませんが、発生させたくありません。

ソリューションの人はいますか?

18
Sumit Madan

読んでフォロー この投稿 ; InnoDBを想定しています。

特に、settings.phpファイルに以下を追加するように言っている部分を参照してください。

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

デッドロックエラーを一度に取り除く最善の方法は、 非同期プリフェッチデータベースクエリキャッシュ モジュールです。

あまりお勧めできません。見事に書かれ、素晴らしいパフォーマンスの向上。

5
bmunslow

パッチを適用しようとしました https://www.drupal.org/project/drupal/issues/16509

それでもAWSで問題が発生しています

0
Ankit Shah