2010-05-28 3 views
2

MyISAM 테이블에서 삭제를 실행하면 테이블이 최적화 될 때까지 테이블에 구멍이 남습니다.MyISAM 구멍이 자동으로 채워지나요?

이는 동시 삽입에 영향을줍니다. 기본 설정에서 concurrent_inserts는 홀이없는 테이블에서만 작동합니다. 그러나 MyISAM의 문서에서 concurrent_insert 섹션 아래에 다음과 같이 표시됩니다 :

구멍이있는 테이블을 포함하여 모든 MyISAM 테이블을 동시에 삽입 할 수 있습니다. 구멍이있는 테이블의 경우 새 스레드가 다른 스레드에서 사용중인 경우 테이블 끝에 새 행이 삽입됩니다. 그렇지 않으면 MySQL은 정상적인 쓰기 잠금을 획득하고 행을 구멍에 삽입합니다.

http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_concurrent_insert

그 뜻의 MyISAM은 자동으로 새 행이 테이블에 삽입 될 때마다 구멍에 채워? 이전에는 테이블을 최적화 할 때까지 구멍이 고정되지 않을 것이라고 생각했습니다.

답변

1

예, MyISAM 테이블은 삭제/여유 공간을 재사용합니다 (의 경우 모두 건, 나도 잘 모르겠다).

소수의 레코드를 삭제하고 새로운 레코드를 삽입하면 쉽게 볼 수 있습니다.이 테이블에 대한 MyISAM 데이터 파일의 크기는 커지지 않습니다.

1

테이블 중간에 삽입하면 잠금 장치가 필요합니다. 따라서 기본 설정에서 MySQL은 동시 삽입을 방지 할지라도 구멍 채우기를 선호합니다.

그래, MySQL은 구멍을 채우기를 선호합니다.

concurrent_inserts를 2로 설정하면 테이블에 잠금이있는 경우 끝에 채우는 구멍이 있어도 잠금이 필요하지 않은 끝에 삽입합니다. 따라서 중간에 구멍이 있어도 구멍을 채우는 시간이 오래 걸리지 만 동시에 삽입 할 수 있습니다.