9

MySQL で実行時間の長いプロセスがあります。1週間実行されています。レプリケーション マスターへの接続がもう 1 つありますが、スレーブの処理を停止したので、他に何も起こっていません。

このプロセスがまだ機能しているかどうかを確認するにはどうすればよいですか? 時間がかかることはわかっていたので、独自のデータベース インスタンスに配置しましたが、これは予想よりも長くなります。明らかに、それがまだ機能している場合、私はそれを殺したくありません。それがゾンビ化されている場合、それが行うべき作業をどのように実行するかわかりません。

「データ送信中」状態です。テーブルは InnoDB のものですが、クエリで使用される FK 参照はありません。InnoDB ステータスは、クエリが開始されてからエラーやロックを示していません。

どんな考えでも大歓迎です。

4

4 に答える 4

8

「SHOWPROCESSLIST」を試して、何がアクティブであるかを確認してください。

もちろん、あなたがそれを殺した場合、それはそれをロールバックするのと同じくらいの時間がかかりたいかもしれません。

于 2009-04-06T23:00:51.293 に答える
3

それを殺して、より良いインデックスを考え出す必要があります。

私は男のために仕事をしました。約3500万行のテーブルがありました。彼のバッチ プロセスは、あなたと同じように1 週​​間実行されていましたが、終わりが見えませんでした。いくつかのインデックスを追加し、彼のバッチ プロセスの順序と方法にいくつかの変更を加え、全体を約 2時間半に短縮しました。より遅いマシンで。

于 2009-04-06T22:37:58.087 に答える
0

あなたが言ったことを考えると、それは立ち往生していません。ただし、妥当な時間で実際に終了するという保証はまったくありません。インデックスを追加すると、ほぼ確実に役立ちます。クエリの種類によっては、一時テーブルを使用する一連のクエリにリファクタリングすると、パフォーマンスが大幅に向上する可能性があります。たぶん終わるのを待つことはお勧めしません。

于 2009-11-21T18:55:17.237 に答える
0

そのサイズのデータ​​ベースでパフォーマンスを向上させるには、mongoDB などのドキュメント ベースのデータベースを検討することをお勧めします。データベースを格納するためにより多くのハード ドライブ容量が必要になりますが、現在のスキーマによっては、パフォーマンスが大幅に向上する場合があります。

于 2010-01-29T18:18:53.687 に答える