Giám sát dung lượng ổ đĩa Linux và xử lý bảng dữ liệu lớn trong PostgreSQL

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ụcMục đíchCách xử lý
base/Lưu trữ dữ liệu bảng, chỉ mụcKhô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 traCấu hình tham số audit
log/, pglog/Nhật ký vận hànhXoay vòng nhật ký, giới hạn kích thước
core*Tệp dump khi crashPhâ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.

Thẻ: linux PostgreSQL du df shell-script

Đăng vào ngày 20 tháng 8 lúc 12:37