2009-06-13 4 views
1

가끔 "테이블이 손상된 것으로 표시되어 복구가됩니다"와 같은 오류가 나타납니다. 그 DB (테이블) MyISAM을 사용하고 있습니다. 최근에 그런 일이 계속 발생합니다. 원인이 무엇일까? 가장 최근에 내가 배치가MyISAM 테이블이 손상되면

INSERT INTO table (..., ..., ...) VALUES (...), (...), (...) ...

를 삽입 실행하고 있고 그냥 걸어. 완료하기까지 오랜 시간이 걸리거나 내게 매달린 것처럼 보입니다. 그 다음날, 나는 테이블이 부패한 것으로 다시 표시되었는지 확인했다. 나는 mysqlcheck -r을 사용하려고 할 때 모든 테이블이 OK라고 말하면 "손상된"테이블에 도달했을 때 다시 테이블에 매달려있다. ...

그래서 이것을 방지하려면 어떻게해야 할까? 원인이 무엇이 될 수 있습니다. DB를 제 3 자 호스팅, 어떻게 내가 이것을 디버깅 할 수 있습니까?

은 InnoDB보다 안정적인 엔진입니까? MyISAM이 더 빠르다고 들었지만 다른 사람들은 InnoDB가 빠르다고 들었지만 그것을 최적화하기 위해서는 더 많은 시간이 필요했습니다. InnoDB가 더 안정적이지만 최적화와 함께 전반적으로 더 느린 것으로 결론 내릴 수 있습니까?

답변

0

ok, 회사의 db가 호스팅 회사에서 허용하는 저장 공간을 초과했기 때문에 문제가 발생했습니다. 그래서 아무도 그들이 사용량을 초과했다는 회사에 말하지 않았습니다 ... 형편없는 호스트입니다.

btw, theres는 mysql이 abt this를 알 수 없었을 것입니다.

+0

감사합니다. InnoDB 삽입이 2 배 느리고 count (*)가 너무 느린 경우에도 InnoDB를 사용해야합니다. (읽기 비슷한) –

3

테이블이 손상받을 경우, 당신이 그들을 해결하기 위해 복구 테이블 명령을 사용할 수 있습니다

REPAIR TABLE table; 

를 서버가 계속 실행 (및 인서트/선택 테이블을 타격) 동안 myisamchk를 실행하는 경우, 그것을 테이블을 왜곡시킬 수 있습니다. 내가 부딪히는 대부분의 손상 문제는 서버가 실행 중일 때 서버 외부에서 작업 (파일 복사 등)을 시도 할 때 발생합니다.

InnoDB는 MyISAM이 생략하는 기능 (ACID 호환, 행 수준 잠금)을 가지고 있으므로 읽기 전용 데이터베이스의 경우 속도가 느립니다. 그러나, 혼합에 따라 읽기와 쓰기가 혼합되어 있다면 InnoDB는 전체 테이블을 잠글 필요가 없기 때문에 심각한 성능 향상을 제공 할 수 있습니다. 또한 부패 문제가 발생하지 않습니다.

+0

내가 select, check table 또는 mysqlcheck -r과 같은 쿼리를 실행하려고 할 때 create table을 보여 주려고해도 그냥 거기에 매달릴 것입니다. 내가 할 수있는 건 뭐니? – iceangel89

+0

수리를 실행 했습니까? 아직 실행 중인지 ("show processlist"를 수행 할 수 있음). 대부분 테이블 또는 메타 데이터가 완료 될 때까지 액세스 할 수 없습니다 (쓰기 잠금이 있음). 복구는 큰 테이블에서 잠시 걸릴 수 있습니다. 인덱스를 다시 작성해야합니다. –

1

InnoDB로 이동하십시오.