web-dev-qa-db-ja.com

MySQLクエリはサイトをハングアップします

最近、Dreamhost共有ホスティングアカウントからLinode 512mbVPSに移動しました。切り替えは私のサイトの通常の日常の操作ではかなりスムーズですが、MySQLに関するいくつかの問題が発生しています。問題がMySQLにあるかどうかわからないため、セットアップの背景を少し説明します。

  • Ngnix 0.7.65
  • Ubuntu 10.04 LTS
  • MySQL 5.1.41

私が抱えている問題は、サイトの通常の操作の一部ではないクエリを実行するときはいつでも...(これは、テーブルの最適化、SELECT COUNTの実行、データセットに対する削除クエリの実行など、何でもかまいません。 )... Webサーバー全体がページをロードしないようにします。私のサイトのすべてのページにはデータベース呼び出しがありますが、作業中のテーブルと相互作用しないページはまだ読み込まれません。これらのクエリのいずれかが実行されているときにページにアクセスしようとすると、Nginxがエラー「502Bad Gateway」をスローする前に、ページの読み込みが約1分ほど試行されます。明らかに、これは5秒未満かかるCOUNTクエリの場合ほど問題ではありませんが、テーブルを最適化すると、サイトが5分以上ページをロードできなくなる可能性があります。

メインテーブルから上位100,000レコードを取得し、ランキングページ用に別のテーブルに保存する、毎晩実行されるスクリプトがあります。このスクリプトが実行されていたDreamhostでは、サイトのランキングページは空になりますが、サイトの残りの部分は引き続き動作しますが、VPSでは、最大6分のクエリが完了するまでサイトのページは読み込まれません。

これ以上の情報が役立つ場合は、私に知らせてください。喜んで提供させていただきます。私はこのサイトを検索しましたが、Googleはこれと同様の問題を経験したが、何も見つからない人を見つけるためにかなり執拗に試みました。これは単にMySQLの問題だと思いますか、それとも私のNginxが原因である可能性がありますか? (DreamhostではApacheを使用していました)。

ありがとう。

2
alexbaumhoer

SQLサーバーに接続し、クエリ「showprocesslist」を実行します。これにより、実行中のすべてのクエリとその現在の状態が表示されます。それらのほとんどすべてがLOCKEDの状態で表示されることを期待する必要があります。これは、他のクエリの1つが終了するのを待っていることを意味します。 ないロックされているものは、犯人になるためのあなたの候補です。

3
tylerl