CS/Real MySQL 8.0 요약
-
9장 - 옵티마이저와 힌트 - 3편CS/Real MySQL 8.0 요약 2024. 1. 9. 00:01
쿼리 힌트 쿼리 힌트는 옵티마이저에게 쿼리의 실행 계획을 어떻게 수립해야 할지 힌트를 제공하는 데 사용됩니다. 쿼리 힌트가 필요한 이유? 옵티마이저가 실행 계획을 수립해주는데 쿼리 힌트가 왜 필요할까요? 옵티마이저가 우리의 서비스를 100% 이해하지 못하기 때문에 때로는 DBA나 개발자가 부족한 실행 계획을 수립할 때가 있을 수 있습니다. 쿼리 힌트의 종류 인덱스 힌트 (STRAIGHT_JOIN) 옵티마이저 힌트 인덱스 힌트 인덱스 힌트는 SELECT 명령과 UPDATE 명령에서만 사용할 수 있습니다. STRAIGHT_JOIN은 여러 개의 테이블이 조인되는 경우 FROM 절에 명시된 순서대로 조인 순서를 고정하는 역할을 합니다. 일부 테이블의 순서에 대해서는 제안하는 힌트들도 있습니다. USE INDEX..
-
9장 - 옵티마이저와 힌트 - 2편CS/Real MySQL 8.0 요약 2023. 12. 23. 00:01
고급 최적화 옵티마이저가 실행계획을 수립할 때 통계 정보와 옵티마이저 옵션을 결합하여 최적의 실행 계획을 수립합니다. 기본적으로 deafult 값이 제공되며 on, off를 통해 옵션을 활성화, 비활성화할 수 있습니다. 이 옵션은 MySQL 서버 전체(Global) 또는 현재 커넥션(Session)에만 적용할 수 있습니다. Multi-Range Read(MRR) 보통 조인을 수행하면 드라이빙 테이블(조인에서 먼저 읽는 테이블)의 레코드를 한 건 읽어서 드리븐 테이블(조인되는 테이블들에서 드라이빙 테이블이 아닌 테이블들)의 일치하는 레코드를 찾아서 조인을 수행합니다. 이런 방식은 Nested Loop Join이라고 합니다. 조인 처리는 MySQL 엔진이, 실제 레코드를 검색하고 읽는 부분은 스토리지 엔진이..
-
9장 - 옵티마이저와 힌트 - 1편CS/Real MySQL 8.0 요약 2023. 11. 29. 00:01
옵티마이저란? Optimize란 최대로 활용하다, 최적화하다는 뜻을 가진 영단어입니다. DB에 조회하는 쿼리의 결과는 동일하지만 내부적으로 그 결과를 만들어내는 방법은 다양합니다. 최소한의 비용을 드는방법으로 결과를 만들어내야 하는데 옵티마이저가 이 기능을 담당합니다. 옵티마이저의 종류로는 비용기반최적화, 규칙기반최적화기법이 있는데 대부분의 RDBMS가 비용기반최적화 방식을 활용하며 MySQL도 마찬가지입니다. 실행계획 확인하기 실행계획은 옵티마이저가 결과를 만들어내기 위한 방법을 사용자가 확인할 수 있는 방법입니다. 실행계획은 EXPLAIN이라는 명령으로 확인할 수 있습니다. 실행계획을 알아야 하는이유? 실행계획을 분석할 수 있어야 불합리한 부분을 찾아내고, 더 최적화된 방법으로 실행 계획을 수립하도록..
-
8장 - 인덱스CS/Real MySQL 8.0 요약 2023. 11. 13. 00:01
디스크 읽기 방식 순차 I/O - 3개의 페이지를 기록하기 위해 1번의 시스템 콜(OS) 랜덤 I/O - 3개의 페이지를 기록하기 위해 3번의 시스템 콜(OS) 데이터베이스의 성능 튜닝은 랜덤 I/O를 줄이는 것입니다. 랜덤 I/O를 줄인다는 것은 꼭 필요한 데이터만 읽도록 쿼리를 개선하는 것입니다. 인덱스란? 책의 색인에 비유되며 책의 내용은 데이터 파일에 해당됩니다. 책에서 "ㄱ", "ㄴ", "ㄷ" 형태로 정렬되어 있는 것처럼 인덱스로 키가 정렬되어 있습니다. 정렬되어 있기 때문에 저장을 수행할 때 성능을 희생되고 읽기를 수행할 때 성능이 좋습니다. 따라서 모든 칼럼에 인덱스를 거는 건 역효과를 낼 수 있습니다. 인덱스는 PK인지 아닌지에 따라 프라이머리 키와 세컨더리 키로 구분할 수 있습니다. 저장..
-
5장 - 트랜잭션과 잠금CS/Real MySQL 8.0 요약 2023. 10. 26. 00:01
트랜잭션이란? 데이터 정합성을 보장하기 위해 논리적인 작업을 묶어 일부만 적용되는 현상을 발생하지 않도록 만들어주는 기능이다. 잠금이란? 잠금과 트랜잭션은 비슷한 개념 같지만 잠금은 동시성을 제어하기 위한 기능이다. 하나의 데이터를 여러 커넥션이 동시에 변경하지 못하게 막는 역할을 수행한다. 격리 수준이란? 하나의 트랜잭션 내에서 또는 여러 트랜잭션 강의 작업 내용을 어떻게 공유하고 차단할지 결정하는 레벨을 의미한다. MySQL에서 트랜잭션 MyISAM이나 Memory 스토리지 엔진은 트랜잭션을 지원하지 않고 InnoDB부터 트랜잭션을 지원한다. MyISAM의 경우에는 Partial Update가 발생하여 데이터 정합을 맞추기 까다롭다. 트랜잭션의 범위는 최소화해야 커넥션풀을 점유하는 시간이 줄어들고 부..
-
4장 - InnoDB 스토리지 엔진 아키텍처CS/Real MySQL 8.0 요약 2023. 10. 16. 00:01
개요 이전 챕터인 MySQL 엔진 아키텍처에 이어 InnoDB 스토리지 엔진 아키텍처에 대해 알아보고자 합니다. InnoDB 스토리지 엔진 아키텍처 InnoDB는 MySQL에서 가장 많이 사용됩니다. 거의 유의할게 레코드 기반 잠금을 제공하기 때문에 높은 동시성 처리가 가능하고 안정적이며 성능이 뛰어납니다. 프라이머리 키에 의한 클러스터링 InnoDB의 모든 테이블은 기본적으로 PK를 기준으로 클러스터링 되어 저장됩니다. 즉, PK의 순서대로 디스크에 저장되며 세컨더리 인덱스는 레코드의 주소 대신 PK의 값을 논리적인 주소로 사용합니다. 이로 인해 PK로 인한 레인지 스캔은 굉장히 빨리 처리되며 실행계획에서도 다른 인덱스보다 PK가 선택될 확률이 높습니다. 외래 키 지원 외래 키에 대한 지원은 InnoD..
-
4장 - MySQL 엔진 아키텍처CS/Real MySQL 8.0 요약 2023. 7. 24. 00:01
개요 MySQL 아키텍처를 정리해 보고, 더 잘 이해해보고자 합니다. MySQL 아키텍처 구성도 MySQL 서버는 MySQL 엔진과 스토리지 엔진으로 구성되어 있습니다. MySQL 엔진은 사람의 머리 역할을 담당하고, 스토리지 엔진은 손과 발의 역할을 담당합니다. MySQL 엔진에는 Connection Handler, SQL Interface, SQL Parser, Optimizer, Caches & Bufferes가 있습니다. 스토리지 엔진에는 InnoDB, MyIsam, Memory 등이 존재합니다. File System와 Files & Logs 부분은 운영체제 & 하드웨어에 부분에 해당합니다. MySQL Connectors 다양한 언어들의 애플리케이션이 MySQL 데이터베이스에 연결하고 상호작용할 ..