Chủ Nhật, 1 tháng 3, 2026

Đầy vùng /u01 chứa wal_archive

1.VẤN ĐỀ

Vùng /u01/wal_log chiếm 97%, nguy cơ đầy
2. Nguyên nhân
wal_log lưu lâu, từ 06/02/2026 vẫn còn
3.Giải pháp
Lưu wal_archive 2 tuần phòng khi lỗi standby dựng lại nhanh chóng

Dưới đây là hướng dẫn an toàn để kiểm tra và xóa bớt WAL archive cũ ở thư mục /u01/wal_archive, giữ lại khoảng 2 tuần (tức xóa các file cũ hơn 14 ngày), trong khi vẫn đảm bảo không làm hỏng streaming replication từ master sang slave.

1. Kiểm tra trước khi xóa (rất quan trọng!)

Chạy các lệnh sau trên master (primary server) để xác định WAL file nào đang cần thiết cho replication và backup.

Bash
# Kết nối postgres và kiểm tra replication slots (nếu dùng physical replication slot)
sudo -u postgres psql -c "SELECT slot_name, active, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS lag, restart_lsn FROM pg_replication_slots;"

# Nếu không dùng slot (hoặc slot inactive), kiểm tra replication lag trực tiếp
sudo -u postgres psql -c "SELECT application_name, client_addr, state, sync_state, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn)) AS replay_lag FROM pg_stat_replication;"

# Xem WAL file mới nhất mà replica đang cần (restart_lsn hoặc replay_lsn)
# Chuyển LSN thành tên file WAL gần đúng (ví dụ: restart_lsn = 23/600000092 → file ~ 000000010000002300000060)

Nếu replica đang sync tốt (lag nhỏ, < vài GB), thì WAL archive cũ thường an toàn để xóa miễn là bạn không cần PITR (Point-in-Time Recovery) xa hơn 2 tuần.

2. Xác định WAL file giữ lại cho 2 tuần

  • WAL file hiện tại của bạn: 000000010000232600000092 (ngày 6/2/2026)
  • Ngày hiện tại: ~28/2/2026 → khoảng 22 ngày đã trôi qua.
  • Muốn giữ 14 ngày → giữ các file từ khoảng 14/2/2026 trở đi.

Tên file WAL tăng dần theo thời gian (timeline 1, segment 2326, file 0092). Bạn cần tìm file WAL cũ nhất mà bạn muốn giữ (tức file gần ngày 14/2/2026 nhất).

Cách đơn giản nhất (không cần tính tay):

Bash
# Liệt kê file theo thời gian (mới nhất ở dưới)
ls -ltr /u01/wal_archive | tail -n 20

# Hoặc tìm file cũ nhất còn trong 2 tuần
find /u01/wal_archive -type f -mtime -15 -printf '%p %TY-%Tm-%Td %TH:%TM\n' | sort | head -n 5
find /u01/wal_archive -type f -mtime +14 -printf '%p %TY-%Tm-%Td\n' | sort | head -n 10

Giả sử file cũ nhất bạn muốn giữ là khoảng 0000000100002326000000XX (tùy kết quả ls).

3. Cách xóa an toàn nhất: dùng pg_archivecleanup

Công cụ này được thiết kế chính xác cho việc dọn WAL archive mà vẫn an toàn với replication (nó chỉ xóa ở archive, không ảnh hưởng pg_wal).

Chạy trên master:

Bash
# Ví dụ: giữ tất cả file từ 000000010000232600000050 trở đi (xóa cũ hơn file này)
# Thay bằng file thực tế bạn muốn giữ (cũ nhất trong 2 tuần)

sudo -u postgres pg_archivecleanup /u01/wal_archive 000000010000232600000050
  • Nó sẽ xóa tất cả file WAL cũ hơn file bạn chỉ định.
  • An toàn vì: replication slot / streaming replication chỉ quan tâm WAL trong pg_wal của master, không phụ thuộc archive cũ.

Nếu bạn muốn xóa tự động theo thời gian (khuyến nghị):

Tạo script cron (chạy hàng ngày hoặc hàng tuần):

Bash
#!/bin/bash
# File: /usr/local/bin/cleanup_wal_archive.sh

ARCHIVE_DIR="/u01/wal_archive"
KEEP_DAYS=14

# Tìm file cũ nhất còn trong khoảng keep_days
# Hoặc tính thủ công file giữ lại (cách đơn giản)

# Cách tốt: xóa file > 14 ngày (nhưng kiểm tra trước)
find "$ARCHIVE_DIR" -type f -mtime +$KEEP_DAYS -name '000000*' -delete

# Hoặc dùng pg_archivecleanup với file cụ thể (an toàn hơn nếu có replication)
# OLD_FILE=$(ls -t "$ARCHIVE_DIR"/000000* | head -n1 | xargs -n1 basename)  # file mới nhất
# Nhưng thường kết hợp với cách thủ công hoặc tính từ pg_controldata

Cron ví dụ (chạy 2h sáng hàng ngày):

Bash
# crontab -u postgres -e
0 2 * * * /usr/local/bin/cleanup_wal_archive.sh >> /var/log/wal_cleanup.log 2>&1

4. Cấu hình lâu dài (khuyến nghị)

Thêm vào postgresql.conf trên master (nếu archive dùng cho PITR + replication):

ini
archive_mode = on
archive_command = 'cp %p /u01/wal_archive/%f && test ! -f /u01/wal_archive/%f || chmod 640 /u01/wal_archive/%f'

# Nếu slave có thể truy cập archive này, thêm trên slave (recovery.conf / postgresql.conf ở PG12+):
restore_command = 'cp /u01/wal_archive/%f %p'
archive_cleanup_command = 'pg_archivecleanup /u01/wal_archive %r'

Cách này slave sẽ tự dọn archive khi không cần nữa.

Tóm tắt bước làm ngay

  1. Kiểm tra replication đang khỏe: pg_stat_replication và pg_replication_slots
  2. Xem file cũ nhất muốn giữ (ví dụ giữ từ 14/2 → tìm file ~ ngày đó)
  3. Chạy thử (dry-run): pg_archivecleanup --dry-run /u01/wal_archive 000000010000232600000050 (nếu PostgreSQL ≥ 13)
  4. Chạy thật: pg_archivecleanup /u01/wal_archive <file_giu_lai>
  5. Theo dõi dung lượng: du -sh /u01/wal_archive
=============================
TƯ VẤN: Click Here hoặc Hotline/Zalo 090.29.12.888
=============================
Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
cơ sở dữ liệu, cơ sở dữ liệu quốc gia, database, AI, trí tuệ nhân tạo, artificial intelligence, machine learning, deep learning, LLM, ChatGPT, DeepSeek, Grok, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c/21c/23c/23ai, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, docker, k8s, micro service, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master