EZIndex1h  /  Chuyên đề Kỹ thuật & Hạ tầng Web
Cơ Sở Dữ Liệu & Backend

Kiến Trúc SQLite Chế Độ WAL Xử Lý Hàng Đợi Hàng Chục Nghìn Bản Ghi (Mã EZ02)

Xuất bản: 21/10/2026 • Mã tài liệu: KIEN-TRUC-SQLITE-WAL-XU-LY-HANG-DOI-NGHIN-REQUEST-EZ02 • Tác giả: EZIndex1h Engineering Lab
Cách cấu hình SQLite ở chế độ Write-Ahead Logging (WAL) kết hợp gom lô giao dịch để đạt tốc độ ghi hàng chục nghìn dòng mỗi giây.

1. Tại sao chế độ nhật ký mặc định gây nghẽn khi ghi đồng thời

Trong chế độ rollback journal truyền thống, mỗi thao tác ghi yêu cầu khóa toàn bộ tệp cơ sở dữ liệu, khiến các luồng đọc phải chờ đợi. Khi chuyển sang chế độ WAL (Write-Ahead Logging), các thay đổi được nối trực tiếp vào tệp nhật ký riêng biệt, cho phép các luồng đọc và ghi hoạt động song song mà không chặn lẫn nhau.

2. Gom lô giao dịch với executemany

Thay vì mở và đóng giao dịch cho từng bản ghi đơn lẻ, việc gom 30.000 bản ghi vào một giao dịch duy nhất giúp giảm số lần đồng bộ đĩa (fsync) từ 30.000 lần xuống chỉ còn 1 lần. Thời gian chèn 30.000 bản ghi giảm từ hơn 40 giây xuống dưới 0.3 giây trên ổ cứng NVMe tiêu chuẩn.

3. Cấu hình bộ nhớ đệm trang và đồng bộ NORMAL

Thiết lập PRAGMA synchronous=NORMAL cùng với kích thước bộ nhớ đệm trang âm (-64000 tương đương 64MB RAM) giúp giữ toàn bộ chỉ mục B-Tree thường dùng trong bộ nhớ, đảm bảo truy vấn thống kê thời gian thực luôn đạt độ trễ dưới 5ms.