본문 바로가기

Backend/MySQL

[MySQL] 기본 구조와 show databases

MySQL 전체 코드는 36 MB이다. 일일이 모든 코드를 보는 것은 힘들다. 그래서 우리가 흔히 쓰는 쿼리들을 입력하였을 때, 어떤 방식으로 동작하는지를 파악하려고 한다. 

 

아래와 같은 쿼리들에 대해서 어떤 식으로 동작하는지 알아볼 것이다. 

SHOW DATABASES;
CREATE DATABASE mydatabase;
USE mydatabase;
CREATE TABLE mytable (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    age INT
);
INSERT INTO mytable (name, age) VALUES ('John', 30), ('Alice', 25), ('Bob', 35);
SELECT * FROM mytable;

 

우선 command set이 있다. 이는 사용자가 입력가능한 command와 command에 대응하는 function pointer를 저장해놓은 형식이다. 

static COMMANDS commands[] = {
    {"?", '?', com_help, true, "Synonym for `help'."},
    {"clear", 'c', com_clear, false, "Clear the current input statement."},
    {"connect", 'r', com_connect, true,}
    }

 

show databases 를 입력하면 어떻게 내부적으로 동작할까?

 

아래의 함수를 순차적으로 호출한다. 

  1. add_line
  2. com_go
  3. com_go_impl
  4. mysql_store_result_for_lazy
  5. mysql_store_result

add_line에서 버퍼에 line(명령어)를 담은 후, 아래 함수들을 순차적으로 호출한다. mysql_store_result는 클라이언트 라이브러리에서 결과를 처리하고, 응용 프로그램에 쿼리 결과를 제공하기 위해 사용된다. 

 

  • add_line이 static 으로 정의되어 있는 이유:
    static 전역 변수는 자신이 선언된 소스 범위 안에서만 사용될 수 있고, 외부에서는 사용될 수 없다. 함수의 범위를 명시적으로 제한한 것이다. 이는 모듈성을 향상시킨다. 

 

이 과정에서 lldb를 활용하였다. 처음에는 눈으로만 코드의 흐름을 따라가려고 했는데 코드가 워낙 복잡해서 필요하였다. lldb를 잘 사용하면 앞으로 다른 코드를 분석할 때에도 시간을 획기적으로 줄여줄 것 같다. 

'Backend > MySQL' 카테고리의 다른 글

[MySQL] partitioning 구성  (0) 2024.05.14
[MySQL] replication 구성  (0) 2024.05.12
[MySQL] git clone MySQL  (0) 2024.04.21
[MySQL] Hello MySQL!  (0) 2024.04.20