AWS | mariaDB RDS 튜닝
튜닝을 해야 하는 것만 기록했다.
마리아 디비 [10.3.30 버전]
| 파라미터 | 현재 설정값 | 개념 |
| character_set_client | utf8mb4 | 클라이언트가 서버로 데이터를 보낼 때 사용하는 문자 인코딩 설정입니다. |
| character_set_connection | utf8mb4 | 클라이언트가 서버에 보낸 쿼리의 문자셋을 서버 내부에서 변환할 때 사용됩니다. |
| character_set_database | utf8mb4 | 데이터베이스가 생성될 때 적용되는 기본 문자셋입니다. |
| character_set_filesystem | utf8mb4 | 파일 시스템에서 사용하는 문자셋입니다. |
| character_set_results | utf8mb4 | 서버가 클라이언트에 결과 데이터를 보낼 때 사용하는 문자셋입니다. |
| character_set_server | utf8mb4 | 서버의 기본 문자셋으로 새 데이터베이스나 테이블에 적용됩니다. |
| collation_connection | utf8mb4_unicode_ci | 클라이언트와 서버 간 문자셋 비교 및 정렬 방법 설정입니다. |
| collation_server | utf8mb4_unicode_ci | 서버의 기본 문자 비교 및 정렬 방법 설정입니다. |
| event_scheduler | ON | MySQL 이벤트 스케줄러를 활성화/비활성화하는 설정입니다. |
| general_log | 0 | 모든 쿼리를 기록하는 일반 로그 설정입니다. |
| log_queries_not_using_indexes | 0 | 인덱스를 사용하지 않는 쿼리를 기록하는 설정입니다. |
| long_query_time | 2 | 느린 쿼리 로그에 기록될 기준 시간을 초 단위로 설정합니다. |
| slow_query_log | 0 | 느린 쿼리를 기록하는 설정입니다. |
| time_zone | Asia/Seoul | 데이터베이스 서버의 시간대(Time Zone)를 설정합니다. |
| tx_isolation | READ-COMMITTED | 트랜잭션의 격리 수준 설정으로 일관성 있는 커밋된 데이터만 읽게 됩니다. |
| lock_wait_timeout | 86400 |
마리아 디비 [10.6.30 버전]
| 파라미터 | 현재 설정값 | 설명 |
| character_set_client | utf8mb4 | 클라이언트에서 사용하는 문자셋 |
| character_set_connection | utf8mb4 | 연결 시 문자셋 변환에 사용되는 설정 |
| character_set_database | utf8mb4 | 데이터베이스의 기본 문자셋 |
| character_set_filesystem | utf8mb4 | 파일 시스템에서 사용하는 문자셋 |
| character_set_results | utf8mb4 | 서버가 결과를 반환할 때의 문자셋 |
| character_set_server | utf8mb4 | 서버의 기본 문자셋 |
| collation_connection | utf8mb4_unicode_ci | 문자 정렬 및 비교 방법 설정 |
| collation_server | utf8mb4_unicode_ci | 서버의 기본 문자 정렬 및 비교 규칙 |
| log_bin_trust_function_creators | 1 | 저장 함수 생성 시 권한 설정 |
| time_zone | Asia/Seoul | 서버의 시간대 설정 |
| tx_isolation | READ-COMMITTED | 트랜잭션의 격리 수준 설정으로 일관성 있는 커밋된 데이터만 읽게 됩니다 |
| lock_wait_timeout | 86400 |
✅ 공통사항 (확인해봐야 할 사항)
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_image | ROW 포맷 이미지 범위 | `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

