Buffer Pool = cache của MySQL InnoDB ở mức dữ liệu (data + index), hoạt động trong RAM.

Buffer Pool trong MySQL InnoDB là một vùng bộ nhớ quan trọng dùng để cache (bộ nhớ đệm) dữ liệu và index (chỉ mục) của các bảng.
Hiểu đơn giản: thay vì mỗi lần truy vấn đều phải đọc trực tiếp từ ổ cứng (disk) vốn chậm, MySQL sẽ lấy dữ liệu ra và lưu vào RAM thông qua Buffer Pool để tăng tốc độ xử lý.

Cụ thể hơn:

  • Khi bạn chạy một SELECT, InnoDB sẽ:
    1. Kiểm tra xem dữ liệu có nằm trong Buffer Pool chưa.
    2. Nếu có → đọc thẳng từ RAM (nhanh).
    3. Nếu chưa có → lấy từ disk, rồi nạp vào Buffer Pool để các lần sau dùng tiếp.
  • Khi bạn chạy một INSERT/UPDATE/DELETE:
    • InnoDB sẽ ghi dữ liệu thay đổi vào Buffer Pool trước (chưa ghi ngay ra disk).
    • Sau đó, theo chu kỳ, InnoDB sẽ flush (ghi đồng bộ) dữ liệu từ Buffer Pool xuống disk để đảm bảo tính an toàn.

Vai trò:

  • Giảm I/O disk → tăng tốc truy vấn.
  • Giữ dữ liệu được truy cập thường xuyên (hot data) trong RAM.
  • Giúp MySQL xử lý transaction nhanh và an toàn hơn.

Một số tham số quan trọng:

  • innodb_buffer_pool_size → kích thước Buffer Pool (bao nhiêu GB RAM được dùng).
  • innodb_buffer_pool_instances → chia Buffer Pool thành nhiều “instance” để giảm contention (xung đột khi nhiều thread truy cập cùng lúc).
  • innodb_buffer_pool_dump_at_shutdowninnodb_buffer_pool_load_at_startup → cho phép lưu và nạp lại trạng thái Buffer Pool khi MySQL restart (giúp khởi động nhanh hơn).

👉 Có thể hiểu Buffer Pool giống như "RAM cache riêng của InnoDB", càng to thì MySQL càng ít phải đọc/ghi ổ cứng.