DB
데이터베이스 샤딩
단일 MySQL 서버가 감당할 수 있는 쓰기 TPS 한계에 도달했다. 읽기는 레플리카로 분산했지만 쓰기 병목은 해결되지 않는다. 수직 확장(더 좋은 서버)도 한계가 왔다. 다음 선택지가 샤딩이다.
단일 MySQL 서버가 감당할 수 있는 쓰기 TPS 한계에 도달했다. 읽기는 레플리카로 분산했지만 쓰기 병목은 해결되지 않는다. 수직 확장(더 좋은 서버)도 한계가 왔다. 다음 선택지가 샤딩이다.
파티셔닝이란?
인덱스를 분명히 걸었는데 EXPLAIN을 보니 Full Table Scan이다. 옵티마이저가 인덱스보다 풀스캔이 더 빠르다고 판단한 것이다. 왜 그런 선택을 했는지 이해하지 못하면 힌트를 줄 수도, 통계를 갱신...
비유로 시작하기
비유로 시작하기
재고가 1개 남은 상품에 동시 주문이 100건 들어왔다. 락 없이 처리하면 재고가 -99가 될 수 있다. 어떤 락을 어떤 상황에 써야 하는지 모르면 장애가 나서야 알게 된다.
운영 중인 서비스에서 갑자기 특정 쿼리가 10배 느려졌다. 코드는 그대로인데 왜일까? 통계가 오래되어 옵티마이저가 잘못된 실행 계획을 선택했거나, Buffer Pool이 가득 차 디스크 I/O가 폭발한 것일 수...
회원 테이블에 1,000만 건이 쌓였다. 특정 이메일 하나를 조회하는 쿼리가 5초 걸린다. 인덱스 하나 추가했더니 3ms로 떨어졌다. 왜 이런 차이가 나는지, 그리고 어떤 컬럼에 걸어야 하는지를 이 글에서 다룬...
DB 커넥션을 맺는 것은 생각보다 비싸다. TCP 연결, 인증, 세션 초기화까지 수십~수백 밀리초가 걸린다. 매 요청마다 새 커넥션을 만들면 DB가 이 비용만으로 과부하에 걸린다. 커넥션 풀은 미리 만들어 놓은...
1. 개요