HỒ SƠ 01 • PHƯƠNG TRÌNH BỘ NHỚ ĐỆM WIREDTIGER

Hồ Sơ MongoShard: Giải Mã Công Thức WiredTiger (RAM − 1 GB) × 0.50 Trên MongoDB 8.0

Mã Hồ Sơ
WT-MEMORY-MATH
Quy Tắc Bộ Đệm
0.5 × (RAM − 1 GB)
Kiểm Soát Trang Bẩn
Dirty < 5% Target
Chuẩn Nén & Đĩa
XFS Direct Journal • Zstd Level 6 Block

Trong mô hình bộ nhớ xác định của MongoShard, chúng tôi lý giải vì sao đặt wiredTigerCacheSizeGB lên 80% RAM lại kích hoạt Linux OOM-Killer — và cách chia đôi bộ nhớ giữa trang B-Tree bung nén và bộ đệm hệ điều hành nén Zstd.

Phân Tích MongoShard: Bộ Đệm Giải Nén WiredTiger Và Linux XFS Page Cache Nén

Khác với các hệ quản trị chỉ dùng một tầng đệm, WiredTiger vận hành hai tầng bộ nhớ song song trên Linux. Dữ liệu trên phân vùng XFS được nén bằng Zstd hoặc Snappy và lưu ở Linux Page Cache. Khi nạp vào WiredTiger Internal Cache, chúng tôi phải tính đủ dung lượng tài liệu BSON bung nén, cây chỉ mục B-Tree nén tiền tố, ~1 MB cho mỗi luồng kết nối TCP và tới 100 MB cho mỗi bước sắp xếp $sort/$group bên ngoài WiredTiger.

Sơ đồ kiến trúc bộ nhớ kép MongoShard WiredTiger 0.5 * (RAM - 1GB) B-Tree giải nén và Linux Page Cache nén Zstd (wiredtiger-cache-sizing-formula)
Hình 1 — Phân ranh bộ nhớ xác định trên MongoShard: WiredTiger bung nén BSON trong 50% × (RAM − 1 GB), nửa RAM còn lại giữ khối nén Zstd ở nhân Linux.

Cấu Hình Mẫu /etc/mongod.conf & Tham Số Nhân Linux THP Từ MongoShard

Cấu hình mẫu MongoShard cho hồ sơ wiredtiger-cache-sizing-formula — kiểm tra lại thông số RAM trước khi khởi động mongod.

# 1. Tinh chỉnh Kernel Linux (/etc/sysctl.d/99-mongodb.conf)
vm.swappiness = 1
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
vm.max_map_count = 128000

# 2. /etc/mongod.conf (Node 32 GB RAM -> 0.5 * (32 - 1) = 15.5 GB WT Cache)
storage:
  dbPath: /var/lib/mongodb
  wiredTiger:
    engineConfig:
      cacheSizeGB: 15.5
      zstdCompressionLevel: 6
    collectionConfig:
      blockCompressor: zstd
    indexConfig:
      prefixCompression: true

Bảng Quy Chiếu Bậc RAM & Hạ Tầng MongoShard Cho HỒ SƠ 01 • PHƯƠNG TRÌNH BỘ NHỚ ĐỆM WIREDTIGER (2026-11-12)

Các mốc cấu hình dưới đây được tính toán xác định theo công thức (RAM − 1 GB) × 0.50 của MongoShard và tham chiếu biểu phí công khai ngày 2026-11-12 từ UltaHost (https://ultahost.com/vps-hosting) cùng Hostinger (https://www.hostinger.com/vps-hosting).

Quy Mô Cụm / Bậc Máy Chủ WiredTiger Cache Dung Lượng Đáp Ứng Cấu Hình Tham Chiếu (2026-11-12)
Node 8 GB DDR5 (Cỡ Atlas M30) 3.5 GB WT Cache ~3.0 GB Index + BSON nóng Hostinger KVM 2 ($5.99/tháng promo)
Node 32 GB DDR5 (Cỡ Atlas M50) 15.5 GB WT Cache ~12.0 GB Index + BSON nóng UltaHost VDS 32GB ($58/tháng)
Node 128 GB ECC (Cỡ Atlas M80) 63.5 GB WT Cache ~48.0 GB Index + BSON nóng UltaHost VDS 128GB ($179/tháng)

Danh Sách Kiểm Tra Triển Khai Sản Xuất MongoShard (WT-MEMORY-MATH)

  1. Định dạng phân vùng /var/lib/mongodb bằng hệ tệp XFS (noatime) thay vì ext4 để tránh nghẽn khóa ghi nhật ký ở các chu kỳ checkpoint.
  2. Tắt Transparent Huge Pages (THP = never) qua systemd trước khi khởi chạy mongod nhằm loại bỏ độ trễ gom mảnh trang nhớ.
  3. Theo dõi chỉ số tracked dirty bytes trong db.serverStatus().wiredTiger.cache luôn giữ ổn định dưới mốc mục tiêu 5%.
  4. Chủ động hạ thấp thông số cacheSizeGB nếu đặt chung tiến trình Node.js, Docker hoặc pbm-agent trên cùng máy chủ.

Xem Gói UltaHost Cho Hồ Sơ WT-MEMORY-MATH Trên MongoShard ↗ Đối Chiếu Thêm Hostinger Cho WT-MEMORY-MATH Trên MongoShard ↗ Nạp Cấu Hình Này Vào Bộ Tính MongoShard →

Câu Hỏi Kỹ Thuật MongoShard: HỒ SƠ 01 • PHƯƠNG TRÌNH BỘ NHỚ ĐỆM WIREDTIGER

Vì sao MongoShard khuyên giữ cacheSizeGB quanh mức 50% thay vì 75% trên VDS 64GB?

Ngay cả trên VDS 64 GB chỉ chạy riêng cơ sở dữ liệu, tiến trình mongod vẫn cần ~32.5 GB RAM còn lại cho Linux Page Cache chứa khối nén Zstd, vùng đệm Journal, ngăn xếp kết nối (~1 MB/luồng) và bộ nhớ truy vấn $lookup/$sort. Đẩy quá 60% rất dễ bị nhân Linux ngắt tiến trình khi tải tăng đột biến.

MongoShard hướng dẫn nhận diện thiếu hụt WiredTiger Internal Cache bằng chỉ số nào?

Hãy kiểm tra bộ đếm luồng ứng dụng phải trực tiếp đọc đĩa và dọn trang bẩn trong db.serverStatus().wiredTiger.cache. Khi luồng truy vấn của khách hàng phải dừng lại để đẩy trang nhớ thay vì luồng nền, tập dữ liệu nóng B-Tree đã vượt quá dung lượng WiredTiger RAM.