2011-01-14 3 views
1

300,000 개의 행이있는 테이블을 잘라내려고합니다. 실행중인 다른 쿼리가 없을 때 truncate 쿼리를 실행하면 쿼리가 중단됩니다.MySQL 자르기가 중단됩니다.

show processlist;은 상태가 "업데이트 중"이라고 말합니다.

Server 버전 : 5.1.41-3ubuntu12.8 (우분투)

표는 이노이다.

이 문제가 발생하는 이유 또는 문제를 더 자세히 조사 할 수있는 방법에 대한 의견이 있으십니까?

감사합니다.

+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

고객 우리는 450GB의 테이블을 가지고 있습니다. 그리고 우리는이 테이블을 비우는 모든 방법을 시도했지만 아무도 문제를 해결하지 못했습니다.

우리는 테이블을 자르려고했지만 작업을 잘라내어 시간이 걸렸고 문제를 해결하지 못했습니다. 그리고이 테이블의 임의의 쿼리에 WHERE statement을 사용하면 SQL Server는 쿼리를 중지하지 않고 실행합니다.

유일한 방법이 내가 위해 할 수있는 일초의 테이블은 다음과 같은했다 빈 :

set rowcount 1; truncate table TABLE_NAME; 

그리고 테이블을 절단 한 후에, 물론

, 그냥 가서 데이터베이스를 축소. 나는 그것이 외래 키 검사 문제라고 생각

0

는 대답하지 가장 기술적 인 동안, 난 그냥 오늘이 문제로 고생. 후자의 경우, 내가 읽었던 것을 충분히 이해하지 못했지만 위의 모든 것을 (잠금 테이블, 외래 키 검사, innodb 엔진 상태 검사, 기타 등등) 아무 것도 시도하지 않았습니다.

필자는 쓰기가 거부 된 메일 작업 테이블을 가지고 있습니다. 완전히 비 었음에도 불구하고 글자가 잘 리거나, 이름이 변경되거나, 삭제되었습니다. 마침내 mysql 서비스를 다시 시작하여 필요한 변경 작업을 할 수있었습니다.

관련 문제