[카테고리:] RDS

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

    최적화된 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