1

Percona (3 つのマスター - マスター同期ノード、galera ロード バランサーを使用) を使用して SQL クラスター環境に移行し、すべてのデータベースを InnoDB に変換しました。CakePHP 1.3アプリケーションでこれを取得し続けます

2013-09-11 09:16:52 Sql_errors: セッション エラー: (1213: ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションを再起動してみてください) - ファイル:/cake/libs/cake_session.php - 行:759

2013-09-11 09:16:52 Sql_errors: セッション エラー: (1213: ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションを再起動してみてください) - ファイル:/cake/libs/cake_session.php - 行:759

2013-09-11 10:54:49 Sql_errors: セッション エラー: (1213: ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションを再起動してください) - ファイル:/cake/libs/cake_session.php - 行:759

2013-09-11 11:36:36 Sql_errors: セッション エラー: (1213: ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションを再起動してください) -

これは CakePHP のコアの一部であるため、変更を加えるのに少しうんざりしています。CakePHP でこの問題が発生したことがある人はいますか? また、それを回避するために役立つ提案はありますか?

4

1 に答える 1

0

ここで起こっていることの完全な説明については、Percona XtraDB Cluster: Multi-node writing and Unexpected deadlocks を参照してください。

TL;DR バージョン:

この問題への対処は、簡単に言えば、楽観的ロックを使用する同期レプリケーション システムでのマルチノード書き込みとのトレードオフです。

この問題を回避するために何ができますか? 最も単純なものから最も複雑なものまで、いくつかのアイデアを次に示します。

  • クラスター内の 1 つのノードにのみ書き込みます (一度に)

  • アプリケーション DB ライブラリを更新して突然のデッドロックを処理する

  • アプリケーション/スキーマを再構築してデータのホットスポットを回避する

于 2013-09-16T03:38:40.877 に答える