MySQL
🔧 Tổng Quan Kiến Trúc MySQL
MySQL có kiến trúc layered (tầng lớp), gồm các thành phần chính sau:

1. Client Layer (API Layer)
Tiếp nhận và xử lý các câu lệnh từ client (SQL query).
Giao tiếp qua giao thức
MySQL Protocol
.Các client sử dụng JDBC/ODBC driver, Command Line, hoặc GUI tools (DBeaver, MySQL Workbench,...).
2. Parser & Optimizer Layer
🧠 SQL Parser
Phân tích cú pháp câu lệnh SQL.
Sinh ra cây cú pháp (Parse Tree).
📈 Query Optimizer
Xác định execution plan tốt nhất.
Lựa chọn index, join method (Nested Loop, Hash Join,...).
Ví dụ: Chọn
Index Range Scan
thay vìFull Table Scan
.
3. Execution Engine
Thực thi query theo plan đã chọn.
Giao tiếp với storage engine để lấy dữ liệu.
4. Storage Engine Layer (InnoDB, MyISAM, Memory, etc.)
Đây là tầng quản lý dữ liệu vật lý thực sự trên disk.
Phổ biến nhất là InnoDB:
ACID compliant.
Support transactions.
Row-level locking.
MVCC (multi-version concurrency control).
Bạn có thể chọn engine bằng:
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(255)
) ENGINE = InnoDB;
🧱 InnoDB Storage Engine – Chuyên Sâu
1. Buffer Pool (RAM)
Giống như "caching layer".
Giữ các page dữ liệu, index, để giảm truy cập disk.
Tối ưu bằng tham số:
innodb_buffer_pool_size = 70~80% RAM
2. Redo Log
Ghi lại các thao tác ghi (write) để phục hồi nếu MySQL bị crash.
Đảm bảo durability (trong ACID).
File:
ib_logfile0
,ib_logfile1
,...
3. Undo Log
Hỗ trợ rollback và MVCC.
Được ghi trong
undo tablespace
.
4. Doublewrite Buffer
Chống corrupt khi ghi dữ liệu.
Ghi 2 lần: 1 lần vào doublewrite buffer, 1 lần vào tablespace thực.
5. Change Buffer
Lưu trữ các thay đổi với secondary index tạm thời trong RAM.
Sau đó mới apply dần dần để tối ưu hiệu suất ghi.
🔁 Binary Log (Binlog)
Nằm ngoài InnoDB.
Ghi lại tất cả thay đổi dữ liệu ở mức logical.
Dùng cho:
Replication
Point-In-Time Recovery
🧵 Thread Management
MySQL sử dụng connection pool (từ MySQL 8 trở lên có thread pooling
tốt hơn):
Mỗi connection thường là 1 thread.
Có thể cấu hình thread pool cho hiệu năng cao hơn với nhiều kết nối.
🔀 Query Cache (Legacy)
Trước đây MySQL có query cache, nhưng đã bị loại bỏ từ MySQL 8 vì không scale tốt.
Thay vào đó nên dùng caching riêng (Redis, Memcached, etc.).
🧰 Một Vài Tham Số Tối Ưu Phổ Biến
# my.cnf
innodb_buffer_pool_size = 4G
innodb_log_file_size = 1G
innodb_flush_log_at_trx_commit = 1 # Đảm bảo durability cao
max_connections = 200
thread_cache_size = 50
🧠 Một Vài Kiến Thức Mở Rộng Cho Senior Dev
Replication
Master-Slave, GTID Replication, Semi-Sync
High Availability
Group Replication, MySQL InnoDB Cluster
Partitioning
Horizontal partition theo RANGE, HASH
Performance Schema
Giám sát & profiling hệ thống
MySQL HeatWave
In-memory query accelerator trên MySQL
Last updated