목차 1. 테이블 및 인덱스 통계 정보 2. 히스토그램 3. 코스트 모델 MySQL 8.0 버전부터 인덱스되지 않은 컬럼들에 대해서도 데이터 분포도를 수집해서 저장하는 히스토그램 정보가 도입됐다. 쿼리를 처리하는데 필요한 세부 작업들의 비용은 코스트 모델로 관리하고 옵티마이저는 테이블 및 인덱스의 통계 정보와 히스토그램을 통해 쿼리 전체의 비용을 계산하고 실행 계획을 수립한다. 1. 테이블 및 인덱스 통계 정보 비용 기반 최적화에서 가장 중요한 것은 통계 정보이다. (규칙 기반 최적화 vs 비용 기반 최적화) 더보기 규칙 기반 최적화(RBO)는 기본적으로 대상 테이블의 레코드 건수나 선택도 등을 고려하지 않고 옵티마이저에 내장된 우선순위에 따라 실행 계획을 수립하는 방식이다. 통계 정보를 조사하지 않고 ..
목차 1. 랜덤 I/O와 순차 I/O 디스크 읽기 2. 인덱스 1. 랜덤 I/O와 순차 I/O 디스크 읽기 랜덤 I/O는 하드 디스크 드라이브의 플래터를 돌려서 읽어야 할 데이터가 저장된 위치로 디스크 헤더를 이동시킨 다음 데이터를 읽는 것을 의미한다. 3개의 페이지를 디스크에 기록하기 위해 순차 I/O는 1번의 시스템 콜로 디스크의 헤더를 1번 움직이고, 랜덤 I/O는 3번의 시스템 콜로 디스크 헤드를 3번 움직인다. 디스크의 성능은 디스크 헤더의 위치 이동없이 얼마나 많은 데이터를 한 번에 기록하느냐에 의해 결정되기 때문에 랜덤 I/O 작업이 부하가 훨씬 크다. 테이블의 레코드 대부분을 읽는 작업에서는 인덱스 레인지 스캔(랜덤 I/O)이 아닌 풀 테이블 스캔(순차 I/O)을 사용하도록 유도할 수 있지..
목차 1. READ UNCOMMITTED 2. READ COMMITTED 3. REPEATABLE READ 4. SERIALIZABLE MySQL의 격리 수준 트랜잭션의 격리 수준이란 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지를 결정하는 것이다. 1. READ UNCOMMITTED 각 트랜잭션에서의 변경 내용이 COMMIT이나 ROLLBACK 여부에 상관없이 다른 트랜잭션에서 조회할 수 있다. 어떤 트랜잭션에서 처리한 작업이 완료되지 않았는데도 다른 트랜잭션에서 볼 수 있는 Dirty read 가 허용된다. 2. READ COMMITTED 어떤 트랜잭션에서 데이터를 변경했더라도 COMMIT이 완료된 데이터만 다른 트랜잭션에서..
목차 1. 풀 테이블 스캔과 풀 인덱스 스캔 2. 병렬 처리 3. ORDER BY 처리 4. GROUP BY 처리(Using filesort) 5. DISTINCT 처리 옵티마이저 MySQL에서는 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장돼 있는지 통계 정보를 참조해 최적의 실행 계획을 수립하는 작업이 필요한데 옵티마이저가 이 작업을 수행한다. 옵티마이저는 쿼리 파서의 파싱 작업을 거쳐 만들어진 SQL 파스 트리를 참조하며 다음과 같은 과정을 거쳐 실행 계획을 만든다. 불필요한 조건 제거 및 복잡한 연산의 단순화 여러 테이블의 조인이 있는 경우 어떤 순서로 테이블을 읽을지 결정 각 테이블에 사용된 조건과 인덱스 통계 정보를 이용해 사용할 인덱스를 결정 가져온 레코드들을 임시 테..
- Total
- Today
- Yesterday
- 계층형 아키텍처
- 이벤트 스토밍
- 도메인 모델링
- 학습 테스트
- H2
- HTTP 헤더
- ATDD
- TDD
- java8
- http
- spring rest docs
- 육각형 아키텍처
- clean code
- MySQL
- named query
- Spring
- kafka
- Stream
- Git
- Spring Boot
- 스프링 카프카 컨슈머
- mockito
- 스프링 예외 추상화
- 트랜잭셔널 아웃박스 패턴
- 클린코드
- Ubiquitous Language
- 마이크로서비스 패턴
- 폴링 발행기 패턴
- Spring Data JPA
- JPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |