Cấu hình bộ nhớ cơ sở dữ liệu cho tier của bạn
Giá trị buffer cụ thể cho PostgreSQL và MySQL cho VDS-1…VDS-6, và quy tắc phân phối bộ nhớ giữa cơ sở dữ liệu, ứng dụng, và hệ thống.
Cập nhật 23 tháng 8, 2026
Cấu hình cơ sở dữ liệu mặc định được thiết kế để chạy được ở mọi nơi, chứ không phải để chạy nhanh. Trên VDS-3 với 8 GB bộ nhớ, PostgreSQL khi cài mặc định chỉ dùng 128 MB cho cache — nghĩa là nó đọc gần như mọi thứ từ đĩa, dù hoàn toàn có thể đọc từ bộ nhớ.
Quy tắc phân bổ
Chia bộ nhớ của gói đại khái như sau:
- hệ thống và các tiến trình dịch vụ — 10–15%;
- ứng dụng (PHP-FPM, Node, gunicorn) — theo số lượng worker;
- cơ sở dữ liệu — phần còn lại, nhưng không quá 60–70% tổng bộ nhớ.
Đừng bao giờ cấp hết bộ nhớ cho cơ sở dữ liệu: hệ thống sẽ rơi vào swap, và NVMe cũng không cứu được bạn — độ trễ sẽ tăng lên hàng chục lần.
Lượng đang sử dụng hiện tại:
free -h
ps -eo pmem,rss,comm --sort=-rss | head
Biểu đồ bộ nhớ trong một giờ, một ngày, một tuần và một tháng có trong mục "Tổng quan" của bảng điều khiển /hosting/vds/m/<id> — chúng hiển thị đỉnh thực tế, chứ không phải thời điểm hiện tại.
PostgreSQL
/etc/postgresql/17/main/postgresql.conf:
| Gói | shared_buffers | effective_cache_size | work_mem | maintenance_work_mem | max_connections |
|---|---|---|---|---|---|
| VDS-1 (2 GB) | 384MB | 1GB | 8MB | 96MB | 40 |
| VDS-2 (4 GB) | 1GB | 2GB | 12MB | 256MB | 60 |
| VDS-3 (8 GB) | 2GB | 5GB | 16MB | 512MB | 100 |
| VDS-4 (16 GB) | 4GB | 10GB | 24MB | 1GB | 150 |
| VDS-5 (24 GB) | 6GB | 16GB | 32MB | 2GB | 200 |
| VDS-6 (32 GB) | 8GB | 22GB | 48MB | 2GB | 250 |
Thêm các thiết lập chung cho NVMe:
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem được cấp cho mỗi thao tác sắp xếp, chứ không phải mỗi kết nối: một trăm truy vấn song song có sắp xếp phức tạp sẽ nhân nó lên hàng trăm lần. Đừng đặt quá cao.
Áp dụng: systemctl restart postgresql (thay đổi shared_buffers bắt buộc phải khởi động lại).
MySQL và MariaDB
| Gói | innodb_buffer_pool_size | innodb_log_file_size | max_connections |
|---|---|---|---|
| VDS-1 | 512M | 128M | 60 |
| VDS-2 | 1G | 256M | 100 |
| VDS-3 | 3G | 512M | 150 |
| VDS-4 | 8G | 1G | 200 |
| VDS-5 | 12G | 1G | 250 |
| VDS-6 | 18G | 2G | 300 |
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 1
innodb_io_capacity = 2000
Buffer pool là tham số chính: nếu nó chứa được tập dữ liệu đang làm việc, đĩa gần như không bị đọc.
Kiểm tra hiệu quả
SELECT sum(blks_hit)*100/sum(blks_hit+blks_read) FROM pg_stat_database;
Với MySQL, hãy xem SHOW ENGINE INNODB STATUS và tỷ lệ giữa Innodb_buffer_pool_reads và Innodb_buffer_pool_read_requests. Tỷ lệ cache hit dưới 95% nghĩa là cơ sở dữ liệu không đủ bộ nhớ.
Lỗi thường gặp
| Triệu chứng | Nguyên nhân |
|---|---|
| Cơ sở dữ liệu không khởi động sau khi sửa | Yêu cầu nhiều bộ nhớ hơn mức có sẵn — kiểm tra journal |
| Tiến trình bị OOM kill | Cơ sở dữ liệu, ứng dụng và hệ thống cộng lại vượt quá bộ nhớ của gói |
| Chậm hơn sau khi "tối ưu" | work_mem đặt quá cao, máy đang swap |
| Đĩa liên tục bị đọc | Buffer quá nhỏ, tập dữ liệu làm việc không vừa |
Nếu sau khi tinh chỉnh bộ nhớ bạn vẫn chạm trần, thì vấn đề nằm ở lượng dữ liệu chứ không phải cấu hình. Bạn chỉ có thể nâng cấp gói, với khoản thanh toán được tính theo tỷ lệ cho những ngày còn lại của kỳ hạn đã trả; không hỗ trợ hạ cấp, nên hãy cân nhắc kỹ khi chọn gói tiếp theo.