본문 바로가기

CS/데이터베이스5

[Real MySQL 9장] 옵티마이저와 힌트 1. 개요옵티마이저는 MYSQL에서 최적의 쿼리 실행계획을 수립하는 기능입니다.1.1 쿼리 실행 절차SQL파서: 사용자로부터 요청된 SQL 문장을 쪼개서 MYSQL 서버가 이해할 수있는 수준으로 분리(파스 트리)합니다.옵티마이저: 파싱 정보를 보면서 어떤 테이블부터 읽을지, 어떤 인덱스를 이용해 테이블을 이용해 읽을지 선택합니다.MYSQL 엔진, 스토리지 엔진: 두 번째 단계에서 결정된 테이블의 읽기 순서나 선택된 인덱스를 이용해 스토리지 엔진으로부터 데이터를 가져옵니다.1.2 옵티마이저의 종류옵티마이저는 테이터 베이스 서버에서 두뇌와 같은 역할을 담당합니다.규칙 기반 최적화(RBO, Rule-Based Optimizer)초기 버전에 많이 사용내장된 우선순위에 따라 실행 계획 수립통계 정보(테이블의 레코.. 2025. 1. 9.
[Real MYSQL 10장] 실행 계획 옵티마이저가 항상 좋은 실행 계획을 만들어낼 수 있는 것은 아닙니다.그렇기 때문에 DBMS 서버에서는 이를 보완할 수 있도록 EXPLAIN 명령으로 옵티마이저가 수립한 실행 계획을 확인할 수 있습니다.1. 통계 정보MySQL 5.7 까지는 테이블과 인덱스에 대한 정보를 가지고 실행 계획을 수립했습니다.MySQL 8.0 부터는 인덱스되지 않은 칼럼들에 대해서도 데이터 분포도를 수집해서 저장하는 히스토그램 정보가 도입됐습니다.1.1 테이블 및 인덱스 통계 정보MySQL 서버의 통계 정보 MySQL 5.5 버전 까지는 각 테이블의 통계 정보가 메모리에서만 관리되어서 서버 재시작시 모두 사라졌습니다.이후의 버전에서는 각 테이블의 통계 정보를 mysql 데이터베이스의 innodb_index_stats 테이블과 i.. 2025. 1. 3.
공유 락과 배타 락 공유 락(Shared Lock)은 무엇인가요? 😀공유 락은 읽기 락(Read Lock)이라고 부르며, 공유 락이 걸린 데이터는 읽기(SELECT)연산만 **가능**하며, 쓰기(UPDATE, DELETE)는 **불가능**합니다. 공유 락이 걸린 데이터에 대해서 **다른 트랜잭션에서도 공유 락을 획득**할 수 있지만, 배타 락은 획득할 수 없습니다. 즉, 공유 락을 사용하면 **트랜잭션 내에서 조회한 데이터가 변경되지 않는**다는 것을 보장합니다.SELECT * FROM table_name WHERE id = 1 FOR SHARE;배타 락(Exclusive Lock)은 무엇인가요? 🤔배타 락은 쓰기 락(Write Lock)이라고 부르며, 배타 락을 획득한 트랜잭션은 읽기, 쓰기 연산 모두 **가능**합니.. 2024. 12. 10.
MySQL 아키텍쳐 1. MySQL 아키텍쳐1-1. MySQL 구조 && 동작과정쿼리 파서(Parser) -> 전처리기(Preprocessor) -> 쿼리 옵티마이저(Query Optimizer) -> 쿼리 실행기(Query Execution) -> 핸들러(스토리지 엔진)MySQL Connectors에 요청이 도착합니다.사용자 스레드가 할당되고 요청이 MySQL 엔진에 전달됩니다.쿼리 파서가 SQL을 MySQL이 이해 가능한 최소 단위로 잘라내고, 문법 유효성을 검증합니다.쿼리 문장을 토큰(MySQL 이 인식할 수 있는 최소 단위의 어휘나 기호)으로 분리해 트리 구조로 만드는 과정이며, 쿼리의 문법 오류가 이 단계에서 확인 되며, 문법 오류가 있을 경우 사용자에게 오류 메세지가 전달 됩니다.전처리기가 컬럼명, 테이블명 등이.. 2024. 11. 26.
MySQL 인덱스 👉 쿼리의 성능을 좌우하는 것은, **어떻게 디스크 I/O 를 줄이는 것이 핵심**1. 디스크 읽기 방식1-1. HDD(기계식) && SSD(전자식)HDD: 데이터 저장용 플래터(원판)SSD: 플래시 메모리데이터를 가져오는 방법:기계식에서는 원판을 돌려서 데이터 위치를 찾고 가져옵니다. 그러나 SSD는 전자식이라 이런 과정이 없습니다. 디스크의 성능은 디스크 헤더의 위치 이동횟수인데, SSD는 원판이 없으므로 HDD보다 빠른 것입니다.1-2. 순차적 I/O && 랜덤 I/O순차적 I/O:연속된 데이터를 접근하기 때문에 헤더가 일정한 방향으로 이동랜덤 I/O:랜덤 I/O는 데이터가 디스크 여러 곳에 흩어져 있어 헤더가 불규칙하게 더 많이 이동1-3. HDD의 I/O 방식순차 I/O연속된 섹터를 읽거나 씀.. 2024. 11. 26.