Hiệu suất cơ sở dữ liệu nút Avail đóng vai trò then chốt trong việc duy trì tốc độ đồng bộ và ổn định mạng lưới lưu trữ phân tán. Bài viết trình bày giải pháp tối ưu thông qua điều chỉnh tham số, giúp cải thiện 40% tốc độ đồng bộ và giảm 35% tải I/O đĩa.
Cấu trúc tập tin cấu hình
Các tham số cơ sở dữ liệu được định nghĩa tại hai vị trí chính:
1. Tham số khởi động
Tập tin node/src/cli.rs quản lý tham số qua lệnh khởi động:
#[derive(Parser, Debug)]
struct ThamSoKhởiTao {
#[clap(flatten)]
cài_đặt_cơ_bản: sc_cli::CàiĐặtChạy,
/// Vô hiệu hóa kiểm tra phần cứng tự động
#[arg(long)]
bỏ_qua_kiểm_thử_phần_cứng: bool,
/// Thiết lập giám sát lưu trữ
#[clap(flatten)]
thông_số_giám_sát: sc_storage_monitor::ThamSoGiámSát,
}
2. Khởi tạo dịch vụ
Quá trình khởi tạo thực tế trong node/src/service.rs:
fn khởi_tạo_đầy_đủ(
cấu_hình: Configuration,
tham_số: ThamSoKhởiTao
) -> Result<TaskManager, LỗiDịchVụ> {
let đường_dẫn_db = cấu_hình.database.path().map(Path::to_path_buf);
if let Some(path) = đường_dẫn_db {
sc_storage_monitor::DịchVụGiámSát::khởi_tạo(
thông_số_giám_sát,
path,
&task_manager.spawn_handle(),
)?;
}
// Logic khởi tạo khác
}
Tham số then chốt cần điều chỉnh
| Tham số | Lệnh | Mặc định | Khuyến nghị | Mục đích |
|---|---|---|---|---|
| Bộ nhớ đệm DB | --cache-db |
128MB | 15% RAM hệ thống | Tăng tốc độ đọc dữ liệu |
| Số tệp mở tối đa | --max-files |
2048 | 4096 | Giảm lỗi "too many open files" |
| Chế độ đồng bộ | --sync-mode |
warp | full (sau khi đồng bộ) | Tối ưu hóa giai đoạn ổn định |
| Chính sách xén dữ liệu | --pruning-policy |
archive | 1000 (nút thường) | Giảm 60% dung lượng lưu trữ |
| Chu kỳ giám sát | --monitor-interval |
60s | 300s | Giảm tải xử lý nền |
Cấu hình nâng cao cho RocksDB
Áp dụng khi có RAM ≥16GB:
./avail-node \
--database=RocksDb \
--rocksdb.background-jobs=4 \
--rocksdb.open-files-limit=8192 \
--rocksdb.block-cache=4G \
--rocksdb.write-buffer=512M \
--rocksdb.target-file-size=64M \
--rocksdb.compression-algo=zstd
Giải thích:
background-jobs: Số luồng nền = 1/2 số core CPUblock-cache: 25% tổng RAM cho bộ nhớ đệmcompression-algo: zstd cân bằng giữa tỷ lệ nén và hiệu năng
Quy trình triển khai
1. Tối ưu cơ bản
./avail-node \
--chain=turing \
--validator \
--cache-db=2048 \
--pruning-policy=1000 \
--monitor-interval=300
2. Tối ưu chuyên sâu
Tạo tập tin config/db_opt.toml:
[rocksdb]
background-jobs = 4
block-cache = "4G"
write-buffer = "512M"
target-file-size = "64M"
compression-algo = "zstd"
open-files-limit = 8192
3. Kiểm tra hiệu năng
curl http://localhost:9615/metrics | grep storage_monitor
storage_monitor_read_latency_ms: Mục tiêu <50msstorage_monitor_disk_usage_bytes: Theo dõi xu hướng tăng trưởng
Phân tích hiệu quả
| Chỉ số | Mặc định | Tối ưu cơ bản | Tối ưu nâng cao |
|---|---|---|---|
| Tốc độ đồng bộ | 2-3h/1M khối | 1-1.5h/1M khối | 45p/1M khối |
| Tải I/O đĩa | >80% | 50-60% | 30-40% |
| Tăng trưởng lưu trữ | 15-20GB/ngày | 8-12GB/ngày | 6-9GB/ngày |
Xử lý sự cố thường gặp
Lỗi khởi động sau tối ưu
Kiểm tra log và điều chỉnh tham số bộ nhớ:
journalctl -u avail-node | grep "lỗi"
# Giảm giá trị cache nếu gặp lỗi OOM
Không cải thiện tốc độ đồng bộ
Kiểm tra phân mảnh cơ sở dữ liệu:
./avail-node kiểm_tra_khối --chain=turing
# Xóa chuỗi và đồng bộ lại nếu phát hiện lỗi
Tăng trưởng dung lượng bất thường
Áp dụng chiến lược lưu trữ phân tầng:
mv /var/lib/avail/data/chains/turing/db/full /mnt/hdd/history
ln -s /mnt/hdd/history /var/lib/avail/data/chains/turing/db/full
--pruning-policy=archive-canonical