MySQL
Last updated
Last updated
MySQL có kiến trúc layered (tầng lớp), gồm các thành phần chính sau:
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,...).
🧠 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
.
Thực thi query theo plan đã chọn.
Giao tiếp với storage engine để lấy dữ liệu.
Đâ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:
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
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
,...
Hỗ trợ rollback và MVCC.
Được ghi trong undo tablespace
.
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.
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.
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
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.
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.).
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