AWS RDS · Aurora 를 쓸 때
IMPORTANT — 중괄호 수식은 MySQL 문법이 아니다
GREATEST({DBInstanceClassMemory/32}, 209715200)같은 표기는 RDS 파라미터 그룹이 평가하는 RDS 고유 표기다. MySQL 서버는 이 문자열을 해석하지 못하므로my.cnf에 넣지 않는다. MySQL 시스템 변수는 정수·열거값·문자열만 받는다.
- 수식 문법은
{FormulaVariable},{FormulaVariable*Integer},{FormulaVariable*Integer/Integer},{FormulaVariable/Integer}네 가지다. 사용할 수 있는 변수는AllocatedStorage,DBInstanceClassMemory,DBInstanceVCPU,EndPointPort,TrueIfReplica다. - 연산자는 나눗셈과 곱셈 둘뿐이고 몫의 소수점은 반올림하지 않고 잘라낸다. 함수는
GREATEST,LEAST,SUM을 쓸 수 있고 함수명은 대소문자를 구분하지 않는다. 로그 수식의log는 밑이 2 다. DBInstanceClassMemory는 OS 와 RDS 프로세스용으로 예약된 메모리를 뺀 값이라 인스턴스 클래스 표의 메모리 수치보다 항상 다소 작다.- 파라미터 값이
engine default로 표시되어 있으면 실제 기본값은 해당 버전의 MySQL 문서에서 확인한다. - AWS 문서는 두 목록을 따로 제시한다. 하나는 Aurora MySQL 에 적용되지 않는 MySQL 파라미터이고, 다른 하나는 파라미터 그룹에서 수정할 수 없는 파라미터다.
- Aurora MySQL 에서 아예 적용되지 않는 MySQL 파라미터가 많다. AWS 문서가 드는 목록은 다음과 같고, 문서 스스로 이것이 전부가 아니라고 밝힌다.
- 데이터·리두 파일 —
innodb_data_file_path·innodb_redo_log_capacity·innodb_log_file_size·innodb_log_files_in_group·innodb_log_buffer_size - 페이지·버퍼풀 —
innodb_page_size·innodb_buffer_pool_chunk_size·innodb_buffer_pool_instances·innodb_change_buffering - I/O·플러시 —
innodb_doublewrite·innodb_flush_method·innodb_io_capacity·innodb_numa_interleave - undo —
innodb_undo_tablespaces
이 문서의 내구성·리두 항목 다수가 Aurora 에서는 효과가 없다.
- 데이터·리두 파일 —
- 수정할 수 없는 파라미터도 있다.
- 스토리지·엔진 —
default_storage_engine·innodb_page_size·innodb_data_home_dir·innodb_undo_directory - 복제·식별 —
server_id·sync_binlog·relay_log_recovery - 인증·권한 —
default_authentication_plugin·partial_revokes - 그 밖에 —
default_time_zone·skip_name_resolve·thread_handling·tmpdir
- 스토리지·엔진 —
- 파일 경로 계열은 사유가 다르다.
basedir·datadir·plugin_dir·secure_file_priv·general_log_file·slow_query_log_file는 파일시스템에 직접 접근하지 않는 관리형 인스턴스라서 설정 대상 자체가 아니다. gtid-mode와enforce_gtid_consistency는 Aurora MySQL 버전 2 이상에서 수정할 수 있다.event_scheduler는 버전 3 에서 클러스터 레벨로만 설정한다.lower_case_table_names는 Aurora MySQL 버전 3 에서 클러스터를 만드는 시점에 영구히 고정된다. 버전 2 에서는 수정할 수 있다. 글로벌 데이터베이스에서 이 값이 켜져 있으면 버전 2 에서 3 으로의 in-place 업그레이드가 불가능하다.innodb_flush_log_at_trx_commit은 수정할 수 있지만 AWS 는 기본값1을 쓰라고 강력히 권고한다. 버전 3 에서1이 아닌 값으로 바꾸려면 먼저innodb_trx_commit_allow_data_loss를1로 설정해야 하고(기본값0), 그것은 데이터 유실 위험을 인정한다는 뜻이다.- Aurora 의 임시 테이블 기본값은 커뮤니티 MySQL 과 다르다.
temptable_max_ram은 메모리 16GiB 이상 인스턴스에서 1GiB, 그보다 작은 인스턴스에서 16MB 다.temptable_max_mmap은 writer·reader 모두 1GiB 이며 인스턴스 메모리와 무관하다. reader 에서는0으로 설정할 수 없다. Aurora MySQL 8.4.7 이상은 이 기본값이LEAST(4294967296, {AllocatedStorage*3/100})로 바뀌었다. reader 는 항상 TempTable 엔진을 쓴다. aurora_tmptable_enable_per_table_limit은 인스턴스 레벨 파라미터로, Aurora MySQL 버전 3.04 이상에서tmp_table_size가 TempTable 엔진이 만든 인메모리 임시 테이블의 최대 크기를 제어할지 결정한다. 기본값은OFF이며 3.03 이하와 같은 동작이다.OFF일 때tmp_table_size는 TempTable 이 만든 내부 인메모리 임시 테이블에 고려되지 않는다. 전역 TempTable 한도에 닿으면 writer 는 InnoDB 디스크 임시 테이블로 전환한다. 그러나 reader 는 쿼리가 실패한다(ERROR 1114 (HY000): The table '/rdsdbdata/tmp/#sql...' is full).internal_tmp_mem_storage_engine=MEMORY이면 이 파라미터는 무효다.- 그 밖의 Aurora 기본값으로
time_zone은 UTC,character_set_database는utf8mb4,read_only는 버전 2 가{TrueIfReplica}이고 버전 3 이0이다. Aurora 는interactive_timeout과wait_timeout중 최솟값으로 모든 유휴 세션을 끊는다. - 비밀번호 정책은 Aurora MySQL 8.4.7 이상에서
aurora_enable_validate_password_component(기본0)로 관리하며INSTALL COMPONENT를 쓰지 않는다. 같은 버전대에서authentication_policy기본값은*:caching_sha2_password이고,validate_password.policy는 LOW 와 MEDIUM 만 지원한다. - RDS for MySQL 은 Aurora 와 파라미터 지원 범위가 다르다. 위 Aurora 항목을 그대로 적용하지 말고 해당 엔진과 버전의 파라미터 그룹 문서를 확인한다.
여기까지 세팅해 두면 시스템 규모가 커진 뒤에도 DB 에서 일어나는 일의 원인을 추적할 수 있다. 나중에 감사나 이관, DBA 합류 같은 단계가 와도 호환성과 데이터 무결성을 근거 있게 설명할 수 있다.
Advertisement