최적화된 AWS MariaDB 성능 튜닝 전략

AWS | mariaDB RDS 튜닝

튜닝을 해야 하는 것만 기록했다.

마리아 디비 [10.3.30 버전]

파라미터현재 설정값개념
character_set_clientutf8mb4클라이언트가 서버로 데이터를 보낼 때 사용하는 문자 인코딩 설정입니다.
character_set_connectionutf8mb4클라이언트가 서버에 보낸 쿼리의 문자셋을 서버 내부에서 변환할 때 사용됩니다.
character_set_databaseutf8mb4데이터베이스가 생성될 때 적용되는 기본 문자셋입니다.
character_set_filesystemutf8mb4파일 시스템에서 사용하는 문자셋입니다.
character_set_resultsutf8mb4서버가 클라이언트에 결과 데이터를 보낼 때 사용하는 문자셋입니다.
character_set_serverutf8mb4서버의 기본 문자셋으로 새 데이터베이스나 테이블에 적용됩니다.
collation_connectionutf8mb4_unicode_ci클라이언트와 서버 간 문자셋 비교 및 정렬 방법 설정입니다.
collation_serverutf8mb4_unicode_ci서버의 기본 문자 비교 및 정렬 방법 설정입니다.
event_schedulerONMySQL 이벤트 스케줄러를 활성화/비활성화하는 설정입니다.
general_log0모든 쿼리를 기록하는 일반 로그 설정입니다.
log_queries_not_using_indexes0인덱스를 사용하지 않는 쿼리를 기록하는 설정입니다.
long_query_time2느린 쿼리 로그에 기록될 기준 시간을 초 단위로 설정합니다.
slow_query_log0느린 쿼리를 기록하는 설정입니다.
time_zoneAsia/Seoul데이터베이스 서버의 시간대(Time Zone)를 설정합니다.
tx_isolationREAD-COMMITTED트랜잭션의 격리 수준 설정으로 일관성 있는 커밋된 데이터만 읽게 됩니다.
lock_wait_timeout86400

마리아 디비 [10.6.30 버전]

파라미터현재 설정값설명
character_set_clientutf8mb4클라이언트에서 사용하는 문자셋
character_set_connectionutf8mb4연결 시 문자셋 변환에 사용되는 설정
character_set_databaseutf8mb4데이터베이스의 기본 문자셋
character_set_filesystemutf8mb4파일 시스템에서 사용하는 문자셋
character_set_resultsutf8mb4서버가 결과를 반환할 때의 문자셋
character_set_serverutf8mb4서버의 기본 문자셋
collation_connectionutf8mb4_unicode_ci문자 정렬 및 비교 방법 설정
collation_serverutf8mb4_unicode_ci서버의 기본 문자 정렬 및 비교 규칙
log_bin_trust_function_creators1저장 함수 생성 시 권한 설정
time_zoneAsia/Seoul서버의 시간대 설정
tx_isolationREAD-COMMITTED트랜잭션의 격리 수준 설정으로 일관성 있는 커밋된 데이터만 읽게 됩니다
lock_wait_timeout86400

✅ 공통사항 (확인해봐야 할 사항)

SQL_BIG_SELECTS 튜닝

SQL_BIG_SELECTS=1
---
# NHN에서는
max_join_size 값을 최대값으로 변경하면 SQL_BIG_SELECTS=1로 변경됨.

📌 binlog 관련 튜닝(데이터베이스 이관 시, 지속적 복제 사용할 시)

파라미터설명옵션*RDS 기본값
binlog_format바이너리 로그의 형식`ROW`, `STATEMENT`, `MIXED`ROW
log_bin바이너리 로그 활성화 여부`ON`, `OFF``ON` (고정)
`log_bin_trust_function_creators`저장 함수 생성 시 권한 설정`0` (OFF), `1` (ON)`0`
sync_binlog로그 동기화 빈도`0`, `1`, `1`1
binlog_row_imageROW 포맷 이미지 범위`FULL`, `MINIMAL`, `NOBLOB`FULL
max_binlog_size하나의 로그 파일 최대 크기숫자 (Bytes)1GB
expire_logs_days바이너리 로그 보관 기간숫자(일), `0`7
binlog_cache_size바이너리 로그 캐시 크기숫자 (Bytes)32KB
binlog_checksum로그 무결성 체크섬 설정`NONE`, `CRC32`CRC32

innoDB 메모리 관련 튜닝

innodb_buffer_pool_size: {DBInstanceClassMemory*3/4}

🛠️ mariaDB 메모리 관련 튜닝

AWS 파라미터 기준.
----

thread_stack: 262144
net_buffer_length: 16384
read_buffer_size: 262144
sort_buffer_size: 2097152 -> 1048576
join_buffer_size: 262144
max_heap_table_size: 16777216
tmp_table_size: 16777216
binlog_cache_size: 32768
read_rnd_buffer_size: 16777216(16MB)[변경 전] -> 524288(512KB)[변경 후]

🛠️ max_connection 튜닝

AWS 파라미터 기준.
----
{DBInstanceClassMemory/12582880}

nhn.
----
ramSizeByte / 12582880

🛠️ connection 튜닝

바꾸려는 이유

특정시간 DB가 클라이언트의 연결을 끊어버리는 현상이 일어남

1. 파라미터 값 확인

- net_read_timeout  : 서버가 클라이언트로부터 데이터를 읽어들이는 것을 중단하기까지 대기하는 시간
- connect_timeout : 서버 접속시에 접속실패 메세지를 보내기까지 대기하는 시간
- max_allowed_packet : 서버로 질의하거나 받게되는 패킷의 최대 길이

---
net_read_timeout: 30 -> 60
connect_timeout: 10 -> 30
max_allowed_packet: 이미 최댓값. -> X

으로 바꿔 봄.

---

interactive_timeout 28800 => 7200 -> 3600
wait_timeout 28800 => 7200 -> 3600

🔖 MySQL 8.0.40 Version 추가 파라미터 튜닝

sql_mode: 
STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_ENGINE_SUBSTITUTION

댓글

댓글 남기기