300,000行のテーブルを切り詰めようとしています。他のクエリが実行されていないときは、私はtruncateクエリを実行し、それはちょうどハングします。MySQLのトランケートがハングする
show processlist;
は、状態が「更新中」であると言います。
Serverのバージョン:5.1.41-3ubuntu12.8(Ubuntuの)
テーブルはInnoDBのです。
これがどうして起こっているのか、問題をさらに詳しく調べる方法はありますか?
ありがとうございました。
300,000行のテーブルを切り詰めようとしています。他のクエリが実行されていないときは、私はtruncateクエリを実行し、それはちょうどハングします。MySQLのトランケートがハングする
show processlist;
は、状態が「更新中」であると言います。
Serverのバージョン:5.1.41-3ubuntu12.8(Ubuntuの)
テーブルはInnoDBのです。
これがどうして起こっているのか、問題をさらに詳しく調べる方法はありますか?
ありがとうございました。
によって削除されます、私はそれが問題をチェックする外部キーだと思います。
私は、次のようにすぐに期待どおりに動作することを発見しました:
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE table_name;
SET FOREIGN_KEY_CHECKS = 1;
お客様のお1人様テーブル450GBのサイズがあります。そして、私たちはこのテーブルを空にするすべての方法を試みましたが、誰も問題を解決しませんでした。
我々は、テーブルを切り捨てるしようとしましたが、操作を切り捨てるには、10時間以上を取って、問題を解決しませんでした。そして、このテーブルの任意のクエリでWHERE statement
を使用した場合、SQL Serverはクエリを停止せずに実行します。
次のように1秒で私ができるまで空のテーブルの唯一の方法だった。ただ、データベースを移動して、シュリンク、テーブルを切り捨てた後
set rowcount 1;
truncate table TABLE_NAME;
そしてもちろん。あなただけのテーブルのこのテーブルとデータ行へのポインタを削除し、このアプローチにより、
は縮小
回答のほとんど技術的ではないが、私はちょうど今日、この問題と格闘しながら。後者の場合は、私が読んでいたものを十分に理解できていませんでしたが)上記のすべて(ロックテーブル、外部キーチェック、innodbエンジンステータスのチェックなど)は役に立ちませんでした。
私は最終的に私が必要な変更を加えることができた時点でmysqlサービスを壊して再起動しましたが、問題はありません。
関連性があります。http://bugs.mysql.com/bug.php?id=44918 –
はい、show create table tablenameの出力をリストしてください。外部キーがある場合、これが問題になる可能性があります。 – Gary
これがデータベース内の唯一の大きなテーブルである場合、このテーブルなしでデータをダンプしてリロードすることができます。 #mysqldump dbName --ignore-table =監査 – shantanuo