ときどき、Drupal 6.20 システムから Mysql データベースへのデータベース接続数が 100 ~ 150 に達し、しばらくすると Web サイトがオフラインになります。Mysql に手動で接続しようとしたときのエラー メッセージは、「多くの接続エラーが原因でブロックされました。'mysqladmin flush-hosts' でブロックを解除してください」です。データベースは Amazon RDS でホストされているため、このコマンドを発行する権限はありませんが、データベースを再起動できます。再起動すると、ウェブサイトは再び正常に機能します。次回まで。
Drupal は、オフラインになる前に次の 2 種類の複数のエラーを報告します。
キー 'PRIMARY' クエリのエントリ '279890-0-all' が重複しています: 1, 0, 0) /var/www/quadplex/drupal-6.20/modules/node/node.module の 2267 行目。
ロック待機タイムアウトを超えました。トランザクション クエリを再起動してみてください。 /content.module の 1213 行目。
これら 2 つのクエリの nid は常に同じで、カスタム モジュールによって頻繁に自動的に更新される 2 つのノードを参照します。これらのエラーと異常に多くの Web リクエストとの相関関係を Apache ログで追跡できます。これにより、ウェブサイトが遅くなることは理解できます。しかし:
これらのエラーはなぜ発生し、どのように解決できますか? 同じノードを同時に更新しようとする複数のWebリクエストに関係しているようです。しかし、確かに Drupal はテーブルなどをロックすることでこれに対処する必要がありますか? それとも何か特別な方法で対処する必要がありますか?
Web 負荷が高いにもかかわらず、データベースが完全にロックされ、再起動が必要になるのはなぜですか? Web サイトがまだ Mysql にアクセスでき、負荷が軽減されたら再びページを提供できるようになれば、もっと良いのではないでしょうか? これには何か設定がありますか?
ありがとうございました!