본문 바로가기

DB(SQL)/mysql|maria

[DB] mysql 성능 관리하기 (공부해야 할 내용들) (feat. gcp)

반응형
gcp mysql 시스템 통계 분석 및 부하 해결 방법 알려줘

ChatGPT의 말:

ChatGPT

Google Cloud Platform(GCP) MySQL 시스템의 성능 통계 및 부하 해결 방안은 데이터를 분석하고 병목 지점을 해결하는 데 중점을 둡니다. 제공된 이미지들을 분석하며 설명하겠습니다.


1. 시스템 상태 분석

(1) 주요 지표 요약

  • 쿼리 처리 시간: 쿼리 처리에 걸리는 시간이 증가하는 구간이 확인됩니다.
  • InnoDB 성능: InnoDB fsync 및 페이지 읽기/쓰기 활동에서 피크가 주기적으로 발생.
  • 메모리 사용량: InnoDB 메모리 사용량 그래프에서 메모리가 계속 증가.
  • 디스크 사용량: 스토리지 한도에 근접, 잠재적인 스토리지 부족 우려.

(2) 문제점 요약

  • 쿼리 성능 문제:
    • 쿼리 처리 시간이 증가하는 구간은 특정 쿼리가 비효율적으로 동작하거나 과도한 부하가 발생하고 있을 가능성.
  • InnoDB 부하 증가:
    • 주기적인 fsync와 읽기/쓰기 패턴은 디스크 IO 병목을 야기할 수 있음.
  • 디스크 공간 부족:
    • 스토리지 한도 근접은 데이터 추가 또는 로그 증가로 인해 서비스 중단 위험을 초래할 수 있음.

2. 부하 해결 방법

(1) 쿼리 성능 최적화

  1. 슬로우 쿼리 분석:
    • 슬로우 쿼리 로그를 활성화하고 비효율적 쿼리를 식별합니다.
      sql
      코드 복사
      SET GLOBAL slow_query_log = 1; SET GLOBAL long_query_time = 1; -- 초 단위
    • 실행 계획(EXPLAIN)을 사용해 인덱스를 추가하거나 쿼리 최적화.
  2. 쿼리 캐시 설정 확인:
    • 쿼리 캐시를 통해 반복적인 동일 쿼리를 처리 성능을 향상:
      sql
      코드 복사
      SHOW VARIABLES LIKE 'query_cache_size'; SET GLOBAL query_cache_size = 16M; -- 필요에 따라 크기 조정
  3. ORM 최적화:
    • ORM 사용 시 필요하지 않은 SELECT 필드를 줄이고, N+1 쿼리 문제를 해결.

(2) InnoDB 설정 조정

  1. InnoDB 버퍼 풀 크기 조정:
    • 버퍼 풀 크기를 조정하여 더 많은 데이터를 메모리에서 처리:
      sql
      코드 복사
      SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; SET GLOBAL innodb_buffer_pool_size = 2G; -- 필요에 따라 조정
  2. InnoDB 플러시 정책 조정:
    • innodb_flush_log_at_trx_commit 설정을 변경하여 디스크 IO를 최적화:
      sql
      코드 복사
      SET GLOBAL innodb_flush_log_at_trx_commit = 2; -- 성능 우선 (1은 안전 우선)
  3. fsync 문제 해결:
    • 주기적 fsync 스파이크가 보일 경우 SSD 디스크를 활용하거나 IOPS를 증가.

(3) 디스크 공간 관리

  1. Binlog 및 불필요한 로그 관리:
    • 오래된 Binlog 삭제:
      sql
      코드 복사
      PURGE BINARY LOGS BEFORE NOW() - INTERVAL 7 DAY;
    • 일반 로그 및 슬로우 쿼리 로그 크기 제한:
      sql
      코드 복사
      SET GLOBAL log_output = 'TABLE';
  2. 스토리지 용량 증설:
    • GCP 콘솔에서 Cloud SQL 스토리지를 증설합니다.

(4) 클라이언트 및 네트워크 최적화

  1. 데이터 압축 활용:
    • MySQL 데이터 전송 시 압축 활성화:
      sql
      코드 복사
      SET GLOBAL net_buffer_length = 16384; -- 클라이언트와 서버의 네트워크 버퍼 크기 조정
  2. 연결 수 제한:
    • 연결 수를 제한하여 서버 자원 사용량을 줄임:
      sql
      코드 복사
      SET GLOBAL max_connections = 200; -- 필요에 따라 조정

3. 모니터링 강화

  • Cloud Monitoring 설정:
    • CPU, 메모리, IO 지표에 대한 알림 규칙 추가.
  • 자동 스케일링:
    • GCP Cloud SQL에서 자동 스케일링 옵션 활용.

위 작업을 통해 현재 GCP MySQL에서 발생하는 성능 문제를 완화하고 안정성을 높일 수 있습니다. 추가적인 도움이 필요하면 말씀해주세요!

4o

나의 말:

1. query_cache_size 값 조회 안됨 2. innodb_buffer_pool_size : 10737418240 3. InnoDB 플러시 정책 조정 했을때 장단점 4. fsync 문제 해결 더 정확하게 상세하게 설명 5. Binlog 및 불필요한 로그 관리 더 상세하게 설명 6. 스토리지 용량 증설 : 스토리지 여유 있는데 왜? 7. 클라이언트 및 네트워크 최적화 : 더 자세히 상세히 알려줘
 

ChatGPT의 말:

ChatGPT

요청하신 각 항목에 대해 자세히 설명드리겠습니다.


1. query_cache_size 값 조회 안됨

  • 원인: MySQL 8.0에서는 query_cache 기능이 완전히 제거되었습니다. 따라서 관련 설정은 더 이상 사용할 수 없습니다.
  • 대안:
    • 쿼리 최적화, 인덱스 추가, 슬로우 쿼리 개선 등으로 성능을 높이는 방향으로 진행해야 합니다.
    • 쿼리 캐시의 필요성이 높은 경우, 외부 캐시 솔루션(Redis, Memcached 등)을 사용하는 것을 권장합니다.

2. innodb_buffer_pool_size: 10737418240

  • 현재 설정된 버퍼 풀 크기(약 10GB)는 적절해 보이지만, 더 큰 데이터셋을 처리하거나 더 많은 쿼리를 캐싱하려면 크기를 늘릴 수 있습니다.
  • 권장 설정:
    • 총 RAM의 60~80%를 InnoDB 버퍼 풀 크기로 설정.
    • 시스템 메모리가 부족하거나 과부하가 발생하는 경우 조정 필요.

3. InnoDB 플러시 정책 조정 장단점

  • innodb_flush_log_at_trx_commit 설정 값:
    • 1 (기본값): 각 트랜잭션 커밋 시 디스크에 플러시.
      • 장점: 데이터 무결성 보장. 장애 발생 시 데이터 손실 최소화.
      • 단점: 디스크 IO 부하 증가, 성능 저하.
    • 2: 로그 버퍼를 디스크가 아닌 OS 캐시에 기록.
      • 장점: 성능 개선. 디스크 쓰기 부담 감소.
      • 단점: 장애 발생 시 OS 캐시에 남은 데이터 손실 가능.
    • 0: 로그를 디스크에 기록하지 않고 메모리에서 유지.
      • 장점: 성능 극대화.
      • 단점: 장애 발생 시 데이터 손실 가능성 높음.
  • 결론: 데이터 안전성이 가장 중요하면 1, 성능을 우선하면 2로 설정. 0은 매우 위험하므로 테스트 환경에서만 권장.

4. fsync 문제 해결

(1) 문제 정의:

  • fsync는 데이터를 디스크에 동기화하는 작업으로, 디스크 IO 병목의 주요 원인 중 하나입니다.
  • 주기적인 fsync 스파이크는 디스크의 쓰기 처리량이 한계를 초과하거나 불필요한 플러시 작업이 빈번하게 발생할 때 나타납니다.

(2) 해결 방안:

  1. SSD 디스크 활용:
    • 고성능 SSD(예: NVMe SSD)로 디스크를 업그레이드.
    • SSD는 HDD 대비 IO 대기 시간이 짧아 fsync 부하를 크게 줄일 수 있음.
  2. IOPS 증대:
    • GCP에서 디스크의 IOPS 한도를 늘리거나, IOPS가 높은 디스크 유형으로 변경.
  3. fsync 호출 최적화:
    • innodb_flush_method를 O_DIRECT로 설정:
      sql
      코드 복사
      SET GLOBAL innodb_flush_method = 'O_DIRECT';
      디스크 캐시를 우회하여 더 효율적으로 데이터를 기록.
  4. InnoDB 로그 파일 크기 조정:
    • 로그 파일 크기 증가로 fsync 작업 빈도 감소:
      sql
      코드 복사
      SET GLOBAL innodb_log_file_size = 256M; -- 필요에 따라 조정
  5. InnoDB 플러시 정책 조정:
    • 앞서 설명한 innodb_flush_log_at_trx_commit 값을 2로 설정하여 디스크 쓰기 빈도를 줄임.

5. Binlog 및 불필요한 로그 관리

(1) Binlog 관리:

  1. Binlog 보존 기간 설정:
    • 필요 이상으로 오래된 Binlog를 제거:
      sql
      코드 복사
      SET GLOBAL binlog_expire_logs_seconds = 604800; -- 7일(초 단위)
  2. 수동 삭제:
    • 불필요한 Binlog를 수동으로 제거:
      vbnet
      코드 복사
      PURGE BINARY LOGS TO 'binlog.000005';
  3. Binlog 파일 크기 최적화:
    • 파일 크기를 조정해 로그 파일이 너무 커지지 않도록 설정:
      sql
      코드 복사
      SET GLOBAL max_binlog_size = 256M;

(2) 불필요한 로그 관리:

  1. 슬로우 쿼리 로그 크기 제한:
  2. sql
    코드 복사
    SET GLOBAL slow_query_log_file = '/path/to/log'; SET GLOBAL max_slow_query_log_size = 100M; -- 로그 크기 제한
  3. 일반 로그 비활성화:
    • 디버깅에만 사용하고 평소에는 비활성화:
      sql
      코드 복사
      SET GLOBAL general_log = 0;

6. 스토리지 용량 증설: 스토리지 여유 있는데 왜?

  • 현재 스토리지 여유가 있어도 다음과 같은 이유로 사전 증설이 필요할 수 있습니다:
    1. 자동 증설 방지: GCP에서는 스토리지 부족 시 자동 증설되며, 비용이 증가하고 서비스 중단 위험이 있습니다.
    2. 로그 증가 대비: Binlog, 슬로우 쿼리 로그 등의 크기 증가로 인해 여유 공간이 급격히 줄어들 수 있습니다.
    3. 성능 최적화: 디스크 용량이 꽉 차면 IO 성능이 저하되므로 여유 공간을 확보해야 합니다.

7. 클라이언트 및 네트워크 최적화

(1) 네트워크 압축 활성화

  • 클라이언트-서버 간 전송되는 데이터 압축을 활성화하여 대역폭 절약:
    sql
    코드 복사
    SET GLOBAL protocol_compression_algorithms = 'zlib,uncompressed';

(2) 연결 풀 사용

  • 연결 풀링: 각 쿼리마다 연결을 생성/해제하면 부하가 증가하므로, 연결 풀링을 사용해 성능을 최적화.
    • Java에서는 HikariCP 같은 연결 풀 도구 활용.
    • 설정 예:
      java
      코드 복사
      dataSource.setMaximumPoolSize(50); // 최대 연결 수

(3) 네트워크 패킷 크기 조정

  • 패킷 크기를 조정해 전송 효율 개선:
    sql
    코드 복사
    SET GLOBAL max_allowed_packet = 64M; SET GLOBAL net_read_timeout = 60; -- 읽기 타임아웃

(4) 시간 초과 설정 최적화

  • 비활성 연결로 자원이 낭비되지 않도록 타임아웃 설정:
    sql
    코드 복사
    SET GLOBAL wait_timeout = 300; -- 비활성 연결 종료 시간 (초 단위)

요약

위의 방안들을 통해 GCP MySQL의 현재 부하 문제를 개선할 수 있습니다. 추가적인 로그 분석 또는 구성 조정이 필요하다면 구체적으로 알려주세요!

4o

나의 말:

1. ram 16GB 여서 잘 설정된듯하다. 2. innodb_flush_log_at_trx_commit 를 1로 했을 때 2로 했을때 장단점을 좀 더 상세하게 알려줘 3. fsync 문제 해결 - ssd를 이미 사용하고 있다. - iops 가 무엇인가? 늘릴경우 어떤 장단점이 있는가? - innodb_flush_method엔 어떤 옵션들이 있고 O_DIRECT로 했을때 장단점이 무엇인가 - innodb_log_file_size : 536870912 4. Binlog 가 뭐야? 삭제하면 장단점을 알려줘 binlog_expire_logs_seconds 86400 max_binlog_size 104857600 5. gcp에서 로그를 관리하고자할때 불필요한 로그 관리에 대해서 좀 더 상세한 설명을 해달라 6. 네트워크 압축 활성화 이거 했을때 장단점
 

ChatGPT의 말:

ChatGPT

1. RAM 16GB에서의 innodb_buffer_pool_size

  • 16GB RAM을 기준으로 innodb_buffer_pool_size가 약 10GB(10,737,418,240 바이트)로 설정된 것은 적절해 보입니다. 이 설정은 데이터가 주로 InnoDB 테이블에 저장되고, 쿼리 성능을 최적화하려는 경우 매우 효율적입니다.

2. innodb_flush_log_at_trx_commit의 1과 2 설정 장단점

1 (기본값)

  • 장점:
    1. 각 트랜잭션 커밋 시 디스크에 동기화(flush)하므로 장애 발생 시 데이터 무결성이 보장됩니다.
    2. 서버 충돌이나 갑작스러운 전원 장애에서도 데이터 손실이 거의 없습니다.
  • 단점:
    1. 디스크 IO가 빈번히 발생해 성능 저하 가능성.
    2. SSD의 수명을 단축시킬 가능성이 있음(SSD의 쓰기 한계 때문).

2

  • 장점:
    1. 로그를 디스크가 아닌 OS 캐시에 기록하므로 쓰기 부하가 감소.
    2. 트랜잭션 처리량과 서버 성능이 크게 개선됨.
  • 단점:
    1. 장애 시 OS 캐시에 남아있는 로그가 손실될 수 있어 데이터 유실 가능성.
    2. 장기적으로 데이터 안전성이 중요하다면 위험할 수 있음.

결론: 성능이 중요한 읽기 중심 시스템에서는 2를, 데이터 안전성이 중요한 트랜잭션 중심 시스템에서는 1을 선택하세요.


3. fsync 문제 해결

(1) IOPS란?

  • **IOPS (Input/Output Operations Per Second)**는 스토리지 디바이스가 초당 처리할 수 있는 입출력 작업의 수를 나타냅니다.
  • 장점:
    1. 높은 IOPS는 더 많은 동시 IO 작업을 처리할 수 있어 성능 개선.
    2. 특히, 랜덤 읽기/쓰기 작업이 많은 워크로드에서 효과적.
  • 단점:
    1. IOPS를 높이기 위해 더 비싼 스토리지(예: NVMe SSD)를 사용해야 함.
    2. 비용이 크게 증가할 수 있음.

(2) innodb_flush_method의 옵션

  • 옵션 목록:
    • fsync (기본값): 데이터와 메타데이터를 디스크에 기록. 가장 호환성이 높지만 느릴 수 있음.
    • O_DIRECT: 데이터 캐싱 없이 직접 디스크에 기록. 캐시와 관련된 CPU 사용량 감소.
    • O_DSYNC: 데이터만 동기화하고 메타데이터는 무시. 디스크 쓰기 작업이 줄어듦.
    • nosync: 플러시 동작을 완전히 비활성화. 테스트 환경에만 사용.
  • O_DIRECT의 장단점:
    • 장점:
      1. 디스크 캐시를 우회하여 성능이 더 예측 가능.
      2. 데이터 무결성이 중요하지 않은 경우 성능 향상.
    • 단점:
      1. 작은 IO 작업이 많은 경우 성능이 저하될 수 있음.
      2. 디스크의 물리적 특성에 따라 성능이 크게 영향을 받을 수 있음.

(3) innodb_log_file_size: 536,870,912

  • 현재 로그 파일 크기(512MB)는 적절한 설정으로 보입니다. 로그 크기를 늘리면 쓰기 빈도가 줄어들지만, 장애 발생 시 복구 시간이 길어질 수 있습니다.

4. Binlog란 무엇인가?

(1) Binlog 개념

  • Binary Log(Binlog)는 MySQL에서 모든 데이터 변경 이벤트(INSERT, UPDATE, DELETE 등)를 기록하는 로그 파일입니다.
  • 주요 목적:
    1. 복제: 마스터-슬레이브 복제를 위해 슬레이브 서버로 변경 사항을 전달.
    2. 백업 및 복구: 데이터베이스 복구 시 특정 시점까지의 데이터를 복구 가능.

(2) Binlog 삭제 장단점

  • 장점:
    1. 디스크 공간 절약.
    2. 불필요한 로그 축적으로 인한 IO 부하 감소.
  • 단점:
    1. 슬레이브 복제 환경에서 필요한 로그가 삭제되면 복제가 중단될 수 있음.
    2. 특정 시점 복구(PITR)가 불가능.

(3) 현재 설정 분석

  • binlog_expire_logs_seconds: 24시간(86400초) 후 로그 자동 삭제.
  • max_binlog_size: 100MB로 설정되어 로그 파일 크기가 작아 관리 효율성이 높음.

권장 사항: 복제가 활성화된 환경에서는 보존 기간을 늘리고, 자동화된 백업이 잘 구축된 환경에서는 현재 설정이 적절합니다.


5. GCP에서 불필요한 로그 관리

(1) 슬로우 쿼리 로그

  • 불필요한 경우 비활성화:
    sql
    코드 복사
    SET GLOBAL slow_query_log = 0;

(2) 일반 로그

  • 디버깅 이외의 목적이 없다면 비활성화:
    sql
    코드 복사
    SET GLOBAL general_log = 0;

(3) 오래된 Binlog 정리

  • 수동으로 특정 파일 이전의 로그 삭제:
    vbnet
    코드 복사
    PURGE BINARY LOGS TO 'binlog.000010';
  • 자동 삭제 설정:
    sql
    코드 복사
    SET GLOBAL binlog_expire_logs_seconds = 604800; -- 7일

(4) Cloud Monitoring와 연계

  • GCP의 Cloud Monitoring을 활용해 로그를 저장하고 필요에 따라 필터링:
    • 특정 로그를 BigQuery로 전송하여 관리.
    • 불필요한 로그는 필터링 후 삭제.

6. 네트워크 압축 활성화

(1) 장점

  1. 대역폭 절약: 클라이언트-서버 간 데이터 크기를 줄여 네트워크 비용 절감.
  2. 성능 향상: 네트워크 속도가 느린 환경에서 응답 시간이 개선.
  3. 트래픽 감소: 네트워크 사용량이 많은 환경에서 병목을 줄임.

(2) 단점

  1. CPU 사용량 증가: 데이터 압축/해제를 처리하기 위해 클라이언트와 서버의 CPU 사용률이 증가.
  2. 소규모 데이터에는 효과 미미: 이미 작거나 압축률이 낮은 데이터에는 효과가 거의 없음.
  3. 복잡성 증가: 일부 클라이언트에서는 추가 설정이 필요할 수 있음.

권장 사항: 네트워크 병목이 발생하거나 대역폭 비용이 높은 경우에만 활성화하세요.


추가적인 세부 사항이나 설정 도움 필요 시 언제든지 말씀해주세요!

4o

나의 말:

1. 나에겐 데이터 무결성이 중요하다. 2. iops 를 높이기 위한 방법이 nvme ssd를 사용하는 방법 밖에 없는가? 3. innodb_flush_method 이미 O_DIRECT이다. 4. 내가 binlog를 쓰고 잇는지 아닌지 확인부터 해야하는거 아닌가? 5. 로그관리 내가 원하는 답변이 아니야 다시 생각하고 답변줘 내가 원하는건 gcp로 관리를 하는데 쿼리 on off 가 어느정도의 부하가 되는지가 궁금한거야 6. 네트워크 압축 활성화를 해도 이미 작은 데이터를 자주 보내는거에는 효율성이 없는거지?
 

ChatGPT의 말:

ChatGPT

아래에서 각각의 질문에 대한 더 구체적인 답변을 드리겠습니다.


1. 데이터 무결성이 중요하다면?

  • 데이터 무결성을 가장 중요하게 고려한다면, innodb_flush_log_at_trx_commit을 1로 유지해야 합니다.
  • 장애나 비정상 종료 상황에서도 데이터 손실 위험을 최소화할 수 있으며, 트랜잭션의 ACID 속성을 완벽히 유지합니다.
  • 단점으로는 디스크 쓰기 IO 부하가 증가할 수 있지만, 이를 해결하려면 고성능 SSD와 적절한 IO 설정을 병행하면 됩니다.

2. IOPS를 높이는 방법

NVMe SSD 외에도 IOPS를 높일 수 있는 다양한 방법이 있습니다.

  1. 스토리지 클래스 업그레이드:
    • GCP에서는 IOPS를 향상시키기 위해 더 높은 스토리지 클래스를 선택할 수 있습니다.
    • 예: Balanced Persistent Disk에서 Extreme Persistent Disk로 업그레이드.
  2. IOPS 설정 조정:
    • GCP의 디스크에서는 프로비저닝된 IOPS를 조정 가능. 예를 들어, 디스크 크기를 늘리면 IOPS 한도가 증가합니다.
  3. 디스크 병렬화:
    • 디스크를 여러 개로 나누고 데이터를 분산시켜 IOPS 병목을 해소.
    • RAID 0을 사용하면 읽기/쓰기 병렬화로 성능 향상.
  4. 쓰기 작업 최소화:
    • 캐싱 전략을 활용하거나, 쓰기 집약적인 쿼리를 리팩토링하여 쓰기 빈도를 줄임.
  5. 데이터베이스 설계 최적화:
    • 자주 사용되는 테이블이나 데이터를 별도의 파티션에 분리.
    • 특정 읽기/쓰기 작업을 캐시나 메모리 기반 DB로 전환.

3. 이미 innodb_flush_method = O_DIRECT일 때

  • O_DIRECT는 디스크 캐시를 우회하여 데이터를 디스크에 직접 기록하므로 데이터 무결성과 성능 간 균형을 맞출 수 있는 설정입니다.
  • 추가적으로 할 수 있는 최적화:
    1. InnoDB 로그 파일 크기:
      • 현재 크기(512MB)는 적절합니다. 더 늘리면 플러시 빈도가 감소하지만 복구 시간이 길어질 수 있습니다.
    2. 플러시 스레드 증가:
      sql
      코드 복사
      SET GLOBAL innodb_write_io_threads = 4; SET GLOBAL innodb_read_io_threads = 4;
      디스크 IO 병렬 작업을 늘려 성능 개선.

4. Binlog 사용 여부 확인

Binlog를 사용하고 있는지 확인하려면 다음 명령어를 실행하세요:

sql
코드 복사
SHOW VARIABLES LIKE 'log_bin';
  • 결과가 ON이면 Binlog가 활성화된 상태.
  • 추가적으로 다음 명령어를 사용하여 Binlog 파일 목록 확인:
sql
코드 복사
SHOW BINARY LOGS;

Binlog가 활성화되었을 경우:

  • 데이터를 복제하거나 특정 시점 복구(PITR)를 위해 사용 중일 가능성이 높습니다.

Binlog가 비활성화된 경우:

  • Binlog를 사용하지 않는다면 관리할 필요가 없습니다.

5. GCP에서의 로그 관리 및 쿼리 ON/OFF 부하

(1) 쿼리 로그 ON/OFF가 부하에 미치는 영향

  1. 슬로우 쿼리 로그 (slow_query_log):
    • 활성화 시: 쿼리가 실행되는 동안 추가 로그 쓰기 작업이 발생해 디스크 IO 부하가 증가.
      • 특히 슬로우 쿼리가 많으면 디스크 사용률이 크게 높아짐.
    • 비활성화 시: 디스크 IO 부하가 감소하지만 문제를 진단하기 어려워질 수 있음.
  2. 일반 쿼리 로그 (general_log):
    • 활성화 시: 모든 쿼리를 기록하므로 쓰기 IO 부하가 극단적으로 증가.
    • 비활성화 시: 부하가 크게 감소하지만 쿼리 추적이 어려워짐.
    • GCP의 Cloud SQL 환경에서는 general_log는 디버깅 시에만 사용하는 것이 권장됩니다.

(2) GCP에서의 로그 관리

  • Cloud Monitoring과 연동:
    1. Cloud SQL의 쿼리 로그를 Stackdriver Logging에 연동.
    2. 특정 시간대의 쿼리 로그를 추적하고, 슬로우 쿼리 로그만 활성화하여 필요한 데이터만 필터링.
  • 필요 없는 로그 필터링:
    • Cloud Logging에서 쿼리 속도가 빠른 이벤트를 필터링하여 저장 공간 절약.
    • 슬로우 쿼리 기준(long_query_time)을 조정해 중요 로그만 저장:
      sql
      코드 복사
      SET GLOBAL long_query_time = 2; -- 2초 이상 실행된 쿼리만 기록

6. 네트워크 압축 활성화의 효율성

(1) 작은 데이터를 자주 전송하는 경우

  • 네트워크 압축은 큰 데이터 전송에서 효과적입니다. 그러나 작은 데이터를 자주 전송하는 경우:
    1. 효율성 감소: 압축/해제의 CPU 부하가 데이터 전송의 성능 이점보다 클 수 있음.
    2. 오버헤드 증가: 작은 데이터는 압축해도 데이터 크기 차이가 거의 없으므로 비효율적.

(2) 네트워크 압축 활성화 조건

  • 아래 조건에 해당하면 활성화를 권장:
    1. 전송 데이터가 크고 압축 가능성이 높은 경우(JSON, XML 등).
    2. 네트워크 대역폭이 제한적이거나 비용이 높은 경우.

요약

  1. 데이터 무결성이 중요하다면 innodb_flush_log_at_trx_commit = 1 유지.
  2. IOPS 향상은 NVMe 외에도 스토리지 클래스 업그레이드, 병렬 디스크 사용, 쿼리 최적화로 가능.
  3. Binlog 사용 여부를 확인하고, 사용 중이라면 슬로우 쿼리와 필요 없는 로그를 필터링.
  4. 네트워크 압축은 큰 데이터에 적합하며, 작은 데이터 전송에는 효율성이 낮을 수 있음.
  5. GCP 로그 관리는 Cloud Monitoring과 슬로우 쿼리 필터링 조합이 적합.
반응형