[MySQL] REPAIR TABLE 최적화 문법

MyISAM 테이블의 REPAIR TABLE 명령은 수리 작업에 myisamchk 사용하는 것과 유사하며 동일한 성능 최적화중 일부가 적용됩니다.

+ myisamchk에는 메모리 할당을 제어하는 변수가 있습니다. 변수를 설정하여 성능을 향상시킬 있습니다. 아래에서 설명합니다.

+ REPAIR TABLE 경우에도 동일한 원칙이 적용되지만 수리는 서버에서 수행하므로 myisamchk 변수 대신 서버 시스템 변수를 설정합니다. 또한 메모리 할당 변수를 설정하는 외에도 myisam_max_sort_file_size시스템 변수를 늘리면 복구가 빠른 파일 정렬 방법을 사용하고 캐시 방법에 의해 느린 복구를 회피할 가능성이 높아집니다. 테이블 파일의 사본을 보유하기에 충분한 여유 공간이 있는지 확인한 변수를 시스템의 최대 파일 크기로 설정합니다. 원래 테이블 파일을 포함하는 파일 시스템에서 여유 공간을 사용할 있어야 합니다.

 

myisamchk 테이블 복구 작업이 다음 옵션을 사용하여 메모리 할당 변수를 설정하여 수행되었다고 가정합니다.

--key_buffer_size=128M --myisam_sort_buffer_size=256M
--read_buffer_size=64M --write_buffer_size=64M

 

이러한 myisamchk 변수 일부는 서버 시스템 변수에 해당합니다.

myisamchk Variable

System Variable

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 변수를 128MB 설정 경우 해당 key_buffer_size 시스템 변수를 그보다 크게 설정하여 (아직 크게 설정하지 않은 경우) 다른 세션의 활동에서 버퍼 사용을 허용 있습니다. 그러나 전역 버퍼 크기를 변경하면 버퍼가 무효화되어 디스크 I/O 증가하고 다른 세션의 속도가 느려집니다. 문제를 방지하는 방법은 별도의 캐시를 사용하고 복구할 테이블의 인덱스를 여기에 할당한 다음 복구가 완료되면 할당을 취소하는 것입니다.

 

위의 설명에 따라 myisamchk 명령과 유사한 설정을 사용하기 위해 다음과 같이 REPAIR TABLE 작업을 수행 있습니다. 여기서 별도의 128MB 버퍼가 할당되고 파일 시스템은 최소 100GB 파일 크기를 허용하는 것으로 가정합니다.

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 INDEX tbl_name IN repair_cache;
LOAD INDEX INTO CACHE tbl_name;
REPAIR TABLE tbl_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 전역 적으로 값으로 설정하면 모든 세션에 적용되며 동시 세션이 많은 서버에 과도한 메모리 할당으로 인해 성능이 저하 있습니다.

'Databases > MySQL' 카테고리의 다른 글

[MySQL] CHECKSUM TABLE  (0) 2020.11.06
[MySQL] CHECK TABLE & Repair TABLE  (0) 2020.11.03
[MySQL] Optimize Table & Analyze Table  (0) 2020.10.30
[MySQL] SHOW PROCESSLIST 명령  (0) 2020.10.28
[MySQL] Table Column 정보확인  (0) 2020.10.27

Designed by JB FACTORY