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 내에서 응답을 처리하는 시간
client 가 응답을 늦게 받는 케이스
- client의 latency도 느리고 redis도 느린 경우
- O(N) 커맨드 사용 : HGETALL , keys 등
- 메모리 부족으로 swap 발생한 경우
- client의 latency는 느리지만 redis는 빠른 경우
- redis는 single thread이기 때문에 리퀘스트가 정상적으로 빨리 처리되어도 리퀘스트가 너무 많이 몰린 경우 리퀘스트가 대기하게됨
- redis 6.0에 client request 처리 관련 thread 성능 향상이 있는듯?
- redis는 single thread이기 때문에 리퀘스트가 정상적으로 빨리 처리되어도 리퀘스트가 너무 많이 몰린 경우 리퀘스트가 대기하게됨
=> 이번 케이스도 2번의 케이스로 한대의 redis 서버에서 아래와 같은 부하가 발생했음
=> 쿼리를 replica 로 분산시켜서 해결가능