본문 바로가기

전체 글250

[DB] MySQL 성능 최적화(INDEX) 0️⃣ 전제 조건 MySQL과 기본 스토리지 엔진인 8.0 InnoDB 인덱스를 활용한 쿼리 최적화 Table 1️⃣ 인덱스를 왜 쓸까? 1.1 조회 성능 개선 : 디스크 I/O를 줄이는 것이 핵심 1.2 장점 ORDER BY: 인덱스를 이용해 정렬이 처리되는 경우 GROUP BY: 인덱스를 이용해 GROUP BY를 하는 경우 1.3 실행 계획 all: 테이블 전체를 스캔할 때 (Full Table Scan) range: 인덱스를 이용하여 범위 검색을 할 때 필요한 데이터만 읽게 된다. index: 인덱스 전체를 스캔할 때 (Index Full Scan) all 보다 성능은 좋으나 인덱스를 전체 스캔하기 때문에 range보다는 성능이 좋지 않다. 2️⃣ 인덱스 적용 사례 2.1 기본 컬럼에 인덱스 적용 .. 2024. 3. 3.
DB - 성능 개선을 위한 테이블 분할 데이터베이스의 성능을 개선하기 위한 방법 중 하나가 테이블 분할이다. 테이블 분할은 어려움이 따르는데 그 이유는 기존에 설계된 테이블 구조를 변경해야 하고 이미 개발된 프로그램을 변경해야 하기 때문이다. 보통 테이블을 변경하는 원인은 DB 설계시 정규화를 소홀했거나 용량 산정을 잘못했기 때문이다. DB는 설계가 매우 중요하기 때문에 초반에 설계를 잘못한다면 성능상의 문제가 생기기 마련이다. 그렇기에 잘못된 설계 및 정규화로 인한 성능 저하를 해결하기 위해 테이블 분할을 하는 것이다. 테이블 분할은 크게 수직분할과 수평분할로 나눈다. 수직분할은 컬럼을 기준으로 테이블을 분리하는 것을 의미하고 수평분할은 로우를 기준으로 테이블을 분리하는 것을 의미한다. 테이블의 컬럼 수가 많을수록 I/O에 대한 부하가 걸리.. 2024. 3. 2.
데이터베이스 튜닝 데이터베이스 튜닝 개념 데이터베이스 어플리케이션, 데이터베이스 자체, 운영체제 등의 조정을 통하여 데이터베이스 시스템의 성능을 향상시키는 작업 시스템 성능 저하 일반적으로 시스템 성능 저하 문제는 잘못된 APP 및 DB 설계에 의해 발생한다. DB 튜닝은 이러한 성능 저하를 최소화한다. 목적 갈수록 복잡화, 대량화되는 시스템을 그대로 유지하면서 DB 시스템을 최적화한다. 어플리케이션이 높은 작업 처리량과 짧은 응답시간을 갖도록 한다. DB를 활용하는 시스템을 안정시키고, 사용자의 만족과 관리자의 관리 능력을 향상시킨다. 데이터베이스 튜닝 방식 단계튜닝 영역튜닝 방안사례 1 DB 설계 (모델링 관점) - 데이터베이스 설계 단계에서 성능을 고려하여 설계한다. 데이터 모델링, 인덱스 설계 데이터 파일, 테이블.. 2024. 2. 26.
PostgreSQL / PPAS 기본 아키텍처 (Engine) 해당 페이지에서는 Postgresql / PPAS 기본 아키텍처 중 엔진영역에 대하여 다룬다. (그림 출처 및 참고 사이트) https://kimdubi.github.io/postgresql/psql_architecture/ https://www.interdb.jp/pg/pgsql05.html http://ugenssnc.com/cloud3-3.html PostgreSQL / PPAS 는 공식 Doc 에 공식 아키텍처 도식이 없기에 외부에서 그나마 잘 작성된 아키텍처 도식 2개를 같이 올린다. 각 도식에 빠진 부분은 아래에 일괄적으로 설명하겠다. 타 RDBMS 의 기본구조인 Engine + Data 영역과 유사하게 Mysql , MariaDB 도 Engine 영역, Data 영역으로 나뉜다. 또한 Pos.. 2024. 2. 26.
MySQL 인덱스(Index) 개인 스터디 실습 및 정리 목차 들어가며 1. 인덱스란? 2. 인덱스의 자료구조 2.1. 해시맵(Hash Map) 2.2. 리스트(List) 3.3. 이진 탐색 트리(Tree) 3.4. B+Tree 3. 인덱스 적용 실습 3.1. 인덱스 없음, FK 미설정 3.2. date 컬럼 인덱스 설정, FK 미설정 3.3. 인덱스 없음, member FK 설정 3.4. date 컬럼 인덱스 설정, member FK 설정 3.5. 복합 인덱스 설정(date, member FK 순) 3.6. 복합 인덱스 설정(member FK, date 컬럼 순) 마치며 들어가며 요즘 백엔드 개발자의 필수 역량이자 꽃이라 불리우는 대용량 트래픽 처리에 관련한 공부를 하고 있다. 그 중 데이터베이스 인덱스에 관련한 내용을 공부하였고 직접 테스트해보며 정리한 내.. 2024. 2. 26.
MySQL Workbench의 VISUAL EXPLAIN으로 인덱스 동작 확인하기 안녕하세요. 저는 LINE 포인트 서버쪽 개발을 담당하고 있는 Ohara(@kory1202)입니다. 얼마 전 특정 테이블에서 데이터를 추출하는 코드를 작성했는데요. 함께 일하는 동료가 그 코드를 보더니 '이런 인덱스가 필요하겠다'고 조언해주었습니다. 이 일을 통해 제가 인덱스 관련 지식이 부족하다는 점을 깨닫게 되었는데요. 그래서 이번에 MySQL Workbench의 VISUAL EXPLAIN을 사용하면서 인덱스에 대해 스터디한 내용을 소개해볼까 합니다. VISUAL EXPLAIN은 SQL의 EXPLAIN을 도식화해주기 때문에 어떤 부분이 문제인지, 인덱스를 도입하면 어떤 처리가 개선되는 지 직관적으로 알 수 있습니다. 강력하게 추천합니다. 목차는 다음과 같습니다. 인덱스의 기초 MySQL Workben.. 2024. 2. 26.