2

多くのデータベース (~30) をホストしている mysql サーバー (5.0.58) があります。数年前、いくつかのデータベースでパフォーマンスの問題が発生し始めましたが、最終的には、次のコマンドを使用して夜間の cron ジョブを実行してデータベースをチェック/最適化することで解決しました。

mysqlcheck --check --auto-repair --analyze --optimize --silent --all-databases

通常、このコマンドは 20 分ほどで実行されます。先月まで、これは魔法のように機能していました。このコマンドを実行すると、マシンの CPU が急上昇し、マシンはほとんど応答しなくなります。私にできる唯一のことは、mysqld サービスを再起動することです (ログインするためだけに 10 ~ 15 分待った後)。その際にmysqlのプロセス一覧を見ると、一部のテーブルもロックされているようですが、まだ調査中です。

このコマンドがサーバーをロックアップする理由を知っている人はいますか? これが役立つかどうかを確認するために、(--all-databases ではなく) 特定のデータベースにコマンドを制限しようと計画しています。

4

1 に答える 1

0

mysqlcheck がコンピュータを停止させるのはなぜですか?

おそらく、使用可能なすべての RAM を使い果たし、mysql が代わりに仮想スワップ領域を使用し始めているため、多くのディスクの読み取り/書き込みが必要になり、すべての CPU が使用されます。RAM を追加するか、一度に少数のデータベースで mysqlcheck を実行して、この理論をテストします。

おそらく、ハード ドライブの容量がいっぱいになり、(ドライブが完全にいっぱいでなくても) すべてが予約されているため、プロセスは利用可能なハード ドライブの容量を待つ必要があります。ハード ドライブのスペースを解放して、この理論をテストします。

おそらく、CPU がスラッシングしている可能性があります。つまり、CPU が行っている作業のほとんどは、タスクを実行するのではなく、タスクを切り替えていることを意味します。個々のデータベースでコマンドを順番に実行してみてください。

回避策:

mysqlcheck他のプロセスの実行を妨げずにログインできるように、優先度を下げて実行してみてください。使用しているオペレーティング システムによって異なります。

于 2013-01-15T20:12:03.680 に答える