MariaDB
- MariaDB란
- MySQL의 포크로 시작 후, API, ABI 호환성을 유지하고 있다. 웹 기반 애플리ㅔ이션, 데이터 웨어하우징, 데이터 관리 요구사항을 충족시키기 위해 사용된다.
- MariaDB에서 제공하는 데이터베이스 엔진
2) InnoDB3) MyRocks4) TokuDB: Aria는 MariaDB의 기본 스토리지 엔진 중 하나로, MyISAM의 후속작이다. 주로 읽기 중심의 작업에 최적화 되어 있고 향상된 캐싱 및 인덱싱 기능을 제공한다. 크래시 복구 기능이 강화되어 있어 시스템 장애 발생 시 데이터 복구가 더 용이하다.
: TokuDB는 고성능의 쓰기 집중적 애플리케이션에 적합한 스토리지 엔진이다. 고급 압축 기술을 사용하여 대용량 데이터에 대한 디스크 공간 사용을 최적화한다. MVCC를 지원하며, 동시성과 크래시 복구 기능이 강화되어 있다. 특히 대용량 데이터 세트의 인덱싱에서 뛰어난 성능을 보인다.
: Facebook에서 개발한 MySQL용 스토리지 엔진으로 RocksDB에 기반을 두고있다. SSD 환경에서 우수한 성능을 발휘하며 효율적인 디스크 사용과 빠른 데이터 압축이 가능하다. 읽기 및 쓰기 작업에 최적화되어 있으며, 특히 쓰기 작업에서 고성능을 보인다.
: MySQL 및 MariaDB에서 **널리 사용되는 스토리지 엔진**이다. 트랜잭션을 지원하며, 롤백 및 크래시 복구 기능을 제공하여 높은 신뢰성을 보장한다. 외래 키 제약 조건을 지원하여 데이터 무결성을 유지한다. 행 수준의 잠금 및 MVCC(Multi-Version Concurrency Control)를 통해 동시성을 높이고 락 경합을 최소화한다.
- 1) Aria
- MariaDB 동작 원리
- MariaDB가 쿼리를 실행하는 과정
- 상세하게
쿼리 파싱최적화 및 실행 계획 생성쿼리 실행결과 반환클라이언트(HeidiSQL, 커맨드 라인 인터페이스, 프로그래밍 언어 API 등)에서 SQL 쿼리를 MariaDB 서버로 전송한다.
쿼리 실행이 완료되면 MariaDB 서버는 결과 세트(Result Set)를 클라이언트에게 반환한다. SELECT의 경우는 검색된 행들이 되고 INSERT, UPDATE, DELETE의 경우 영향을 받는 행의 수가 된다. 실행 계획에 따라, MariaDB 서버는 스토리지 엔진을 통해 필요한 데이터를 불러오거나 변경하고 이 단계에서는 실제 데이터베이스 파일 또는 인덱스에 접근한다.
파싱이 성공적으로 완료되면, 쿼리 최적화기(optimizer)가 작동하여 파싱된 쿼리를 가능한 한 효율적으로 실행할 수 있는 방법을 결정한다. 사용할 인덱스 결정, 조인 순서, 데이터를 읽는 방법 등을 포함하여 ‘실행계획’이라는 형태로 생성된다.
MariaDB 서버가 쿼리를 받으면 먼저 쿼리를 파싱한다. 파서(parser)는 SQL문장을 이해할 수 있는 단위로 나누고 이 때 문장의 문법이 유효한지, 키워드가 올바르게 사용되었는지, 사용된 컬럼과 테이블이 실제로 존재하는지 등을 확인하고 문법에 오류가 있으면 파서는 오류 메시지를 반환하고 프로세스를 중단한다.
- 클라이언트/서버 통신
- 상세하게
- query 날리기 → parser → parse tree → 전처리 → parse tree → query optimizer → execution engine → api call → database 방문
- MariaDB가 쿼리를 실행하는 과정
join 알고리즘
- 단순 네스티드 루프(Simple Nested Loop)
- 가장 기본적인 조인 알고리즘으로 한 테이블의 각 행에 대해 다른 테이블의 모든 행을 순회하면서 조인 조건을 만족하는지 확인한다.
- 매우 단순하지만 큰 데이터 세트에서는 비효율적일 수 있다.
- 블록 네스티드 루프(Block Nested Loop)
- 단순 네스티드 루프를 개선한 버전으로 데이터를 테이블(드라이빙 테이블)로부터 블록 단위로 불러와서 한 블록의 모든 행을 다른 테이블(드리븐 테이블)의 블록과 비교한다.
- I/O 작업을 줄여 성능을 향상시킬 수 있다.
- 굳이 이해하자면 주머니에 행들을 집어넣어서 한번에 비교
- 블록 네스티드 루프 해쉬(Block Nested Loop Hash)
- 블록 네스티드 루프와 유사하지만 해쉬 테이블을 사용하여 조인 조건을 만족하는 행을 더 효율적으로 찾는다.
- 해쉬 함수를 사용하여 조인 키를 빠르게 매칭할 수 있어 성능이 더욱 향상된다.
[BLOCK NESTED LOOP(BNL)](https://www.notion.so/BLOCK-NESTED-LOOP-BNL-3a7b29e8d6c549afafedc8aa9ec49214?pvs=21)
- 블록 인덱스(Block Index Join, Batched Key Access)
- 인덱스를 활용하여 조인을 수행한다.
- 인덱스를 사용하여 필요한 행만을 효율적으로 액세스하고, 불필요한 행의 검색을 최소화하여 성능을 개선한다.
- 블록 인덱스 해쉬(Block Index Hash Join, Batched Key Access Hash)
- 블록 인덱스 조인에 해쉬 기능이 추가된 것이다.
- 해쉬 테이블을 활용하여 인덱스의 조인 성능을 더욱 향상시켜 빠른 매칭이 필요한 경우 유용하다.
'Computer Science' 카테고리의 다른 글
[CS] simple broker vs mqtt (0) | 2024.12.18 |
---|