[MySQL] REPAIR TABLE 최적화 문법
- Databases/MySQL
- 2020. 11. 2.
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 |