본문 바로가기

Book

(16)
10. 실행 계획-2 Extra 컬럼 쿼리의 실행 계획에서 성능에 중요한 내용이 Extra 컬럼에 자주 표시된다.주로 내부적인 처리 알고리즘에 대한 내용이 출력된다. const row not found const 접근 방법으로 테이블을 읽었지만 실제로 해당 테이블에 레코드가 1건도 존재하지 않으면 표시된다. Deleting all rows MyISAM 스토리지 엔진처럼 스토리지 엔진의 핸들러 차원에서 테이블의 모든 레코드를 삭제하는 기능을 제공하는 스토리지 엔진 테이블에서 표시된다.스토리지 엔진의 핸들러 함수를 레코드 건수만큼 호출하지 않고, 테이블의 모든 레코드를 삭제하는 핸들러 기능(API)을 한 번 호출함으로써 처리됐음을 의미한다. 주로 WHERE 조건절이 없는 DELETE 문장의 실행 계획에서 표시된다. 참고: 8.0..
10. 실행 계획-1 10.1 통계 정보 MySQL 5.7 버전까지 테이블과 인덱스에 대한 개괄적인 정보를 가지고 실행 계획을 수립했다. 하지만 실제 테이블 컬럼 값들의 분포에 대한 정보는 없어서 실행 계획의 정확도가 떨어지는 경우가 많았다. 그래서 8.0 버전부터는 인덱스 되지 않은 컬럼들에 대해서도 데이터 분포도를 수집해서 저장하는 히스토그램(Histogram) 정보가 도입됐다. 테이블 및 인덱스 통계 정보 MySQL 또한 다른 DBMS 와 같이 비용 기반의 최적화를 사용하지만, 다른 DBMS보다 통계 정보의 정확도가 높지 않고 휘발성이 강했다. 그래서 MySQL 서버에서는 쿼리의 실행 계획을 수립할 때 실제 테이블의 데이터를 일부 분석해서 통계 정보를 보완해서 사용했다. MySQL 5.6 버전부터 통계 정보의 정확도를 ..
09. 옵티마이저와 힌트-3 9.4 쿼리 힌트 옵티마이저에게 쿼리의 실행 계획을 어떻게 수립해야 할지 알려주는 기능 MySQL 서버에서 사용 가능한 쿼리 힌트 인덱스 힌트 옵티마이저 힌트 인덱스 힌트 "STRAIGHT_JOIN"과 "USE INDEX" 등 인덱스 힌트는 옵티마이저 힌트가 도입되기 전에 사용되던 기능이다. SQL 문법에 맞게 사용해야 하기 때문에 ANSI-SQL 표준 문법을 준수하지 못하는 단점이 있다. (인덱스 힌트도 주석 형태로 표기할 수 있지만 일반적으로 SQL의 일부 형태로 사용) 5.6 버전부터 추가되기 시작한 옵티마이저 힌트들은 모두 MySQL 서버를 제외한 다른 RDBMS에서는 주석으로 해석하기 때문에 ANSI-SQL 표준을 준수한다고 볼 수 있다. -> 가능하면 인덱스 힌트보다 옵티마이저 힌트를 사용할 ..
09. 옵티마이저와 힌트-2 9.3 고급 최적화 MySQL 서버의 옵티마이저는 통계 정보와 옵티마이저 옵션을 결합해서 최적의 실행 계획을 수립한다. 옵티마이저 옵션 조인 관련 옵티마이저 옵션: MySQL 서버 초기 버전부터 제공되던 옵션. 조인이 많이 사용되는 서비스에서 중요 옵티마이저 스위치: 5.5 버전부터 지원. 고급 최적화 기능의 활성화 제어 옵티마이저 스위치 옵션 옵티마이저 스위치 옵션은 optimizer_switch 시스템 변수를 이용하여 제어한다. optimizer_switch 여러 개의 옵션을 세트로 묶어서 설정하는 방식으로 사용 각 옵티마이저 스위치 옵션에 "default", "on", "off" 중에서 하나를 설정 가능 (defalut: 기본값 적용) 옵티마이저 스위치 옵션은 글로벌과 세션별로 모두 설정할 수 있다..
09. 옵티마이저와 힌트-1 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장됐는지 통계 정보를 참조하고 기본 데이터를 비교하여 최적의 실행 계획을 수립하는 작업이 필요하다. MySQL 서버를 포함한 대부분의 DBMS에서는 옵티마이저가 이러한 기능을 담당한다. EXPLAIN: MySQL 서버에서 쿼리의 실행 계획을 확인하는 명령어 9.1 개요 쿼리의 실행 절차 1. SQL 파싱(Parsing) - SQL 파서(Parser) - 사용자로부터 요청된 SQL 문장을 잘게 쪼개서 MySQL 서버가 이해할 수 있는 수준으로 분리(파스 트리)한다. - SQL 문장에 문법적 오류가 있다면 이 단계에서 걸러진다. - 최종적으로 SQL 파스 트리(Parse Tree)가 생성된다. - 이후부터 SQL 문장 자체가 아닌 파스 트리를..
08. 인덱스-2 8.4 R-Tree 인덱스 공간 인덱스(Spatial Index) 공간 인덱스는 R-Tree 인덱스 알고리즘을 이용해 2차원의 데이터를 인덱싱하고 검색하는 목적의 인덱스 기본적인 내부 메커니즘은 B-Tree와 흠사하다. B-Tree는 인덱스를 구성하는 컬럼의 값이 1차원의 스칼라 값인 반면, R-Tree 인덱스는 2차원의 공간 개념 값이다. MySQL의 공간 확장(Spatial Extension)을 이용하면 위치 기반 서비스를 간단하게 구현할 수 있다. MySQL의 공간 확장의 기능 공간 데이터를 저장할 수 있는 데이터 타입 공간 데이터 검색을 위한 공간 인덱스 (R-Tree 알고리즘) 공간 데이터의 연산 함수 (거리 또는 포함 관계의 처리) -> 12.2절 '공간 검색' 구조 및 특성 MySQL은 공간..
08. 인덱스-1 8.1 디스크 읽기 방식 데이터베이스의 성능 튜닝은 랜덤 I/O 나 순차 I/O 등과 같은 디스크 I/O를 어떻게 줄이느냐가 관건일 때가 상당히 많다. 하드 디스크 드라이브(HDD) 와 솔리드 스테이트 드라이브(SSD) 컴퓨터에서 CPU나 메모리 같은 주요 장치는 대부분 전자식 장치지만 하드 디스크 드라이브는 기계식 장치다. 그래서 데이터베이스 서버에서는 항상 디스크 장치가 병목이 된다. 기계식 하드 디스크 드라이브를 대체하기 위해 전자식 저장 매체인 SSD(Solid State Drive)가 많이 출시되고 있다. SSD도 기존 하드 디스크 드라이브와 같은 인터페이스(SATA나 SAS)를 지원하므로 내장 디스크나 DAS 또는 SAN에 그대로 사용할 수 있다. SSD 기존의 하드 디스크 드라이브에서 데이터..
07. 데이터 암호화 MySQL 5.7 버전: 데이터 암호화 기능 지원 시작. 데이터 파일(테이블스페이스) 암호화만 가능 MySQL 8.0 버전: 데이터 파일 뿐만 아니라 Redo, Undo 로그, 복제를 위한 바이너리 로그 등도 암호화 기능 지원 데이터 암호화 여부는 보안 감사에서 필수적으로 언급되는 부분이며, 핀테크 서비스처럼 중요한 정보를 저장하는 서비스에서는 응용 프로그램에서 암호화한 데이터를 데이터베이스 서버에서 다시 암호화하는 이중 암호화 방법을 선택하기도 한다. 응용 프로그램의 암호화는 주로 중요 정보를 가진 컬럼 단위로 암호화를 수행하며, 데이터베이스 수준에서는 테이블 단위로 암호화를 적용한다. 7.1 MySQL 서버의 데이터 암호화 MySQL 서버의 암호화 기능은 데이터베이스 서버와 디스크 사이의 데이터 읽고..