MySQL(8)
-
16장 복제
문제 1. 레플리카 서버를 구축하는 목적 4가지를 말씀해주세요스케일 아웃데이터 백업데이터 분석데이터 지리적 분산문제 2. 바이너리 로그 파일 위치 기반 복제란?레플리카 서버에서 소스 서버의 바이너리 로그 파일명과 파일 내에서의 위치로 개별 바이너리 로그 이벤트를 식별해서 복제가 진행되는 형태문제 3. GTID를 사용하는 복제 환경에서 안전하지 않은 쿼리 패턴은?트랜잭션을 지원하는 테이블과 지원하지 않는 테이블을 함께 변경하는 쿼리 혹은 트랜잭션create table … select … 구문트랜잭션 내에서 creat temporary table, drop temporary table 구문 사용소스 서버에서 레플리카 서버로 복제되어 적용될 때 단일 트랜잭션으로 처리되지 않을 수 있음GTID는 트랜잭션 단위로..
2024.07.01 -
14장 스토어드 프로그램
문제 1. 스토어드 프로시저의 파라미터 종류와 차이점을 말해주세요.IN 타입 : 입력 전용 파라미터OUT 타입 : 출력 전용 파라미터INOUT : 입출력 모두 가능문제 2. 일회성 이벤트를 등록하려면 ON SCHEDULE (A)를 사용하고, 반복성 이벤트를 등록하려면 ON SCHEDULE (B)를 사용한다.(A) : AT (B) : EVERY문제 3. 스토어드 프로그램의 입력 파라미터, DECLARE로 정의한 로컬 변수, 테이블 칼럼이 같은 이름을 가질 경우 우선순위를 말해주세요.DECLARE로 정의한 로컬 변수스토어드 프로그램의 입력 파라미터테이블 칼럼
2024.07.01 -
13장 파티션
문제 1. 파티션을 사용하는 이유단일 INSERT와 단일 또는 범위 SELECT의 빠른 처리데이터의 물리적인 저장소를 분리이력 데이터의 효율적인 관리문제 2. 다음과 같이 생성된 테이블에 입사 일자가 2001년부터 2005년 이하인 레코드를 가지는 파티션을 추가하는 SQL을 작성해주세요. CREATE TABLE employees ( id INT NOT NULL, first_name VARCHAR(30), last_name VARCHAR(30), hired DATE NOT NULL DEFAULT '1970-01-01’, ... ) PARTITION BY RANGE( YEAR(hired) ) ( PARTITION p0 VALUES LESS THAN (1991), ..
2024.07.01 -
10장 실행계획
문제 1. MySQL 8.0부터 인덱스되지 않은 칼럼들에 대해서도 데이터 분포도를 수집해서 저장하는데 이 정보를 무엇이라고 합니까?히스토그램문제 2. 일부 파티션만 접근해서 읽었을 때, 실행 계획에서 type이 ALL이라고 뜨는 이유는 무엇인가요파티션은 물리적으로 개별 테이블처럼 별도의 저장 공간을 가지기 때문에 해당 파티션을 풀 스캔할 경우 type이 ALL로 나옵니다.문제 3. 실행 계획에서 rows 칼럼이 나타낸 것은 무엇인가요?실행 계획의 효율성 판단을 위해 예측했던 레코드 건수쿼리를 처리하기 위해 얼마나 많은 레코드를 읽고 처리해야 하는지를 의미함문제 4. 이 쿼리는 salary 칼럼으로 만들어진 인덱스를 사용할 수 없습니다. 그 이유와 인덱스를 사용할 수 있도록 튜닝한 쿼리를 알려주세요.sel..
2024.07.01 -
9장 옵티마이저와 힌트
문제 1. 정렬해야 할 레코드 수가 소트 버퍼로 할당된 공간보다 큰 경우 어떻게 처리하나요?메모리의 소트 버퍼에서 정렬을 수행하고 그 결과를 임시로 디스크에 기록다음 레코드를 가져와서 다시 정렬해서 반복적으로 디스크에 임시 저장각 버퍼 크기만큼 정렬된 레코드를 다시 병합하면서 정렬 수행 ⇒ 멀티 머지문제 2. P2. 투 패스 정렬 방식을 사용하는 경우는?레코드의 크기가 max_length_for_sort_data 시스템 변수에 설정된 값보다 클 때BLOB이나 TEXT 타입의 컬럼이 SELECT 대상에 포함될 때문제 3. 조인 버퍼를 사용하면 정렬 순서가 흐트러질 수 있는 이유를 설명해주세요.조인 버퍼를 사용할 경우 드라이빙 테이블에서 조건에 맞는 레코드들을 조인 버퍼에 저장 후 드라이븐 테이블을 읽고 조..
2024.07.01 -
8장 인덱스
문제 1. (dept_no, emp_no) 로 구성된 인덱스가 있을 때 select * from employees where emp_no > 2000; 을 실행했더니 인덱스 풀 스캔 방식을 사용했습니다. 그 이유는 무엇일까요.조건절에 첫번째 칼럼이 아닌 두번째 칼럼을 사용했기 때문에 인덱스 풀 스캔 방식을 사용문제 2.(dept_no, emp_no) 로 구성된 인덱스가 있을 때 select * from employees where emp_no > 2000; 을 실행했더니 인덱스 스킵 스캔 방식을 사용했습니다. dept_no 의 유니크 값은 {1, 2} 입니다. 옵티마이저는 내부적으로 어떤 최적화 과정을 실행했을지 설명해주세요.select * from employees where dept_no = 1 an..
2024.07.01 -
5장 트랜잭션
문제1. InnoDB에서 인덱스 설계가 중요한 이유에 대해 설명해주세요.InnoDB는 MySQL에서 제공하는 잠금과 별개로 스토리지 엔진 내부에 레코드 기반 잠금 방식을 가지고 있습니다. 이 때 변경하려는 레코드 자체에 락을 거는 것이 아니라 검색한 인덱스의 레코드에 잠금을 걸기 때문에 같은 인덱스에 속한 모든 레코드에 락이 걸리게 됩니다. 그렇기 때문에 인덱스 설계를 통해 데이터 변경 시 락이 걸리는 범위를 줄일 수 있도록 해주어야 합니다.문제 2. GAP Lock에 대해 설명해주세요레코드와 바로 인접한 레코드 사이의 간격만 잠그는 것으로 레코드와 레코드 사이의 간격에 새로운 레코드가 생성되는 것을 제어합니다.문제 3. 격리 수준이 READ COMMITTED 인 상태에서 A 트랜잭션이 데이터를 변경 중..
2024.07.01 -
4장 아키텍처
문제1. 쿼리 수행 과정에 대해 설명해주세요쿼리 파서가 쿼리를 토큰으로 분리해 파서 트리를 생성합니다. 이 때 기본 문법 오류가 발견됩니다.이 후 전처리기가 파서 트리를 기반으로 각 토큰을 테이블 이름과 칼럼 이름, 내장 함수와 같은 개체와 매핑하여 구조적 문제가 있는지 확인합니다. 이 때 존재하지 않거나 권한상 사용할 수 없는 개체의 토큰이 걸러집니다.옵티마이저는 쿼리를 가장 최적화된 비용으로 처리할 수 있는 실행계획을 선택합니다. 실행 엔진은 옵티마이저에서 만들어진 계획대로 각 핸드러에게 요청하면 핸들러가 데이터를 디스크에 저장하거나 디스크로부터 읽어옵니다.문제2. MySQL 8.0버전부터는 메타데이터를 InnoDB에 테이블에 저장하도록 바뀌었는데 이렇게 했을 때의 장점은 무엇인가요MySQL 5.7버..
2024.07.01