HỒ SƠ 07 • THU GỌN DUNG LƯỢNG B-TREE TRONG WIREDTIGER

Hồ Sơ MongoShard: Thu Gọn RAM Cây Chỉ Mục B-Tree Bằng Quy Tắc ESR & Partial Index

Mã Hồ Sơ
ESR-INDEX-RAM
Quy Tắc Bộ Đệm
ESR + Partial Filter
Kiểm Soát Trang Bẩn
Prune 0-Hit B-Trees
Chuẩn Nén & Đĩa
Zero Blocking $sort • Prefix Compression

Trong mô hình quy hoạch của MongoShard, các chỉ mục đơn lẻ dư thừa và trùng tiền tố là nguyên nhân hàng đầu làm phình nhu cầu RAM máy chủ — áp dụng quy tắc ESR và lọc Partial giúp hạ cấp cấu hình phần cứng đáng kể.

Cơ Chế Chỉ Mục Trên MongoShard: Vì Sao Thừa B-Tree Vừa Tăng Ghi Đĩa Vừa Chiếm Cứng RAM?

Mỗi chỉ mục phụ tạo thêm trên bảng dữ liệu đều buộc WiredTiger phải cập nhật cây B-Tree ở mọi thao tác ghi và giữ trang chỉ mục thường trực trong bộ nhớ giải nén. Một bảng mang hàng chục Index tự phát thường ngốn nhiều RAM cho chỉ mục hơn cả tài liệu BSON nóng, đồng thời vẫn bị nghẽn sắp xếp trên RAM (100 MB blocking sort) nếu đặt sai thứ tự Equality → Sort → Range (ESR).

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 (compound-index-ram-optimization)
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.

Truy Vấn Kiểm Toán $indexStats & Tạo Partial Index Chuẩn ESR Từ MongoShard

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

// 1. Rà soát các Index có 0 lượt truy vấn gây lãng phí RAM (mongosh)
db.orders.aggregate([
  { $indexStats: {} },
  { $project: { name: 1, accesses: "$accesses.ops", since: "$accesses.since" } },
  { $sort: { accesses: 1 } }
]);

// 2. Thay Index toàn bảng bằng ESR + partialFilterExpression chỉ giữ đơn hàng đang mở
db.orders.createIndex(
  { tenantId: 1, createdAt: -1, totalCents: 1 }, // Equality -> Sort -> Range
  {
    name: "idx_esr_active_orders",
    partialFilterExpression: { status: { $in: ["pending", "processing"] } }
  }
);

Bảng Quy Chiếu Bậc RAM & Hạ Tầng MongoShard Cho HỒ SƠ 07 • THU GỌN DUNG LƯỢNG B-TREE TRONG 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 InterServer (https://www.interserver.net/vps/).

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)
Chưa tối ưu (60 GB Index trùng lặp) Cần >80 GB WT Cache Buộc lên máy 192 GB+ / Đa Shard Atlas M80+ ($5,380+/tháng niêm yết)
Sau khi lọc tiền tố & ESR (24 GB Index) 31.5 GB WT Cache (Node 64GB) Gọn trên 1 cụm 64 GB P-S-S UltaHost VDS 64GB ($95/tháng/node)
Kết hợp Partial Filter (10 GB Index) 15.5 GB WT Cache (Node 32GB) Gọn trên 1 cụm 32 GB P-S-S UltaHost VDS 32GB / Hostinger KVM 8

Danh Sách Kiểm Tra Triển Khai Sản Xuất MongoShard (ESR-INDEX-RAM)

  1. Gỡ bỏ các Index trùng tiền tố trái: chỉ mục { tenantId: 1, status: 1 } đã phục vụ trọn vẹn truy vấn lọc theo { tenantId: 1 }.
  2. Sắp xếp các trường trong Compound Index đúng trình tự Equality → Sort → Range (ESR) để triệt tiêu bước sắp xếp tạm trên RAM.
  3. Dùng tùy chọn partialFilterExpression để không đánh chỉ mục phụ cho 90% dữ liệu lịch sử đã đóng.
  4. Sử dụng lệnh db.collection.hideIndex("ten_idx") trên MongoDB 8.0 trong 48 giờ để kiểm tra an toàn trước khi xóa hẳn.

Xem Gói UltaHost Cho Hồ Sơ ESR-INDEX-RAM Trên MongoShard ↗ Đối Chiếu Thêm InterServer Cho ESR-INDEX-RAM 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Ơ 07 • THU GỌN DUNG LƯỢNG B-TREE TRONG WIREDTIGER

Mô hình MongoShard tính cơ chế nén tiền tố (prefixCompression) của Index trong RAM ra sao?

Khác với nén khối dữ liệu bảng bằng Zstd (phải bung nén khi vào WiredTiger Cache), tính năng prefixCompression của chỉ mục B-Tree giữ nguyên trạng thái nén ngay bên trong RAM mặc định trên MongoDB 8.0.

MongoShard khuyến nghị quy trình xóa Index dư thừa như thế nào để tránh rủi ro?

Luôn ẩn chỉ mục trước bằng lệnh hideIndex() và theo dõi nhật ký truy vấn chậm qua ít nhất hai chu kỳ nghiệp vụ; nếu phát sinh truy vấn quét bảng ngoài ý muốn, lệnh unhideIndex() sẽ khôi phục tức thì mà không tốn hàng giờ dựng lại cây B-Tree.