SKN/02. DB

02. MySQL 개요

claovy☘️ 2025. 2. 18. 11:17

01. MySQL?

💡가장 널리 사용되는 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)이다. 현재는 Oracle사가 소유하고 있으며 MySQL은 LAMP (Linux, Apache, MySQL, PHP/Python/Perl) 스택의 중요한 구성 요소로서, 웹 기반 애플리케이션을 비롯해 온라인 게임, 소프트웨어 및 서비스, 데이터 분석 및 데이터 웨어하우스 등 다양한 종류의 애플리케이션에 사용된다.

02. MySQL 동작원리

01. MySQL 쿼리 실행 과정

1. 클라이언트/서버 통신
클라이언트(MySQL Workbench, 커맨드 라인 인터페이스, 프로그래밍 언어 API 등)에서 SQL 쿼리를 MySQL 서버로 전송한다.

2. 쿼리 파싱
MySQL 서버가 쿼리를 받으면 먼저 쿼리를 파싱한다. 파서(parser)는 SQL문장을 이해할 수 있는 단위로 나누고 이 때 문장의 문법이 유효한지, 키워드가 올바르게 사용되었는지, 사용된 컬럼과 테이블이 실제로 존재하는지 등을 확인하고 문법에 오류가 있으면 파서는 오류 메시지를 반환하고 프로세스를 중단한다.

3. 최적화 및 실행 계획 생성
파싱이 성공적으로 완료되면, 쿼리 최적화기(optimizer)가 작동하여 파싱된 쿼리를 가능한 한 효율적으로 실행할 수 있는 방법을 결정한다. 사용할 인덱스 결정, 조인 순서, 데이터를 읽는 방법 등을 포함하여 ‘실행계획’이라는 형태로 생성된다.

4. 쿼리 실행
실행 계획에 따라, MySQL 서버는 스토리지 엔진을 통해 필요한 데이터를 불러오거나 변경하고 이 단계에서는 실제 데이터베이스 파일 또는 인덱스에 접근한다.

5. 결과 반환
쿼리 실행이 완료되면 MySQL 서버는 결과 세트(Result Set)를 클라이언트에게 반환한다. SELECT의 경우는 검색된 행들이 되고 INSERT, UPDATE, DELETE의 경우 영향을 받는 행의 수가 된다.

 

02. SQL 파싱

파싱?
  • ‘파싱’이라는 용어는 주로 컴퓨터 과학에서 사용되며, 일련의 문자열이나 데이터를 어떤 규칙에 따라 분석하고 이해하는 과정을 말한다.
  • MySQL 서버는 쿼리를 파싱하면 올바른 구문을 갖추었는지, 참조하는 테이블과 컬럼이 실제로 존재하는지, 사용자가 그 테이블과 컬럼에 액세스할 권한이 있는지 등을 검사한다.
파싱순서

1. 렉시컬 분석(Lexical Analysis) 진행
: 입력된 쿼리 문자열을 키워드나 리터럴, 식별자 등의 쿼리의 최소 단위로 분리한다. 예를 들어 ‘SELECT’, ‘*’, ‘FROM’, ‘WHERE’와 같은 키워드, 리터럴, 식별자를 토큰들로 만들게 된다.

2. 구문 분석(Syntax Analysis) 진행
: 토큰들이 MySQL의 문법에 맞는지 확인하고 오류가 발견되면 쿼리는 거부되고, 사용자에게 오류 메시지가 반환된다. 예를 들어, ‘WHERE’절 뒤에는 조건이 와야 하고 ‘SELECT’바로 다음에 ‘WHERE’가 오면 안되는 등의 규칙을 검사한다.

3. 의미 분석(Semantic Analysis) 진행
: 쿼리가 의미적으로 올바른지 확인한다. 예를 들어, 참조하는 테이블과 컬럼이 존재하는지, 데이터 형식이 맞는지 등을 검사한다.

4. SQL과 실행 계획 시 라이브러리 캐시에 캐싱 되어 있는지 확인

5. 캐싱되어 있을 시 소프트 파싱, 캐싱 되어 있지 않다면 하드 파싱

 

파싱의 종류와 캐시

1) 소프트 파싱
: SQL과 실행 계획을 캐시에서 찾아 곧바로 쿼리 실행 단계로 넘어가는 경우

2) 하드 파싱
: SQL과 실행 계획을 캐시에서 찾지 못해 최적화 과정을 거치고 나서 실행 단계로 넘어가 는 경우

3) 라이브러리 캐시
: 해시구조로 엔진에서 관리되며 SQL마다 해시 값에 따라 여러 해시 버킷으로 나뉘어 저장 되고 SQL을 찾을 때는 SQL 문장을 해시 함수에 적용하여 반환되는 해시 값을 이용해서 해시 버킷을 탐색한다.

 

03. 옵티마이저

옵티마이저?
: 옵티마이저는 쿼리를 실행하는 데 필요한 가장 효율적인 방법을 결정하기 위해 사용된다.
: MySQL에서는 기본적으로 CBO를 사용하며 RBO를 제공하지 않는다.
옵티마이저 종류

1) 비용 기반 옵티마이저(Cost-Based Optimizer, CBO)
: 쿼리를 실행하는 데 필요한 비용을 추정하여 쿼리 실행 계획을 선택한다. 이 비용은 디스크 I/O, CPU 사용량 등의 자원 사용을 고려하고 데이터베이스의 통계 정보(테이블의 행 수, 인덱스의 유니크한 값 등)를 사용하여 비용을 추정한다.
데이터베이스의 실제 상황을 더 잘 반영하는 쿼리 실행 계획을 선택할 수 있다.

2) 규칙 기반 옵티마이저(Rule-Based Optimizer, RBO)
: 고정된 세트의 규칙을 기반으로 쿼리 실행 계획을 결정한다. 규칙은 개발자나 DBA(Database Administrator)가 설정할 수 있으며 특정 상황에서 특정 유형이 연산이 더 효과적이라는 경험 적인 지식에 기반해 정해진다.
실제 데이터 분포나 통계를 고려하지 않으므로 때때로 비효율적인 쿼리 실행 계획을 선택할 수 있다.

03. MySQL 설치 및 설정

'SKN > 02. DB' 카테고리의 다른 글

07. DDL(Data Definition Language)  (0) 2025.02.19
06. 정규화  (0) 2025.02.19
05. 이상(Anomaly)  (0) 2025.02.19
03. DB Modeling 개요  (0) 2025.02.19
01. DB 개요  (0) 2025.02.18