티스토리 뷰

공부흔적

인프런 장애 부검 참고사항 정리

주디 𝙹𝚞𝚍𝚢 2022. 2. 2. 19:04

본 포스팅은 아래 링크의 글을 읽고 난 뒤 참고사항을 정리한 것입니다.

🔗 2022년 1월 100% 할인 이벤트 장애 부검

 

2022년 1월 100% 할인 이벤트 장애 부검

안녕하세요 인프런의 향로입니다. 인프런 서비스는 2022년 1월 3일 ~ 17일까지 지속적으로 서비스를 사용할 수 없는, 역대급 장애가 발생했습니다. 이번 장애 기간동안 정말 많은 분들의 질책을 들

tech.inflab.com

인덱스의 적절한 사용

  • 인덱스가 적용이 안된 경우 성능 부하를 줄 수 있다.(쿼리 처리 지연 → 커넥션 고갈 → 요청이 대기상태로 빠짐 → 프로세스 강제 종료) → 인덱스 적용

테이블 컬럼을 변조하거나 부정조건 사용으로 인덱스를 사용할 수 없게 됨

  • 테이블의 컬럼을 변조(lower(”컬럼명”)=lower(쿼리파라미터”))하거나 부정조건(, NOT IN) 등 인덱스를 사용할 수 없는 쿼리들로 되어 있었음 → 테이블 풀 스캔 쿼리가 동시에 수십 ~ 수백개 발생 → 인덱스를 추가하거나 쿼리를 변경하여 인덱스를 사용하도록 개선

select * 로 사용하지 않는 대용량 컬럼 조회

  • 사용하지 않는 대용량 컬럼들도 조회되어 READ IO 병목 발생 → 사용하지 않는 컬럼 모두 제거

IN에 요소 100개 초과

  • where id in (ID)에 포함되는 ID 개수가 100개를 초과 → 인덱스 사용할 수 X됨 → 테이블 풀 스캔 → IN 절에 담는 ID를 20개씩으로 끊어서 Promise.all로 분할처리하도록 구성하여 IN절을 통한 인덱스 효과를 다시 사용할 수 있도록 함
  • 🔗 MySQL IN절을 통한 성능 개선 방법 참고
  • 👨🏻‍🏫 `eq_range_index_dive_limit` 옵션으로 인해서 실행 계획 선택 방식이 IN절 개수에 따라 달라진다. 기본적으로 기준값(MySQL 5.6 : 10, MySQL 5.7.4 : 200)을 초과할 경우, `index dive` 방식이 아니라 인덱스 통계 정보를 바탕으로 실행계획을 세울 수 있도록 하는 `index statistics`를 사용한다.

쿼리 타임아웃 설정

  • 5초 이상 수행되는 쿼리 강제 종료 → 사전에 Long Query 차단

(PostgreSQL 특성)과한 Dead Tuple 발생에 따른 디스크 I/O 증가

  • 수강생이 강의 등록시 수강생 수 항목을 +1시키는 Update 쿼리 항상 수행 → PostgreSQL은 기존의 다른 RDBMS처럼 UPDATE, DELETE한다고 해서 실제 데이터를 수정하거나 삭제하지 않고 변경되었다는 표시를 남기고 새로운 데이터 기록 → 잦은 UPDATE, DELETE, Transaction 이벤트로 고용량의 Dead Tuple 대량 생산 → 기존의 다른 기능들의 영향도를 파악해서 수강생수 컬럼을 분리하기보다는 강의 소개 컬럼을 분리하는 것을 선택
300x250

'공부흔적' 카테고리의 다른 글

SVN 체크아웃 후 프로젝트 실행까지 발생한 문제 해결  (0) 2022.02.14
sessionStorage  (0) 2022.02.02
DRM과 파일 업로드  (0) 2022.01.27
POI 라이브러리와 엑셀파일 확장자  (0) 2022.01.27
로그와 보안  (0) 2022.01.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함