클라이언트들의 응답이 늦는 현상이 발생했다.
가끔씩 발생했기에 클라이언트의 인터넷 속도가 늦지 않았을까 하고 다른 급한 이슈들을 해결하기 위해 잊혀져갔다.
점점 서비스 이용량이 증가하며 응답 지연 현상이 늘어가자 문제를 파악하기위해
[구간별 지연 구간을 찾아보았다.]
간단하게 보면 클라이언트 > WEB > WAS > DB 구조인데, 각 구간별 로그 시간 확인 결과 DB에서 지연이 발생하고 있었다.
[가설1. 쿼리가 잘못되어 락을 잡고 있지 않을까?]
가장 많이 발생하는 지연 이슈기에 지연 쿼리들을 확인해보았으나, 그냥 간단한 한 줄 인서트인데도 지연이 발생했었으며 쿼리 실행계획도 이슈가 없었다.
[가설2. ISOLATION LEVEL 설정이 잘못되었을까?]
정말 누군가 실수로 건들었을 수도 있기에 확인해보았으나 문제 없었고, 락걸린 내역도 없었다.
[가설3. 잘못된 키설정?]
해당 테이블이 크기가 크고 SELECT, INSERT 가 잦은 테이블인데, 키가 잘못 설정되어있어 문제지 않을까? 하고 점검해보았으나 그렇지 않았다.
[가설4. DB 메모리 할당량 부족?]
서버 전체에서 DB가 사용가능한 메모리를 DB 설정에서 조절이 가능한데, 기본 설정으로 쓰고 있어 너무 작아 문제가 되었었다. 이후 설정 변경을 통해 나아지는 듯 싶었다. 하지만 해결책이 되지는 못했다.
[가설5. 이젠 SW적으로 조치 가능한 것들은 모두 확인했다. 이제 HW 점검이 필요한 시점.]
SAR 명령어를 통해 CPI, 메모리, I/O 등을 모니터링하기 시작했다.
간헐적으로 I/O가 100%를 찍는 현상을 파악했다.
CPU 로그를 살펴보자 (/var/log/message)
kernel: block drbd1: Remote failed to finish a request within ******ms
DB가 설치된 디스크 블록에서 Remote failed 오류가 발생하고있었다. 또한 해당 시점 DB의 지연쿼리 발생시각과 일치했고, 이중화 솔루션의 에러 로그 발생 시점과도 일치했다.
클라우드 쪽에 바로 문의를 넣었고, 확인 결과로는 DB서버 VM이 설치되어있는 호스트의 문제라고 답변을 받았으며 우리 VM 뿐만이 아닌 같은 호스트 내의 다른 서비스 VM들도 비슷한 증상이 있었다고한다. 이건 내 추측이지만 아마 실제 해당 호스트의 HW 디스크 또는 케이블의 불량이 의심된다.
이후 DB서버 VM을 다른 호스트로 옮겼고 현재 계속 모니터링 중인데 현재까지 안정적으로 서비스가 잘 운영 되고있다.
기존 모니터링 서비스를 통해 알람을 받고 있기에 HW이슈임을 가장 늦게 생각한 부분이 조금 아쉬웠다.(알람 설정 관련된 값이 10회연속 I/O 100% 였나..이러다보니 걸리지 않아 알람이 안 온듯 하다.)
앞으로도 같은 이슈가 발생되면 지금과 똑같이 SW 문제 먼저 확인할 것 같긴하다.. 그래도 이번 기회에 모니터링 설정을 조금 더 타이트하게 걸어 놔야겠다..
'[DataBase] > DB' 카테고리의 다른 글
mysqlbinlog 에러 (0) | 2023.08.31 |
---|---|
# mysql, mariadb 백업 안된 쿼리 or 테이블 or 데이터 or 프로시저 등 복구(mysqlbinlog 이용하기) (0) | 2023.07.10 |
MariaDB root 로그인 불가 이슈 (2) | 2023.06.07 |
[SQL] Injection Attack 예방기 (0) | 2022.03.29 |
[DB] 무한 select 오류 해결기(트렌젝션 레벨 설정) (0) | 2022.01.21 |