Trả lời nhanh
PostgreSQL cần bao nhiêu CPU và RAM trên một VPS?
PostgreSQL cần khoảng một vCPU cho mỗi truy vấn chạy cùng một thời điểm, và đủ RAM để giữ working set trong bộ nhớ đệm. Trên Cobaltfell, Fell 2 (4 GB) phù hợp với một ứng dụng production nhỏ, còn Fell 8 (16 GB) phù hợp với một cơ sở dữ liệu vừa chạy báo cáo vừa phục vụ lưu lượng trực tiếp. Tài liệu PostgreSQL 18, đọc ngày 2 tháng 11 năm 2026, đưa ra 25% RAM làm giá trị khởi đầu cho shared_buffers.
PostgreSQL dùng bao nhiêu vCPU?
PostgreSQL dùng một luồng CPU cho mỗi truy vấn đang chạy, vì mỗi kết nối có tiến trình backend riêng. Tài liệu gọi đây là mô hình "process per user": postmaster sinh ra một backend mới cho mỗi kết nối. Do đó lượng CPU mà cơ sở dữ liệu cần được quyết định bởi số truy vấn thực thi cùng một thời điểm, không phải số kết nối đang mở. Một kết nối nhàn rỗi tốn bộ nhớ chứ không tốn CPU.
Ba thứ cộng thêm luồng vào trên số truy vấn của bạn:
- Truy vấn song song. Một lần quét lớn huy động thêm trợ thủ:
max_parallel_workers_per_gathermặc định là 2 vàmax_parallel_workerslà 8, lấy từmax_worker_processes(mặc định 8). - Autovacuum. Tối đa
autovacuum_max_workerstiến trình (mặc định 3) dọn dẹp các bảng ở chế độ nền. - Ứng dụng, khi nó chạy trên cùng VPS.
Trên một VPS 2 vCPU, một báo cáo chạy song song có thể chiếm hết mọi luồng trong khi các truy vấn ngắn của ứng dụng phải chờ phía sau. Giảm max_parallel_workers_per_gather cho role báo cáo, hoặc nâng lên gói cao hơn, sẽ giải quyết. Quy tắc luồng so với nhân đằng sau các con số này được giải thích trong vCPU chuyên dụng là một nhân hay một luồng.
PostgreSQL cần bao nhiêu RAM trên một VPS?
Đặt shared_buffers ở 25% RAM của VPS và để phần lớn còn lại cho page cache của hệ điều hành. Tài liệu PostgreSQL 18 đưa ra giá trị khởi đầu đó cho một máy chủ cơ sở dữ liệu chuyên dụng có 1 GB RAM trở lên, và nói thêm rằng hơn 40% khó có thể tốt hơn, vì PostgreSQL còn dựa vào cache của kernel. Giá trị mặc định đi kèm là 128 MB.
Hai cài đặt nữa đi theo lượng RAM:
- effective_cache_size chỉ là ước tính cho planner (mặc định 4 GB). Đặt nó bằng lượng mà shared_buffers và page cache giữ cùng nhau, để các lần quét index được tính chi phí đúng.
- work_mem (mặc định 4 MB) áp dụng cho mỗi bước sort hoặc hash trong mỗi phiên. Một truy vấn phức tạp dùng nó nhiều lần, và nhiều phiên dùng cùng lúc, nên tăng nó phải cẩn thận.
Theo khảo sát của Cobaltfell ngày 2 tháng 11 năm 2026, 106 trong số 202 gói CPU chuyên dụng được ghi nhận tại các nhà cung cấp nhận crypto mà không cần kiểm tra danh tính đã cho 4 GB RAM trở lên mỗi vCPU. Với cơ sở dữ liệu, RAM trên mỗi vCPU quan trọng ngang với số vCPU.
Các gói đằng sau con số đó được liệt kê trong một VPS CPU chuyên dụng tốn bao nhiêu mỗi nhân vào tháng 11 năm 2026.
| Gói | vCPU | RAM | shared_buffers ở 25% | Vừa |
|---|---|---|---|---|
| Fell 2 | 2 | 4 GB | 1 GB | Cơ sở dữ liệu của một ứng dụng, vài kết nối bận cùng lúc |
| Fell 4 | 4 | 8 GB | 2 GB | Một backend SaaS có lưu lượng ổn định, hoặc một cơ sở dữ liệu cùng ứng dụng của nó |
| Fell 8 | 8 | 16 GB | 4 GB | Lưu lượng trực tiếp cộng báo cáo hoặc các lần quét song song |
| Fell 16 | 16 | 32 GB | 8 GB | Nhiều truy vấn đồng thời và một working set cỡ hàng chục gigabyte |
CPU steal ảnh hưởng đến độ trễ p99 của PostgreSQL như thế nào?
CPU steal kéo dài 1% truy vấn chậm nhất rất lâu trước khi nó làm thay đổi giá trị trung bình. Kernel Linux mô tả steal là thời gian chờ không tự nguyện: thời gian mà một vCPU có việc phải làm trong khi hypervisor chạy việc của người khác. Một backend bị tạm dừng giữa truy vấn chỉ đơn giản là dừng lại, và mọi client đang chờ truy vấn đó, hoặc chờ một lock mà nó đang giữ, cũng dừng theo.
Các lần tạm dừng ngắn và không đều, nên chúng chỉ đánh vào những truy vấn tình cờ nằm trên CPU vào đúng lúc đó. Để minh họa, không phải phép đo: khi một vCPU thỉnh thoảng mất vài chục mili giây cho một hàng xóm, một truy vấn 2 ms rơi vào một trong những khoảng đó sẽ mất thời gian gấp mười lần, trong khi hàng nghìn truy vấn xung quanh vẫn chạy với tốc độ bình thường. Giá trị trung bình gần như không đổi; phân vị thứ 99 gánh toàn bộ chi phí.
Vì vậy một cơ sở dữ liệu trên vCPU chia sẻ trông vẫn khỏe mạnh ở giá trị trung bình mà vẫn sinh ra timeout. Ba phép đọc phơi bày điều đó:
- Steal: cột
%stealcủampstattrong giờ bận nhất, được giải thích trong CPU steal time là gì và cách kiểm tra nó trên một VPS. - Trường hợp xấu nhất:
pg_stat_statementsbáo cáomax_exec_timevàstddev_exec_timecho mỗi câu lệnh, không có phân vị. - Phân vị:
log_min_duration_statement(ví dụ250ms) ghi log các câu lệnh chậm; một histogram độ trễ trong ứng dụng cho ra chính con số p99.
# queries on the CPU right now (run at your busiest hour)
psql -c "SELECT count(*) FROM pg_stat_activity WHERE state = 'active';"
# statements with the worst single run (needs pg_stat_statements in shared_preload_libraries)
psql -c "SELECT left(query, 60) AS query, calls,
round(mean_exec_time::numeric, 2) AS mean_ms,
round(max_exec_time::numeric, 2) AS max_ms
FROM pg_stat_statements ORDER BY max_exec_time DESC LIMIT 10;"
# steal per vCPU, every 5 seconds (package sysstat)
mpstat -P ALL 5 6vCPU chuyên dụng thay đổi điều gì cho một cơ sở dữ liệu?
vCPU chuyên dụng loại bỏ nguồn tail latency duy nhất không thể tinh chỉnh từ bên trong VPS. Các plan chậm, thiếu index và tranh chấp lock là do người vận hành sửa; một batch job của hàng xóm trên nhân chia sẻ thì không. Trường hợp chung được trình bày trong sự khác biệt giữa vCPU chia sẻ và vCPU chuyên dụng là gì. Trên một VPS Cobaltfell:
- CPU: Một vCPU là một luồng phần cứng của bộ xử lý máy chủ. Các luồng của bạn được ghim 1-1 vào VPS của bạn và không bao giờ được cho khách hàng khác mượn, và hai luồng của một lõi vật lý luôn đi cùng nhau, nên cứ mỗi 2 vCPU tạo thành một lõi nguyên vẹn mà không hàng xóm nào dùng chung.
- Steal: Trên vCPU chuyên dụng, steal time phải ở mức hoặc gần bằng không. Chúng tôi sẽ công bố con số đo được trên máy của chính mình, kèm ngày đo, và không bao giờ là ước tính.
- Bộ nhớ: RAM trong gói của bạn được dành riêng cho VPS của bạn và không bị cam kết vượt mức.
- Đĩa: Lưu trữ NVMe trên mọi gói.
- Tải: Được phép chạy full load miễn là công việc của bạn cần: không có credit CPU, không có cửa sổ burst và không bị bóp hiệu năng sau vài phút ở mức 100%. Một lần
VACUUMhoặc build index dài sẽ chạy hết công suất.
Dòng vi xử lý là AMD EPYC 9004/9005 (Zen 4 / Zen 5).
Khi nào VPS là nơi không phù hợp cho PostgreSQL?
VPS là nơi không phù hợp khi dữ liệu được truy vấn mỗi phút lớn hơn nhiều so với RAM của gói lớn nhất, hoặc khi replica và backup phải được quản lý thay cho bạn. Fell 16 có 32 GB. Một working set không vừa trong bộ nhớ biến mọi truy vấn thành đọc đĩa, và khi đó thông lượng lưu trữ, chứ không phải vCPU, sẽ quyết định tốc độ.
Backup vẫn thuộc về người vận hành: Backup không nằm trong gói nào: hãy giữ một bản sao dữ liệu của bạn ở nơi khác. Một lần pg_dump hằng đêm hoặc một WAL archive gửi đến lưu trữ ở một nơi khác bao phủ hầu hết các cơ sở dữ liệu nhỏ; một bài kiểm tra khôi phục cần nằm trên lịch trước khi cần đến.
Failover trên hai hoặc ba VPS với streaming replication thì làm được, nhưng phải tự quản lý. Cobaltfell bán máy chủ, không bán cơ sở dữ liệu được quản lý. Giá cho từng kích thước được liệt kê trong một VPS lõi chuyên dụng tốn bao nhiêu.
Người ta còn hỏi những gì về PostgreSQL trên một VPS?
2 vCPU có đủ cho PostgreSQL không?
Với một ứng dụng có số lượng kết nối bận vừa phải, thì đủ. Hai vCPU chạy hai truy vấn cùng lúc; truy vấn thứ ba chờ một luồng rảnh. Fell 4 là bước tiếp theo khi pg_stat_activity thường xuyên cho thấy nhiều truy vấn đang hoạt động hơn số vCPU, hoặc khi ứng dụng dùng chung VPS.
Ứng dụng và cơ sở dữ liệu có nên dùng chung một VPS?
Trên Fell 2 và Fell 4, điều này phổ biến và tiết kiệm một chặng mạng. Các tiến trình bận của ứng dụng được tính là người dùng vCPU thêm. Tách chúng ra khi deploy hoặc lưu lượng tăng đột biến bắt đầu xuất hiện trong slow-query log của cơ sở dữ liệu.
PostgreSQL trên một VPS có cần connection pooler không?
Trong hầu hết ứng dụng web, có. max_connections mặc định là 100, và mỗi kết nối là một tiến trình đầy đủ giữ bộ nhớ. Một pooler như PgBouncer giữ số backend đang hoạt động gần với số vCPU trong khi ứng dụng mở bao nhiêu kết nối client tùy thích.
Nên đặt gì trước tiên sau khi cài PostgreSQL?
shared_buffers ở 25% RAM, effective_cache_size bằng lượng bộ nhớ mà shared_buffers và page cache giữ cùng nhau, và log_min_duration_statement để các truy vấn chậm để lại dấu vết. work_mem giữ gần giá trị mặc định cho đến khi một plan chậm cho thấy một bước sort bị tràn ra đĩa.
Backup có được bao gồm trong một VPS Cobaltfell không?
Không. Backup không nằm trong gói nào: hãy giữ một bản sao dữ liệu của bạn ở nơi khác.
Nguồn (9)
- PostgreSQL 18: Tiêu thụ tài nguyên (shared_buffers, work_mem, worker processes) — The PostgreSQL Global Development Group (checked 2026-11-02)
- PostgreSQL 18: Lập kế hoạch truy vấn (effective_cache_size) — The PostgreSQL Global Development Group (checked 2026-11-02)
- PostgreSQL 18: Kết nối và xác thực (max_connections) — The PostgreSQL Global Development Group (checked 2026-11-02)
- PostgreSQL 18: Vacuuming (autovacuum_max_workers) — The PostgreSQL Global Development Group (checked 2026-11-02)
- PostgreSQL 18: Báo lỗi và ghi log (log_min_duration_statement) — The PostgreSQL Global Development Group (checked 2026-11-02)
- PostgreSQL 18: Cách các kết nối được thiết lập — The PostgreSQL Global Development Group (checked 2026-11-02)
- PostgreSQL 18: pg_stat_statements — The PostgreSQL Global Development Group (checked 2026-11-02)
- Hệ thống tệp /proc: /proc/stat (steal) — The Linux kernel documentation (checked 2026-11-02)
- Trang hướng dẫn mpstat(1) (%steal) — man7.org / sysstat (checked 2026-11-02)