DB/Redis

Redis 성능 튜닝

Code Maestro 2023. 8. 18. 10:24
728x90

1. Eviction 정책

메모리가 한계에 도달할 때 어떤 조치가 일어날지 결정하는 것을 뜻한다. 처음부터 메모리가 부족한 상황을 많들지 않는 게 중요하고, 캐시로 사용할 때는 적절한 eviction policy가 사용된다.

 

1.1 Redis의 메모리 관리

maxmemory 100mb

Memory의 사용 한도를 설정한다. 지정하지 않으면 32bit에서는 3GB, 64bit에서는 0(무제한)으로 설정된다. 32bit OS에서는 사용하는 게 제한됐기 때문에 3GB밖에 못 쓴다.

 

maxmemory-policy noeviction

maxmemory일 경우에 eviction 정책을 설정한다. 

 

1.2 maxmemory-policy 옵션

Redis는 메모리를 어떻게 다루는지가 정말 중요하다. 이에 관한 옵션이 있다.

 

  • noeviction: eviction 없음. 추가 데이터는 저장하지 않고 에러를 발생한다. (replication 사용 시에 master에 적용된다.)
  • allkeys-Iru: 가장 최근에 사용된 키들을 남기고 나머지를 삭제한다. (LRU)
  • allkeys-lfu: 가장 빈번하게 사용된 키들을 남기고 나머지를 삭제한다. (LFU)
  • volatile-lru: LRU를 사용하면서 expire field가 true인 항목들 중에서만 삭제
  • volatile-lfu: LFU를 사용하면서 expire field가 true인 항목들 중에서만 삭제
  • allkeys-random: 랜덤하게 삭제
  • volatile-random: expire field가 true로 설정된 항목들 중에서 랜덤하게 삭제
  • volatile-ttl: expire field가 true로 설정된 항목들 중에서 짧은 TTL 순으로 삭제

2. 시스템 튜닝

2.1 성능 측정

Redis 성능은 redis-benchmark 유틸리티로 측정할 수 있다.

 

redis-benchmark [-h host][-p port][-c clients][-n requests]

 

보통 p99만 봐도 충분하다. 한두개의 특수케이스로 수치가 왜곡되는  피하기 위해 퍼센타이로 측정한다.

 

주의사항으로는 네트워크 환경을 고려해야 한다. 실제 배포될 환경을 감안해서 테스트해야 한다.

2.2 Redis 성능에 미치는 요소

  • Network bandwidth & latency: Redis의 처리량은 주로 네트워크에 결정되는 경우가 많다. 서비스 운영 전에 배포 환경의 네트워크 대역폭과 처리량을 체크하는 게 좋다. 
  • CPU: 싱글 스레드로 동작하는 Redis 특성 상 CPU 성능이 중요하다. 코어 수보다 큰 cache를 가진 빠른 CPU가 선호된다. 
  • RAM 속도 & 대역폭: 10KB 이하 데이터에는 큰 영향이 없다.
  • 가상화 환경: VM에서 실행될 때 개별적인 영향이 있을 수가 있다.(non-local disk, 오랜 hypervisor의 느린 fork)

2.3 성능에 영향을 끼치는 Redis 설정

  • rdbcompression <yes/no>: RDB 파일을 압축할지 여부로 CPU를 절약하고 싶으면 no를 선택한다. 
  • rdbchecksum <yes/no>: 사용 시 RDB의 안정성을 높일 수 있다. 그러나 파일 저장/로드 시에 10% 성능 저하가 있다. 
  • save: RDB 파일 생성 시에 시스템 자원이 소모되기에 영향이 있다. 

3. SLOWLOG

수행시간이 설정한 시간 이상인 쿼리 로그를 보여준다. 여기서 수행시간은 I/O 동작을 제외한다.

 

3.1 SLOWLOG 설정

slowlog-log-slower-than 10000

로깅되는 기준 시간(microseconds). 참고로 10000은 1초이다.

 

slowlog-max-len 128

로그 최대 기준을 설정한다.

 

3.2 SLOWLOG 명령어

slowlog len

slowlog 개수 확인.

 

slowlog get [count]

일련번호, 시간, 소요시간, 명령어, client IP, client 이름 등을 확인할 수 있다. 로그는 일련번호/시간/소요시간 순으로 나온다.

 

사용법이 단순하고 별 것 없지만 정말 중요한 커맨드고, 분석에 있어서 자주 사용된다.

 

 

출처: FastCampus 대용량 데이터 & 트래픽 처리

728x90