Loading...
MySQL 9.5 Reference Manual 9.5의 10.11.5 External Locking의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
External locking은 여러 프로세스가 MyISAM 데이터베이스 테이블에 접근할 때, 파일 시스템 잠금을 사용하여 경합을 관리하는 것을 말합니다. External locking은 MySQL 서버와 같은 단일 프로세스만이 테이블 접근을 필요로 한다고 가정할 수 없는 상황에서 사용됩니다. 다음은 몇 가지 예시입니다:
동일한 데이터베이스 디렉터리를 사용하는 여러 서버를 실행하는 경우(권장되지 않음), 각 서버는 external locking이 활성화되어 있어야 합니다.
MyISAM 테이블에 대해 테이블 유지 관리 작업을 수행하기 위해 myisamchk를 사용하는 경우, 서버가 실행 중이 아니도록 하거나, 서버가 external locking을 활성화하여 필요한 경우 테이블 파일을 잠그게 해서 테이블에 대한 접근을 위해 myisamchk와 조정되도록 해야 합니다. MyISAM 테이블을 패킹하기 위해 myisampack을 사용할 때도 마찬가지입니다.
서버가 external locking이 활성화된 상태로 실행되는 경우, 읽기 작업(예: 테이블 검사)을 위해서는 언제든지 myisamchk를 사용할 수 있습니다. 이 경우, 서버가 myisamchk가 사용 중인 테이블을 갱신하려고 하면, 서버는 myisamchk가 작업을 마칠 때까지 기다린 후에 계속 진행합니다.
myisamchk를 사용하여 테이블을 복구(repair)하거나 최적화(optimize)하는 등의 쓰기 작업을 수행하거나, myisampack으로 테이블을 패킹하는 경우, 항상 mysqld 서버가 해당 테이블을 사용하지 않도록 해야 합니다. mysqld를 중지하지 않는다면, 최소한 mysqladmin flush-tables를 실행한 후에 myisamchk를 실행해야 합니다. 서버와 myisamchk가 동시에 테이블에 접근하면 테이블이 손상될 수 있습니다.
External locking이 적용되는 경우, 테이블에 접근해야 하는 각 프로세스는 테이블 파일에 접근을 시작하기 전에 해당 테이블 파일에 대한 파일 시스템 잠금을 획득합니다. 필요한 모든 잠금을 획득할 수 없는 경우, 해당 프로세스는 잠금을 획득할 수 있을 때까지(현재 잠금을 보유한 프로세스가 이를 해제한 후) 테이블에 접근하지 못하고 블록됩니다.
External locking은 서버가 다른 프로세스를 기다려야 하는 상황이 생길 수 있으므로 서버 성능에 영향을 미칩니다.
특정 데이터 디렉터리에 접근하는 단일 서버만 실행(일반적인 경우)하고, 서버가 실행 중일 때 myisamchk와 같은 다른 프로그램이 테이블을 수정할 필요가 없다면 external locking은 불필요합니다. 다른 프로그램으로 테이블을 읽기만 하는 경우에는 external locking이 필요하지 않지만, 서버가 테이블을 변경하는 동안 myisamchk가 해당 테이블을 읽고 있으면 myisamchk가 경고를 보고할 수 있습니다.
External locking이 비활성화된 상태에서 myisamchk를 사용하려면, myisamchk가 실행되는 동안 서버를 중지하거나, myisamchk를 실행하기 전에 테이블을 잠그고 플러시해야 합니다. 이러한 요구 사항을 피하기 위해, CHECK TABLE 및 REPAIR TABLE 문을 사용하여 MyISAM 테이블을 검사하고 복구하십시오.
mysqld의 경우, external locking은 skip_external_locking 시스템 변수 값으로 제어됩니다. 이 변수가 활성화되어 있으면 external locking은 비활성화되며, 그 반대도 마찬가지입니다. External locking은 기본적으로 비활성화되어 있습니다.
External locking 사용 여부는 서버 시작 시 --external-locking 또는 --skip-external-locking 옵션을 사용하여 제어할 수 있습니다.
여러 MySQL 프로세스에서 MyISAM 테이블에 대한 업데이트를 허용하기 위해 external locking 옵션을 사용하는 경우, delay_key_write 시스템 변수를 ALL로 설정하거나, 어떤 공유 테이블에도 DELAY_KEY_WRITE=1 테이블 옵션을 사용하지 마십시오. 그렇지 않으면 인덱스 손상이 발생할 수 있습니다.
이 조건을 만족하는 가장 쉬운 방법은 항상 --external-locking을 --delay-key-write=OFF와 함께 사용하는 것입니다. (많은 환경에서 위 옵션들을 혼합해서 사용하는 것이 유용하기 때문에, 이는 기본값으로 설정되어 있지 않습니다.)
10.11.4 Metadata Locking
10.12 Optimizing the MySQL Server