Cơ Sở Dữ Liệu & Backend

Cấu Hình SQLite Production PRAGMA

Tính toán và tạo cấu hình SQLite PRAGMA tối ưu cho các dịch vụ web tải cao bằng Python, Node.js, Go và Rust.

Companion In-Depth Guide

Read our complete architectural analysis on SQLite concurrency, WAL mechanics, and Litestream replication.

PRAGMA Engine Parameters

✓ Non-blocking

WAL enables concurrent readers without waiting for active write transactions.

Safe with WAL

In WAL mode, NORMAL is crash-safe for OS crashes while reducing fsync disk writes by 80%.

5000 ms (5.0s)

Prevents SQLITE_BUSY errors by sleeping until lock clears.

64 MB RAM

Negative value in SQLite (e.g. -65536) configures cache directly in KiB.

256 MB

Memory-maps DB pages directly to OS page cache, avoiding userspace memcpy overhead.

Standard OS page

Must be set before initial table creation; 4KB aligns with modern NVMe/SSD cluster blocks.

Store temporary tables and indices in RAM instead of disk.

Enforce relational constraint integrity on INSERT and DELETE.

-- SQLite Production PRAGMA Configuration
-- Generated by Locionic SQLite Configurator (https://locionic.com/vi/tools/sqlite-configurator)

-- 1. Storage page size (4096 bytes - MUST be set before creating database header/tables)
PRAGMA page_size = 4096;

-- 2. Enable Write-Ahead Logging for non-blocking concurrent readers
PRAGMA journal_mode = WAL;

-- 3. Synchronous safety level (NORMAL is crash-safe with WAL; FULL fsyncs every commit)
PRAGMA synchronous = NORMAL;

-- 4. Milliseconds to wait before returning SQLITE_BUSY when database is locked
PRAGMA busy_timeout = 5000;

-- 5. In-memory page cache size (64 MB RAM)
PRAGMA cache_size = -65536;

-- 6. Memory-mapped I/O size (256 MB)
PRAGMA mmap_size = 268435456;

-- 7. Temporary table and index storage (MEMORY)
PRAGMA temp_store = MEMORY;

-- 8. WAL file auto-checkpoint threshold (1000 pages)
PRAGMA wal_autocheckpoint = 1000;

-- 9. Enforce relational foreign key constraints
PRAGMA foreign_keys = ON;
Advertisement

Hướng dẫn sử dụng

  1. Bước 1: Chọn mẫu cấu hình phù hợp (Ứng dụng web tải cao, Microservice Litestream, Độ bền dữ liệu nghiêm ngặt hoặc Phân tích dữ liệu).
  2. Bước 2: Điều chỉnh các thanh trượt PRAGMA: tăng busy_timeout để xử lý đột biến ghi đồng thời và tăng cache_size / mmap_size theo dung lượng RAM máy chủ.
  3. Bước 3: Xem xét các câu lệnh Raw SQL được tạo kèm phần giải thích chi tiết.
  4. Bước 4: Chuyển sang tab ngôn ngữ lập trình của bạn (Python, Node.js, Go, Rust) để sao chép mã kết nối database chuẩn production.
  5. Bước 5: Dán trực tiếp vào hàm khởi tạo kết nối cơ sở dữ liệu của dự án.

Câu hỏi thường gặp

Tại sao PRAGMA journal_mode = WAL lại bắt buộc cho backend web production?
Ở chế độ mặc định (DELETE), mọi giao dịch ghi đều khóa toàn bộ cơ sở dữ liệu, chặn hoàn toàn các luồng đọc đồng thời. Trong chế độ Write-Ahead Logging (WAL), các thao tác ghi được ghi nối vào file -wal riêng biệt, cho phép vô số luồng đọc dữ liệu cùng lúc mà không bị nghẽn.
Thiết lập PRAGMA synchronous = NORMAL có an toàn trong chế độ WAL không?
Có, trong chế độ WAL, synchronous = NORMAL hoàn toàn an toàn khi gặp sự cố crash ứng dụng hoặc hệ điều hành. Nó loại bỏ các lệnh fsync đắt đỏ sau mỗi lượt ghi, giúp giải tỏa nghẽn I/O đĩa cứng và tăng thông lượng ghi lên gấp 10 lần mà vẫn bảo toàn tính toàn vẹn dữ liệu.
Tại sao cần thiết lập PRAGMA busy_timeout = 5000?
SQLite chỉ cho phép một writer hoạt động tại một thời điểm. Mặc định SQLite sẽ trả về lỗi SQLITE_BUSY ngay lập tức nếu có tranh chấp ghi. Thiết lập busy_timeout = 5000 yêu cầu SQLite tự động chờ và thử lại tối đa 5 giây trước khi báo lỗi, tạo thành hàng đợi ghi ngầm rất mượt mà.
Giá trị âm trong PRAGMA cache_size có ý nghĩa gì?
Trong SQLite, giá trị dương chỉ định số trang bộ nhớ cần cache. Trong khi đó, giá trị âm (ví dụ: -64000) chỉ định trực tiếp dung lượng bộ nhớ cache theo đơn vị kibibyte (64,000 KiB ≈ 64 MB RAM), không phụ thuộc vào kích thước trang bộ nhớ.
PRAGMA mmap_size là gì và khi nào nên bật?
PRAGMA mmap_size ánh xạ một phần file database trực tiếp vào không gian bộ nhớ ảo của tiến trình ứng dụng qua OS page cache. Khi đọc dữ liệu, database bỏ qua lệnh gọi hệ thống read() và sao chép memcpy, giúp tốc độ đọc nhanh tương đương bộ nhớ RAM. Đặt mmap_size từ 256MB đến 1GB mang lại hiệu quả vượt trội cho các ứng dụng đọc nhiều.

The Senior Full-Stack Production Kit (2026)

Checklists, Docker recipes, and SSR error fixes in one dense PDF.

Get Free Kit

Bài viết liên quan

Dev Kits & DataToolsTagsRSSPrivacy PolicyTerms