DB/MySQL13 [MySQL] 인덱스 심화 2 — ORDER BY가 인덱스를 타는 조건, 암시적 형변환, 인덱스 없는 UPDATE의 락 확산 1. 문서 제목MySQL 인덱스 심화 2 — ORDER BY가 인덱스를 타는 조건, 암시적 형변환, 인덱스 없는 UPDATE의 락 확산2. 기술 개요 요약인덱스의 기본 구조(B+Tree, 클러스터드/세컨더리, 복합 인덱스 컬럼 순서)를 이해한 다음 단계는 경계 사례다. "인덱스가 있는데도 안 타는 쿼리"와 반대로 "안 탈 것 같은데 타는 쿼리"를 정확히 가르는 기준, 그리고 인덱스가 조회 성능을 넘어 UPDATE의 락 범위까지 좌우한다는 사실이 이 문서의 주제다. 판단 기준은 두 가지로 압축된다: ① 인덱스는 "저장된 정렬"이므로, 그 정렬을 그대로 활용할 수 있는 형태의 조건/정렬만 인덱스를 탄다 ② 가공되는 쪽이 컬럼이면 못 타고, 비교값이면 탄다.다루는 질문:#질문핵심 키워드1복합 인덱스 (a,b,.. DB/MySQL 2026. 7. 12. [MySQL] 인덱스 심화 — 10%룰, B+Tree 리밸런싱, 복합 인덱스 컬럼 순서 1. 문서 제목MySQL 인덱스 심화 — 10%룰, B+Tree 리밸런싱, 복합 인덱스 컬럼 순서2. 기술 개요 요약인덱스를 "있으면 무조건 빠르다"로 이해하면 실전 튜닝에서 막힌다. 옵티마이저가 인덱스 대신 풀스캔을 택하는 기준, B+Tree가 삽입·삭제마다 스스로 균형을 맞추는 방식, 복합 인덱스에서 컬럼 순서를 정하는 진짜 기준까지 알아야 EXPLAIN 결과를 해석하고 인덱스를 설계할 수 있다. 이 문서는 이 세 가지를 정리한다. 인덱스 레인지 스캔과 랜덤 I/O, covering index는 이미 다뤘으므로 여기서는 다루지 않는다.3. 핵심 기능/개념 정리개념설명실무 포인트인덱스 vs 풀스캔 임계점("10%룰")조회 대상 로우 비율이 일정 수준을 넘어 세컨더리 인덱스의 랜덤 I/O 누적 비용이 순.. DB/MySQL 2026. 7. 12. DB 커넥션 풀 사이징과 데드락 — API가 느려질 때 원인을 좁히는 순서 1. 문서 제목DB 커넥션 풀 사이징과 데드락 — API가 느려질 때 원인을 좁히는 순서2. 기술 개요 요약DB 성능 저하는 보통 "쿼리 문제 / 락 경합 / 커넥션 풀 고갈 / 리소스 부족" 네 갈래 중 하나에서 시작된다. 이 문서는 그중 커넥션 풀 사이징의 기준(코어 수 vs 쓰레드 수)과 락 경합의 대표 사례인 데드락의 발생 원리, 그리고 API 지연이 발생했을 때 실무에서 원인을 좁혀가는 순서를 정리한다. SHOW PROCESSLIST와 세부 모니터링 지표는 이미 다뤘으므로 여기서는 커넥션 풀 사이징 원리와 데드락에 집중한다.3. 핵심 기능/개념 정리개념설명실무 포인트커넥션 풀 사이징 공식의 "쓰레드"HikariCP 등에서 인용되는 (core_count * 2) + effective_spindle.. DB/MySQL 2026. 7. 12. [MySQL] 인덱스 레인지 스캔, 랜덤 I/O, 검색엔진 도입 기준 정리 1. 문서 제목인덱스 레인지 스캔, 랜덤 I/O, 검색엔진 도입 기준 정리2. 기술 개요 요약인덱스 레인지 스캔은 B-Tree 계열 인덱스에서 특정 범위의 키를 찾아 순서대로 읽는 방식이다. WHERE age > 20, BETWEEN, LIKE 'abc%'처럼 범위 조건을 사용할 때 대표적으로 등장한다. 다만 InnoDB에서 secondary index를 사용할 경우 인덱스 리프에는 실제 row 전체가 아니라 primary key 값이 들어 있고, 이 primary key로 clustered index를 다시 찾아 실제 row를 읽는다. 이 과정에서 데이터 페이지 접근이 흩어지면 랜덤 I/O가 발생한다.반면 쿼리에 필요한 컬럼이 모두 인덱스에 포함되어 있으면 테이블 row를 다시 읽지 않아도 되므로 co.. DB/MySQL 2026. 7. 11. [MySQL] Replication과 InnoDB Cluster, Sharding은 무엇이 다를까? 1. 문서 제목MySQL Replication과 InnoDB Cluster, Sharding은 무엇이 다를까?2. 기술 개요 요약DB 확장과 고가용성을 이야기할 때 Clustering, Replication, Sharding이 자주 함께 등장한다. 세 개념은 모두 DB를 여러 대로 구성한다는 공통점이 있지만 목적과 데이터 배치 방식이 다르다. Clustering은 주로 장애 전환과 가용성을 위해 여러 노드를 하나의 서비스처럼 묶는 개념이고, Replication은 동일한 데이터를 여러 서버에 복제해 읽기 분산과 장애 대응을 돕는다. Sharding은 데이터를 여러 조각으로 나누어 서로 다른 서버에 저장함으로써 쓰기 부하와 저장 용량을 분산한다.핵심 구분 기준은 “데이터를 몇 벌 갖고 있는가”와 “각 서버.. DB/MySQL 2026. 7. 11. [MySQL] SHOW PROCESSLIST와 DB 모니터링 메트릭 정리 1. 문서 제목MySQL SHOW PROCESSLIST와 DB 모니터링 메트릭 정리2. 기술 개요 요약DB 장애나 성능 저하가 발생했을 때는 먼저 현상을 관찰하고, 현재 DB 내부에서 어떤 세션이 실행 중인지 확인한 뒤, 원인을 쿼리 문제·락 경합·리소스 부족으로 분류해야 한다. MySQL의 SHOW PROCESSLIST는 서버 내부 스레드가 현재 수행 중인 작업을 보여주는 기본 진단 명령어다. 여기에 QPS, Slow Query, InnoDB Buffer Pool Hit Ratio, Replication Lag, Lock Wait, 활성 커넥션 수 같은 메트릭을 함께 보면 장애 원인을 더 빠르게 좁힐 수 있다.이 문서는 면접 답변과 실무 운영 모두에서 사용할 수 있도록 SHOW PROCESSLIST 해.. DB/MySQL 2026. 7. 10. [MySQL] EXPLAIN 실행계획과 파티셔닝 정리 1. 문서 제목MySQL EXPLAIN 실행계획과 파티셔닝 정리2. 기술 개요 요약EXPLAIN은 MySQL 옵티마이저가 SQL을 어떤 방식으로 실행할 계획인지 보여주는 진단 도구다. 실제 성능 문제를 볼 때는 type, key, rows, filtered, Extra, partitions 같은 컬럼을 함께 확인해야 한다. 특히 type = ALL, 과도하게 큰 rows, Using filesort, Using temporary는 튜닝 후보가 될 수 있다.파티셔닝은 하나의 큰 테이블을 같은 MySQL 서버 안에서 여러 물리 파티션으로 나누는 기능이다. 핵심 효과는 인덱스처럼 “빠르게 찾는 것”이라기보다, 조건과 관련 없는 파티션을 제외하는 partition pruning을 통해 “처음부터 볼 데이터 덩어.. DB/MySQL 2026. 7. 10. [Index] 플랫폼 내 페이지네이션 방식에 대한 개선사항 제안 게시글 목록 개편2024년 4월, 월부 커뮤니티에서는 ‘잘 보여주기’를 위해, 더 많은 컨텐츠를 한 화면 안에서 보여주기 위해 썸네일을 제외하여 보여주는 방식으로 변경되었습니다. 기존에는 무한스크롤 방식으로 조회되던게, 페이지네이션 UI를 통한 검색으로 변경되었습니다. 이와 더불어, 마지막 페이지 조회가 가능하도록 변경되었습니다. 변경된 조회 방식으로 인해, 발생된 문제점과 단/장기 개선사항에 대해서 정리하여 보였습니다.현재 월부의 페이지네이션 방식 : LIMIT OFFSET현재 플랫폼의 페이지네이션 방식은 LIMIT OFFSET 방식을 사용하고 있습니다. 이 방식은 간단하고 구현이 쉬운 장점이 있지만, 대규모 데이터셋에서 성능 저하와 일관성 문제를 일으킬 수 있습니다.LIMIT OFFSET의 성능 저하.. DB/MySQL 2025. 1. 18. [MySQL] 쿼리 튜닝을 위한 인덱스 활용의 모든 것 오늘은 백엔드 API 성능 개선을 위해 핵심적인 요소 중 하나인 인덱스를 통한 쿼리 튜닝 방법에 대하여, 학습한 내용들을 정리해보겠습니다. 먼저 기본적인 내용부터 다뤄보겠습니다.인덱스인덱스의 정의여러분은 색인에 대해 들어보셨나요? 색인(index)이란 책이나 학술서, 연구 재료가 될 서적의 내용 중에서 중요한 항목, 술어, 인명, 지명 등을 뽑아 본문 어느 쪽에 있는지 쉽게 찾아볼 수 있도록 쪽 번호와 함께 별도로 배열하여 놓은 목록입니다.인덱스란 마치 책의 색인(index)처럼, 데이터를 빠르게 찾기 위해 데이터가 위치한 위치를 나열한 별도의 데이터 구조입니다. 보통 데이터베이스 테이블의 특정 열(Column)에 대한 검색 속도를 향상시키기 위해 사용하죠.인덱스의 종류이러한 인덱스에도 여러 종류가 있습.. DB/MySQL 2024. 7. 4. [MySQL] Online DDL 활용 방법 문제상황MySQL에서 90만 건이 넘는 데이터가 적재된 테이블에 칼럼을 추가하려고 했다. 보통 데이터가 많지 않으면 1초 이내로 완료된다. 그런데, 데이터 양이 많아서 DDL 반영까지 10분 가량 시간이 소요됐다. 문제는 그 동안, 테이블에 락이 걸려, 테이블에 대한 쓰기 작업이 일시적으로 중단되는 현상이 발생됐다.락이 걸리는 이유락이 걸리는 이유는 뭘까? 데이터 일관성을 보장하기 위함이다. 테이블의 스키마를 변경하는 작업은 데이터베이스의 구조를 수정하는 것으로, 이 과정에서 테이블에 대한 읽기 및 쓰기 작업을 일시적으로 중지하여 데이터 일관성을 유지한다.스키마 변경 작업이 완료될 때까지 다른 작업들이 해당 테이블에 접근하지 못하도록 하는 것이다. 이는 동시성 문제를 방지하고 데이터베이스의 일관성을 보장.. DB/MySQL 2024. 5. 6. [MySQL] MySQL 아키텍처 MySQL 아키텍처 구성 MySQL 접속 클라이언트 역할 대부분의 프로그래밍 언어에 대한 접속 클라이언트 제공 Shell을 통해서도 접속 가능함 MySQL Engine (MySQL의 두뇌) 구성 옵티마이저 요청된 SQL 문을 최적화해서 실행시키기 위해, 실행 계획을 짜는 역할을 함. 쿼리 파서 전처리기 실행 엔진 역할 클라이언트 접속과 SQL 요청을 처리함. MySQL 스토리지 엔진 (MySQL의 손발) 역할 데이터를 실제로 디스크에 저장하거나 디스크에 저장된 데이터를 불러오는 역할 옵티마이저가 작성한 실행 계획에 따라서 스토리지 엔진을 적절히 호출해서 쿼리를 실행 MySQL 엔진이 스토리지를 호출할 때, 사용하는 API를 핸들러 API라고 함 직접 구현하여 추가 가능 운영체제 파일시스템, 하드웨어 쿼리.. DB/MySQL 2024. 1. 30. [MySQL] MVCC(Multi Version Concurrency Control)란 학습해야 하는 이유 MVCC를 이해해야 트랜잭션 격리 수준에 따른 MySQL 내부 동작 원리에 대해서 알 수 있기 때문입니다. MVCC를 이해하기 위해선, Undo Log에 대해 알아야 합니다. 또 Undo Log와 헷갈릴 수 있는 Redo Log에 대해서도 알아봅시다. Redo Log와 Undo Log는 MySQL 스토리지 엔진 내에 존재하는 데이터 영역입니다. Redo Log 정의 DDL 또는 DML 문장에 의해 데이터베이스에 저장된 값 또는 테이더베이스 구조에 변경사항이 생기는 경우 변경 정보를 보관하는 메모리 영역입니다. Redo Log가 필요한 이유 기본적으로 DB에서 데이터 변경 작업은 부하가 큰 작업입니다. 많은 경우 변경 대상인 데이터가 순차적으로 위치하지 않고 디스크에 랜덤하게 존재하기 .. DB/MySQL 2023. 10. 28. 이전 1 2 다음 반응형