お客様のデータベースを追加のサーバーに移動した後、問題が発生しました。これはサイトのパフォーマンスにプラスの影響を与えるはずでしたが、MyISAMのテーブルロックに問題があります。(MyISAMの代わりにInnoDBを使用することを聞いたことがありますが、近い将来エンジンを変更することはできません)。
モデレーターが記事サイトのコメントをアクティブ化するときに実行されるupdate-queryにそれを見つけることができます。これはプロセスです:
- update-queryが処理されます
SET status = 1 WHERE id = 5
(インデックスが設定されます) - ページのキャッシュファイルが削除されます
この時点で、ページ全体が遅くなります。データベース自体は数分間ビジーです。私はプロセスリストを数回フェッチし、さまざまな選択クエリの約60のエントリを確認しました。これらはすべて、テーブルレベルのロックを待機している状態でした。
1.テーブルに対するこの更新が、テーブルレベルのロックを待機するテーブルのarticle_comments
select-statementsに影響を与える理由がわかりませんarticle
。プロセスリストでは、待機中のほとんどすべてのクエリがこのテーブルからのものでした。selectよりもupdate / insertが優先され、これがそのような問題を引き起こす可能性があるという事実を読みましたが、記事テーブル自体はコメントがアクティブになっても更新されないので、selectは待つべきではありません。私はそれを誤解しましたか?
2.この動作を防止するため、または少なくともより良いバランスを得るために、InnoDBに変更する以外に何かありますか?データベースを新しいサーバーに移動する前にこの問題が発生しなかったという事実に非常に苛立ちました。いくつかの設定ミスがあると思いますが、特定する方法がわかりません。
key_buffer_size
はに設定されていました1GB
。10GB
問題を減らすためにそれを増やします。