#innodb
글
-
MariaDB 소스 파헤치기 10: InnoDB 1 — 페이지, 버퍼 풀, B-트리
handler 아래로 내려가 InnoDB가 데이터를 담는 세 가지 그릇을 소스로 읽습니다. 16KB 페이지의 FIL 헤더·페이지 헤더·레코드·페이지 디렉터리, 페이지를 메모리에 붙잡아 두는 버퍼 풀(buf_page_get_gen, LRU의 old 구역, 더티 페이지와 page cleaner), 테이블 그 자체인 클러스터드 인덱스 B-트리(search_leaf, 페이지 분할), 그리고 페이지 잠금과 redo를 묶는 미니 트랜잭션 mtr_t입니다. .ibd 파일을 od로 열어 페이지 머리를 읽고, information_schema로 버퍼 풀 안을 보고, 행을 늘려 B-트리 높이와 분할을 세고, gdb로 SELECT·INSERT가 B-트리에 닿는 길을 확인합니다.
-
MariaDB 소스 파헤치기 11: InnoDB 2 — 트랜잭션, MVCC, undo, 잠금
COMMIT 한 줄이 서버 계층의 ha_commit_trans()에서 InnoDB의 trx_t::commit()까지 가는 길, REPEATABLE READ가 옛 값을 보여 주는 ReadView와 undo 사슬, 아무도 안 보는 옛 판을 치우는 purge, 그리고 행 잠금·갭 잠금·잠금 대기·교착 탐지를 기준 커밋의 소스로 따라갑니다. 두 세션 예제로 스냅샷, 잠금 대기, 교착, history list length를 직접 확인합니다.
-
MariaDB 소스 파헤치기 12: 로그 두 개 — redo 로그와 binlog, 크래시 복구, 그리고 연재를 마치며
COMMIT이 돌아왔을 때 무엇이 디스크에 있다는 뜻인지, InnoDB의 redo 로그(log_sys, LSN, mtr_t::commit, log_write_up_to)와 innodb_flush_log_at_trx_commit이 갈리는 자리, 체크포인트와 ib_logfile0의 배치, kill -9 뒤 redo로 앞으로 가고 undo로 되돌아오는 크래시 복구, 서버 계층의 binlog와 이벤트, 두 로그를 XID로 맞추는 2단계 커밋과 그룹 커밋을 소스로 따라갑니다. DBUG 크래시 지점으로 2단계 커밋의 두 틈에서 서버를 죽여 복구가 무엇을 하는지 직접 확인하고, 연재 열두 편을 정리합니다.