8.6.3 REPAIR TABLE 문 속도
MyISAM
테이블 REPAIR TABLE
은 복구 작업에 myisamchk를 사용하는 것과 유사하며 동일한 성능 최적화의 일부가 적용됩니다.
myisamchk는 메모리 할당을 제어하는 변수가 있습니다. 섹션 4.6.3.6 "myisamchk 메모리 사용량" 에 설명 된대로 이러한 변수를 설정하고 성능을 향상시킬 수 있습니다.
REPAIR TABLE
에서는 같은 원칙이 적용되지만, 복구는 서버에서 실행되기 때문에 myisamchk 변수 대신에 서버 시스템 변수를 설정합니다. 또한 메모리 할당 변수의 설정 이외에myisam_max_sort_file_size
시스템 변수를 늘리면 복구에 빠른 filesort 방법이 사용되어 키 캐시 방법으로 느린 복구를 피할 수있을 가능성이 높습니다. 테이블 파일의 복사본을 저장할 수있는 충분한 공간이 있는지 확인되면 시스템의 최대 파일 크기에 변수를 설정합니다. 원래 테이블 파일을 저장하고있는 파일 시스템에서 공간이 사용 가능해야합니다.
다음 옵션을 사용하여 그 메모리 할당 변수를 설정하여 myisamchk 테이블 복구 작업이 실행되었다고합니다.
--key_buffer_size = 128M --myisam_sort_buffer_size = 256M --read_buffer_size = 64M --write_buffer_size = 64M
그 myisamchk 변수의 일부는 서버 시스템 변수에 해당합니다.
myisamchk 변수 | 시스템 변수 |
---|---|
key_buffer_size | key_buffer_size |
myisam_sort_buffer_size | myisam_sort_buffer_size |
read_buffer_size | read_buffer_size |
write_buffer_size | none |
각 서버 시스템 변수는 실행시에 설정할 수 있고, 그들 중 일부 ( myisam_sort_buffer_size
, read_buffer_size
)는 글로벌 값 이외에 세션 값도 있습니다. 세션 값을 설정하여 현재 세션의 변경의 영향을 제한하고 다른 사용자에게 영향을주지 않습니다. 글로벌만을 변수 ( key_buffer_size
, myisam_max_sort_file_size
)을 변경하면 다른 사용자에게 영향을줍니다. key_buffer_size
의 경우 버퍼가 그들과 공유하는 것을 고려하고 있어야합니다. 예를 들어, myisamchk key_buffer_size
변수를 128M 바이트로 설정 한 경우 해당 key_buffer_size
시스템 변수를 더 크게 설정 (그것이 이미 크게 설정되어 있지 않은 경우) 다른 세션의 활동에 의한 키 버퍼의 사용을 허용 할 수 있습니다 . 그러나 글로벌 키 버퍼 크기를 변경하면 버퍼가 해제되고, 디스크 I / O가 증가하여 다른 세션이 느려집니다. 이 문제를 해결하는 대안은 개별 키 캐시를 사용하여 그것을 복구 할 테이블의 인덱스에 할당 복구가 완료되면 그 지정을 해제하는 것입니다. 섹션 8.9.2.2 "복합 키 캐시" 를 참조하십시오.
앞서의 설명에 따라 REPAIR TABLE
작업은 다음과 같이 실행하여 myisamchk 명령어와 유사한 설정을 사용할 수 있습니다. 여기에서는 개별 128M 바이트의 키 버퍼를 할당하고 파일 시스템은 100G 바이트 이상의 파일 크기를 허용하는 것으로합니다.
SET SESSION myisam_sort_buffer_size = 256 * 1024 * 1024; SET SESSION read_buffer_size = 64 * 1024 * 1024; SET GLOBAL myisam_max_sort_file_size = 100 * 1024 * 1024 * 1024; SET GLOBAL repair_cache.key_buffer_size = 128 * 1024 * 1024; CACHE INDEXtbl_name
IN repair_cache; LOAD INDEX INTO CACHEtbl_name
; REPAIR TABLEtbl_name
; SET GLOBAL repair_cache.key_buffer_size = 0;
글로벌 변수를 변경할 수 있지만 다른 사용자에 미치는 영향을 최소화하기 위해 REPAIR TABLE
조작 동안에 만 실행하도록하고 싶다면, 그 값을 사용자 변수에 저장하고 나중에 복원합니다 . 예 :
SET @old_myisam_sort_buffer_size = @@ global.myisam_max_sort_file_size; SET GLOBAL myisam_max_sort_file_size = 100 * 1024 * 1024 * 1024; REPAIR TABLE tbl_name; SET GLOBAL myisam_max_sort_file_size = @old_myisam_max_sort_file_size;
REPAIR TABLE
에 영향을 미치는 시스템 변수는 변수의 기본값을 사용하려면 서버 시작시 전역으로 설정할 수 있습니다. 예를 들어, 다음 줄을 서버의 my.cnf
파일에 추가합니다.
[mysqld] myisam_sort_buffer_size = 256M key_buffer_size = 1G myisam_max_sort_file_size = 100G
이러한 설정은 read_buffer_size
은 포함되지 않습니다. read_buffer_size
을 세계적으로 큰 값으로 설정하면 모든 세션에 대해 그것이 실행되고 많은 동시 세션이 서버에 과도한 메모리가 할당되기 때문에 성능이 저하 될 수 있습니다.