[AWS RDS MySQL] InnoDB cache warming
- 버퍼풀 정보를 저장하고 시작시 로드하여 워밍업 단계 생략하기
l Version : AWS RDS MySQL 5.6 later
InnoDB cache warming(캐시워밍)은 DB 인스턴스가 종료될 때 버퍼 풀의 현재 상태를 저장한 다음 DB 인스턴스가 시작될 때 저장된 버퍼 풀 정보를 다시 로드하여 MySQL DB 인스턴스에 대한 성능 향상을 제공할 수 있다. 이 뜻은 정상적인 데이터베이스 사용에서 버퍼풀의 워밍업 할 필요를 무시하고 대신 알려진 공통 쿼리에 대한 페이지로 버퍼풀을 미리 로드한다. 버퍼풀 정보를 저장하는 파일은 페이지 자체가 아니라 버퍼풀에 있는 페이지에 대한 메타데이터만 저장한다. 따라서 결과적으로 파일에 많은 저장공간이 필요하지 않다. 파일크기는 캐시 크기의 약 0.2% 정도이다. 예를들어 64GB캐시의 경우 캐시 워밍업 파일은 약 128MB이다. 캐시워밍에 대한 자세한 내용은 MySQL 공식 문서인 아래 링크에서 확인할 수 있다.
l Saving and Restoring the Buffer Pool State : https://dev.mysql.com/doc/refman/8.0/en/innodb-preload-buffer-pool.html
AWS RDS에서는 MySQL 5.6 버전 이상에 대해서 InnoDB 캐시 워밍업을 지원한다. InnoDB 캐시 워밍업을 활성화 하려면 DB 인스턴스의 파라미터 그룹에서 innodb_buffer_pool_dump_at_shutdown, innodb_buffer_pool_load_at_startup 파라미터를 1로 설정해야 한다. 해당 파라미터 값을 변경하면 해당 파라미터 그룹을 사용하는 모든 MySQL DB 인스턴스에 영향이 있기 때문의 사용시 주의하도록 한다. 특정 MySQL에 대해서만 InnoDB 캐시 워밍업을 활성화 하려면 해당 인스턴스에 대한 새 파라미터 그룹을 생성 하도록 한다.
InnoDB 캐시 워밍은 주로 표준 스토리지를 사용하는 DB 인스턴스에 대한 성능 이점을 제공한다. PIOPS 스토리지를 사용하는 경우 일반적으로 상당한 성능 이점이 나타나지 않는다. InnoDB 캐시 워밍을 활성화 하였더라도 장애 조치중과 같이 MySQL DB 인스턴스가 정상적으로 종료되지 않으면 버퍼풀 상태가 디스크에 저장되지 않는다. 이 경우 MySQL은 DB 인스턴스가 다시 시작될 때 사용 가능한 모든 버퍼 풀 파일을 로드 한다. 이런 경우에도 데이터베이스에는 아무런 이상이 없지만 복원된 버퍼풀은 가장 최근의 상태를 반영하지 않을 수도 있다. 시작 시 InnoDB 캐시를 워밍업 하는데 사용할 수 있는 버퍼풀의 최신 상태를 사용하려면 주기적으로 버퍼풀을 덤프하는 것이 좋다.
버퍼풀의 현재 상태를 디스크에 저장하려면 아래 프로시저를 호출 한다.
CALL mysql.rds_innodb_buffer_pool_dump_now(); |
디스크에 저장된 버퍼풀의 상태를 로드하려면 아래 프로시저를 호출 한다.
CALL mysql.rds_innodb_buffer_pool_load_now(); |
진행중인 로드 작업을 취소하려면 아래 프로시저를 호출 한다.
CALL mysql.rds_innodb_buffer_pool_load_abort(); |
버퍼풀을 주기적으로 자동으로 덤프하는 이벤트를 생성하여 사용할 경우 수동으로 매번 호출할 필요가 없다. 아래 스크립트는 매시간 버퍼풀을 덤프하는 periodic_buffer_pool_dump라는 이벤트를 생성한다.
CREATE EVENT periodic_buffer_pool_dump ON SCHEDULE EVERY 1 HOUR DO CALL mysql.rds_innodb_buffer_pool_dump_now(); |
[참고자료]
l https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MySQL.html#MySQL.Concepts.VersionMgmt
l https://dev.mysql.com/doc/refman/8.0/en/innodb-preload-buffer-pool.html
l https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql_rds_innodb_buffer_pool_dump_now.html
l https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql_rds_innodb_buffer_pool_load_now.html
l https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql_rds_innodb_buffer_pool_load_abort.html
2022-03-17 / Sungwook Kang / http://sungwookkang.com
AWS RDS, MySQL, InnoDB Cache warming, 캐시워밍업, 버퍼풀, buffer pool
'AWS' 카테고리의 다른 글
[AWS RDS] Modify RDS instance type (0) | 2022.03.23 |
---|---|
[AWS RDS] Modify RDS SQL Server Standard Edition to Enterprise Edition (0) | 2022.03.22 |
[AWS Aurora] Aurora I/O Planning (0) | 2022.03.20 |
[AWS Aurora] Aurora Storage Engine (0) | 2022.03.19 |
[AWS RDS MySQL] RDS MySQL와 Aurora MySQL 차이점 (0) | 2022.03.18 |