14.13.1.5 재기동을 고속화하기 위한 InnoDB버퍼 풀의 프리 로드
특히 큰 InnoDB
버퍼 풀 을 가진 인스턴스의 경우 서버를 다시 시작한 후 매우 긴 워밍업 기간을 방지하기 위해 서버가 종료 될 때 InnoDB
버퍼 풀의 상태를 저장하고 서버 시작시 버퍼 풀을 같은 상태로 복원 할 수 있습니다.
바쁜 서버를 다시 시작한 후 일반적으로 InnoDB
버퍼 풀에 있던 디스크 페이지가 메모리에 반환됨에 따라 (동일한 데이터에 대한 쿼리 나 업데이트가 실행되면서) 처리량이 꾸준히 향상 워밍업 기간이 존재합니다. 버퍼 풀을 종료 이전 상태로 복원하는 기능은 DML 작업의 해당 행에 대한 액세스를 기다리는 것이 아니라 다시 시작하기 전에 버퍼 풀에 있던 디스크 페이지를 즉시 다시로드 할 수 있기 때문에 워밍업 기간 이 짧아집니다. I / O 요청을 큰 일괄 적으로 수행 할 수 있기 때문에 I / O 전체가 더 빨라집니다. 페이지로드는 백그라운드에서 실행되므로 데이터베이스의 시작이 지연 될 수는 없습니다.
버퍼 풀의 상태를 종료 할 때 저장하고 시작할 때 복원 할뿐만 아니라 서버의 실행 중에도 버퍼 풀의 상태를 언제든지 저장 및 복원 할 수 있습니다. 예를 들어, 정상 상태의 워크로드에서 안정적인 처리량에 도달 한 후 버퍼 풀의 상태를 저장할 수 있습니다. 그 조작 자체에만 필요한 데이터 페이지를 버퍼 풀로 이동하는 보고서 또는 유지 보수 작업을 수행 한 후 나 비표준 워크로드를 사용하는 다른 기간 후에 버퍼 풀의 이전 상태를 복원 할 수 있습니다.
버퍼 풀 자체의 크기는 무엇 G 바이트도있을 수 있지만, InnoDB
가 디스크에 저장하는 데이터는 그에 비해 매우 적은 양입니다. 해당 페이지를 찾기 위해 필요한 테이블 스페이스 ID 및 페이지 ID 만 디스크에 저장됩니다. 이 정보는 INNODB_BUFFER_PAGE_LRU
INFORMATION_SCHEMA
테이블에서 검색됩니다. 기본적으로 테이블 스페이스 ID 및 페이지 ID 데이터는 InnoDB
데이터 디렉토리에 저장되는 ib_buffer_pool
라는 파일에 저장됩니다. 이 파일 이름은 innodb_buffer_pool_filename
구성 매개 변수를 사용하여 변경할 수 있습니다.
기반이되는 메커니즘은 덤프 및로드 작업을 수행하기 위해 파견되는 백그라운드 스레드가 포함되어 있습니다.
압축 테이블에서 디스크 페이지는 그 압축 된 형식으로 버퍼 풀로드됩니다. DML 작업 과정에서 페이지의 내용이 액세스되면 압축 해제가 정상적으로 실행됩니다. 압축 해제는 CPU를 많이 사용하는 프로세스이기 때문에 병렬로 버퍼 풀의 복원 작업을 수행하는 단일 스레드가 아닌 연결 스레드 중 하나에서 작업을 수행하는 것이 효율적입니다.
기본적으로 버퍼 풀의 상태는 InnoDB
데이터 디렉토리에 저장되는 ib_buffer_pool
라는 파일에 저장됩니다. 이 파일 이름은 innodb_buffer_pool_filename
구성 매개 변수를 사용하여 변경할 수 있습니다.
버퍼 풀의 상태를 저장
서버가 종료 될 때 InnoDB
버퍼 풀의 상태를 저장하려면 다음 문을 실행합니다.
SET GLOBAL innodb_buffer_pool_dump_at_shutdown = ON;
MySQL 서버를 실행하는 동안 InnoDB
버퍼 풀의 상태를 저장하려면 다음 문을 실행합니다.
SET GLOBAL innodb_buffer_pool_dump_now = ON;
버퍼 풀의 상태 복원
서버 시작시 InnoDB
버퍼 풀의 상태를 복원하려면 서버를 시작할 때 --innodb_buffer_pool_load_at_startup
옵션을 지정합니다.
mysqld --innodb_buffer_pool_load_at_startup = ON;
MySQL의 실행 중에 InnoDB
버퍼 풀의 상태를 복원하려면 다음 문을 실행합니다.
SET GLOBAL innodb_buffer_pool_load_now = ON;
버퍼 풀 덤프 진행률 표시
InnoDB
버퍼 풀의 상태를 디스크에 저장하는 동안 진행률을 표시하려면 다음 옵션 중 하나를 사용합니다.
SHOW STATUS LIKE 'innodb_buffer_pool_dump_status';
또는
SELECT variable_value FROM information_schema.global_status WHERE variable_name = 'INNODB_BUFFER_POOL_DUMP_STATUS';
작업이 아직 완료되지 않은 경우 "not started"가 반환됩니다. 작업이 완료되는 경우, 완료 시간이 출력됩니다 (예 : Finished at 110505 12:18:02). 작업이 진행중인 경우에는 상태 정보가 표시됩니다 (예를 들어, Dumping buffer pool 5/7, page 237/2873).
버퍼 풀로드 진행률 표시
InnoDB
버퍼 풀을로드 할 때 진행률을 표시하려면 다음 옵션 중 하나를 사용합니다.
SHOW STATUS LIKE 'innodb_buffer_pool_load_status';
또는
SELECT variable_value FROM information_schema.global_status WHERE variable_name = 'INNODB_BUFFER_POOL_LOAD_STATUS';
작업이 아직 완료되지 않은 경우 "not started"가 반환됩니다. 작업이 완료되는 경우, 완료 시간이 출력됩니다 (예 : Finished at 110505 12:23:24). 작업이 진행중인 경우에는 상태 정보가 표시됩니다 (예를 들어, Loaded 123/22301 pages).
버퍼 풀로드 중지
버퍼 풀로드 작업을 중단하려면 다음 문을 실행합니다.
SET innodb_buffer_pool_load_abort = ON;