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

Chủ đề
Mô tả

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