8.10.3 동시 삽입
MyISAM
스토리지 엔진은 특정 테이블에 대한 읽기 및 쓰기 충돌을 줄이기 위해 동시 삽입을 지원하고 있습니다. MyISAM
테이블의 데이터 파일에 틈새 (도중 삭제 된 행)이없는 경우 SELECT
문이 테이블의 행을 읽는 것과 동시에 INSERT
문을 실행하여 테이블 끝에 행을 추가 할 수 있습니다. 여러 INSERT
문이 있으면 그들은 대기, SELECT
문과 동시에 순차적으로 실행됩니다. 동시 INSERT
의 결과는 즉시 볼 수없는 수 있습니다.
concurrent_insert
시스템 변수를 설정하여 동시 삽입 작업을 변경할 수 있습니다. 기본적으로 변수는 AUTO
(또는 1)로 설정되어 동시 삽입이 전제와 같이 처리됩니다. concurrent_insert
가 NEVER
(또는 0)으로 설정되어있는 경우 동시 삽입은 비활성화됩니다. 변수가 ALWAYS
(또는 2)로 설정되어있는 경우 행이 삭제 된 테이블에 대해 테이블 끝에서 동시 삽입이 허용됩니다. concurrent_insert
시스템 변수의 설명을 참조하십시오.
동시 삽입을 사용할 수있는 상황에서는 INSERT
문 DELAYED
수식을 사용할 필요가 거의 없습니다. 섹션 13.2.5.2 "INSERT DELAYED 구문" 을 참조하십시오.
바이너리 로그를 사용하는 경우, 동시 삽입은 CREATE ... SELECT
또는 INSERT ... SELECT
문 정상적인 삽입으로 변환됩니다. 이것은 백업 조작 중에 로그를 적용하여 테이블의 정확한 복사본을 확실하게 다시 만들 수 있도록하기 위해 이루어집니다. 섹션 5.2.4 "바이너리 로그" 를 참조하십시오. 또한 이러한 진술에 대해서는 선택 원본 테이블에 삽입이 차단되도록 해당 테이블에 읽기 잠금이 설정됩니다. 그 결과, 그 테이블에 대한 동시 삽입도 대기해야합니다.
LOAD DATA INFILE
에서 동시 삽입의 조건 (즉, 중간에 빈 블록을 포함하지 않는)을 충족 MyISAM
테이블을 사용하여 CONCURRENT
를 지정하면 다른 세션은 LOAD DATA
의 실행 중에 테이블에서 데이터를 검색 할 수 있습니다 . CONCURRENT
옵션의 사용은 동시에 테이블을 사용하는 다른 세션이없는 경우에도 LOAD DATA
의 성능에 약간의 영향이 있습니다.
HIGH_PRIORITY
를 지정하면 서버가 --low-priority-updates
옵션으로 시작되는 경우에 그 효과가 무시됩니다. 또한 동시 삽입도 사용되지 않습니다.
LOCK TABLE
의 경우 READ LOCAL
과 READ
의 차이는 READ LOCAL
가 잠금을 유지하는 동안 충돌하지 않는 INSERT
문 (동시 삽입)의 실행을 허용하는 것입니다. 그러나 잠금을 보유하는 동안 서버의 외부 프로세스를 사용하여 데이터베이스를 조작하는 경우이를 사용할 수 없습니다.