4장 아키텍처

2024. 7. 1. 19:12BOOKS/Real MySQL 8.0

문제1. 쿼리 수행 과정에 대해 설명해주세요

쿼리 파서가 쿼리를 토큰으로 분리해 파서 트리를 생성합니다. 이 때 기본 문법 오류가 발견됩니다.
이 후 전처리기가 파서 트리를 기반으로 각 토큰을 테이블 이름과 칼럼 이름, 내장 함수와 같은 개체와 매핑하여 구조적 문제가 있는지 확인합니다. 이 때 존재하지 않거나 권한상 사용할 수 없는 개체의 토큰이 걸러집니다.
옵티마이저는 쿼리를 가장 최적화된 비용으로 처리할 수 있는 실행계획을 선택합니다. 실행 엔진은 옵티마이저에서 만들어진 계획대로 각 핸드러에게 요청하면 핸들러가 데이터를 디스크에 저장하거나 디스크로부터 읽어옵니다.

문제2. MySQL 8.0버전부터는 메타데이터를 InnoDB에 테이블에 저장하도록 바뀌었는데 이렇게 했을 때의 장점은 무엇인가요

MySQL 5.7버전까지는 메타데이터를 파일 형태로 저장했었는데 이런 파일 기반 메타데이터는 테이블을 생성 또는 변경하는 도중 MySQL 서버가 비정상적으로 종료되면 일관되지 않은 상태로 남아있는 문제가 발생합니다.
반면 메타데이터를 DB 테이블에 저장하면 테이블을 변경하던 도중 MySQL 서버가 비정상적으로 중료되더라도 완전한 성공 또는 실패로 처리되기 때문에 일관성을 유지할 수 있습니다.

문제3. MVCC에 대해서 설명해주세요

MVCC는 하나의 레코드에 대해서 여러 개의 버전을 동시에 관리하는 것으로 잠금을 사용하지 않는 일관된 읽기를 제공하기 위해 만들어졌습니다. MySQL은 언두 로그를 사용하여 MVCC를 구현하고 있습니다. 데이터 변경이 발생하면 언두 로그에 변경 전의 데이터를 백업하고 있다가 해당 데이터에 대한 조회가 발생하면 언두 로그에서 일어옵니다. 그리고나서 commit이 발생하면 변경된 데이터를 영구적인 데이터로 저장하고, rollback하면 언두 로그에 백업한 데이터를 다시 버퍼 풀로 복구하고 언두 로그의 데이터를 삭제합니다.

문제4. 더티 페이지에 대해 설명해주세요

UPDATE, DELETE 문에 의해 변경된 데이터를 가지는 페이지입니다.

'BOOKS > Real MySQL 8.0' 카테고리의 다른 글

13장 파티션  (0) 2024.07.01
10장 실행계획  (0) 2024.07.01
9장 옵티마이저와 힌트  (0) 2024.07.01
8장 인덱스  (0) 2024.07.01
5장 트랜잭션  (0) 2024.07.01