Redis 운영 중 Client 쪽에서 응답을 늦게 받았다고 확인 요청이 와서
Redis의 slowlog 를 확인해봤더니 아무 slowlog가 없는 케이스가 발생했습니다.

slowlog 확인

127.0.0.1:6001> config get slowlog-log-slower-than
1) "slowlog-log-slower-than"
2) "10000"
### 10000 microsecond 

127.0.0.1:6001> slowlog get 10
(empty list or set)

slowlog는 언제 찍힐까?

client가 느끼는 slowlog, 즉 latency 와 redis의 slowlog 기준은 조금 다릅니다.


=> client latency : client가 redis 에 request 를 보내고 결과를 받을 때 까지의 시간


=> redis slowlog : redis 내에서 응답을 처리하는 시간

(출처 : https://charsyam.wordpress.com/2020/03/15/%EC%9E%85-%EA%B0%9C%EB%B0%9C-%EC%99%9C-redis-%EC%9D%91%EB%8B%B5%EC%9D%B4-%EB%8A%90%EB%A6%B0%EB%8D%B0-slowlog%EC%97%90%EB%8A%94-%EC%95%88%EC%B0%8D%ED%9E%88%EB%82%98%EC%9A%94/)

client 가 응답을 늦게 받는 케이스

  1. client의 latency도 느리고 redis도 느린 경우
    • O(N) 커맨드 사용 : HGETALL , keys 등
    • 메모리 부족으로 swap 발생한 경우
  2. client의 latency는 느리지만 redis는 빠른 경우
    • redis는 single thread이기 때문에 리퀘스트가 정상적으로 빨리 처리되어도 리퀘스트가 너무 많이 몰린 경우 리퀘스트가 대기하게됨
      • redis 6.0에 client request 처리 관련 thread 성능 향상이 있는듯?

=> 이번 케이스도 2번의 케이스로 한대의 redis 서버에서 아래와 같은 부하가 발생했음

=> 쿼리를 replica 로 분산시켜서 해결가능