2011-01-14 13 views
1

300,000行のテーブルを切り詰めようとしています。他のクエリが実行されていないときは、私はtruncateクエリを実行し、それはちょうどハングします。MySQLのトランケートがハングする

show processlist;は、状態が「更新中」であると言います。

Serverのバージョン:5.1.41-3ubuntu12.8(Ubuntuの)

テーブルはInnoDBのです。

これがどうして起こっているのか、問題をさらに詳しく調べる方法はありますか?

ありがとうございました。

+0

関連性があります。http://bugs.mysql.com/bug.php?id=44918 –

+0

はい、show create table tablenameの出力をリストしてください。外部キーがある場合、これが問題になる可能性があります。 – Gary

+0

これがデータベース内の唯一の大きなテーブルである場合、このテーブルなしでデータをダンプしてリロードすることができます。 #mysqldump dbName --ignore-table =監査 – shantanuo

答えて

5

によって削除されます、私はそれが問題をチェックする外部キーだと思います。

私は、次のようにすぐに期待どおりに動作することを発見しました:

SET FOREIGN_KEY_CHECKS = 0; 
TRUNCATE table_name; 
SET FOREIGN_KEY_CHECKS = 1; 
0

お客様のお1人様テーブル450GBのサイズがあります。そして、私たちはこのテーブルを空にするすべての方法を試みましたが、誰も問題を解決しませんでした。

我々は、テーブルを切り捨てるしようとしましたが、操作を切り捨てるには、10時間以上を取って、問題を解決しませんでした。そして、このテーブルの任意のクエリでWHERE statementを使用した場合、SQL Serverはクエリを停止せずに実行します。

次のように1秒で私ができるまで空のテーブルの唯一の方法だった。ただ、データベースを移動して、シュリンク、テーブルを切り捨てた後

set rowcount 1; 

truncate table TABLE_NAME; 

そしてもちろん。あなただけのテーブルのこのテーブルとデータ行へのポインタを削除し、このアプローチにより、

は縮小

0

回答のほとんど技術的ではないが、私はちょうど今日、この問題と格闘しながら。後者の場合は、私が読んでいたものを十分に理解できていませんでしたが)上記のすべて(ロックテーブル、外部キーチェック、innodbエンジンステータスのチェックなど)は役に立ちませんでした。

私は最終的に私が必要な変更を加えることができた時点でmysqlサービスを壊して再起動しましたが、問題はありません。

関連する問題