Kiểm tra không gian trống của thư mục hiện tại
Để xem thông tin dung lượng của hệ thống tệp chứa thư mục đang làm việc:
df -h .
Tham số -h hiển thị kích thước theo định dạng dễ đọc (KB, MB, GB), dấu chấm . chỉ định thư mục hiện tại.
Phân tích kích thước tệp trong thư mục
Liệt kê và sắp xếp các mục theo dung lượng giảm dần:
du -sh * | sort -rn
Lưu ý: Lệnh này chỉ thống kê các thư mục cấp 1, không đệ quy vào bên trong.
Giới hạn độ sâu khi duyệt thư mục:
du -lh --max-depth=1
Thay đổi giá trị --max-depth để kiểm soát mức độ đệ quy.
Tìm kiếm tệp theo dung lượng (bao gồm thư mục con)
5 tệp chiếm nhiều dung lượng nhất:
du -ah | sort -rn | head -5
5 tệp nhẹ nhất:
du -ah | sort -rn | tail -5
Đếm số lượng tệp
Chỉ đếm tệp trong thư mục hiện tại:
ls -l | grep "^-" | wc -l
Đếm tất cả tệp bao gồm cả trong thư mục con:
find . -type f | wc -l
Kiểm tra dung lượng thư mục cụ thể
du -lh --max-depth=1 /đường/dẫn/thư/mục
Tự động kiểm tra dung lượng bằng shell script
#!/bin/bash
NGUONG_DUNG_LUONG=100
DUNG_LUONG_CON_LAI=$(df -BG /data | awk 'NR==2 {print $4}' | tr -d 'G')
if [[ "$DUNG_LUONG_CON_LAI" -lt "$NGUONG_DUNG_LUONG" ]]; then
printf "\033[31mCảnh báo: Dung lượng thấp! Còn %dG, yêu cầu tối thiểu %dG\033[0m\n" "$DUNG_LUONG_CON_LAI" "$NGUONG_DUNG_LUONG"
exit 1
else
printf "Dung lượng đủ: %dG khả dụng\n" "$DUNG_LUONG_CON_LAI"
fi
Kiểm tra thời gian hoạt động của tiến trình
ps -eo pid,lstart,etimes,cmd | grep tên_tiến_trình
Xem thời điểm khởi động của tiến trình cụ thể:
ps -p ID_TIEN_TRINH -o lstart=
Chẩn đoán dung lượng data directory của PostgreSQL
Khi thư mục data của PostgreSQL chiếm dung lượng bất thường so với dữ liệu thực tế:
cd $PGDATA && du -sh * | sort -rn
Các vị trí cần kiểm tra:
| Thư mục | Mục đích | Cách xử lý |
|---|---|---|
base/ | Lưu trữ dữ liệu bảng, chỉ mục | Không thể xóa, cần mở rộng ổ đĩa |
pg_wal/ hoặc pg_xlog/ | Nhật ký ghi lại trước (WAL) | Điều chỉnh max_wal_size, wal_keep_segments |
*audit*/ | Nhật ký kiểm tra | Cấu hình tham số audit |
log/, pglog/ | Nhật ký vận hành | Xoay vòng nhật ký, giới hạn kích thước |
core* | Tệp dump khi crash | Phân tích nguyên nhân, xóa sau khi xử lý |
Truy vấn dung lượng trong PostgreSQL
Kích thước tất cả cơ sở dữ liệu:
SELECT
datname AS ten_csdl,
pg_size_pretty(pg_database_size(datname)) AS kich_thuoc
FROM pg_database;
Tổng dung lượng của một bảng (bao gồm chỉ mục):
SELECT pg_size_pretty(pg_total_relation_size('ten_bang'));
Danh sách bảng theo dung lượng giảm dần:
SELECT
schemaname || '.' || relname AS bang_day_du,
pg_size_pretty(pg_total_relation_size(relid)) AS kich_thuoc
FROM pg_stat_user_tables
ORDER BY pg_total_relation_size(relid) DESC;
Xóa dữ liệu bảng lớn hiệu quả
Lệnh DELETE xử lý từng dòng, chậm với bảng lớn. Sử dụng TRUNCATE để xóa nhanh toàn bộ dữ liệu:
TRUNCATE TABLE ten_bang;
Lưu ý: TRUNCATE không ghi nhật ký từng dòng, không kích hoạt trigger, và không thể khôi phục bằng ROLLBACK trong cùng transaction.