อันนี้มา Recap กันก่อน พอดี API ใน DEV ENV มันล่ม เลยลองเข้าไปหาเขียน Step ไว้นิดนึง
อย่างแรกตรวจก่อนเลยว่าสภาพ Disk เป็นอย่างไร ด้วยคำสั่ง df -h
[invsins1@invsprddb ~]$ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 1.8G 0 1.8G 0% /dev tmpfs 1.9G 20K 1.9G 1% /dev/shm tmpfs 1.9G 187M 1.7G 11% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/rhel-root 5.0G 3.8G 1.3G 76% / /dev/mapper/rhel-opt 5.0G 2.0G 3.1G 39% /opt /dev/mapper/invsins2-invsins2 60G 49G 12G 82% /invsins2 /dev/mapper/db2backup-db2backup 80G 6.6G 74G 9% /db2backup /dev/mapper/rhel-home 20G 20G 20K 100% /home /dev/sda1 5.0G 224M 4.8G 5% /boot /dev/mapper/invsins1-invsins1 60G 60G 36K 100% /invsins1 /dev/mapper/rhel-var 5.0G 1.5G 3.5G 30% /var tmpfs 679M 0 679M 0% /run/user/1000
ลองหาดูว่าใน /home และ invsins1 อันไหนทำบวม
du -ah /home 2>/dev/null | sort -rh | head -n 50 du -ah /invsins12>/dev/null | sort -rh | head -n 50
ผมเดาไว้ก่อนว่าเป็นพวก Archive Log พัง db2diag
หลังจากไล่ผมมาจริงด้วย


- /invsins1/BFMDB/archive/invsins1/BFMDB/NODE0000/LOGSTREAM0000/C0000003 มี Tx Log เต็มเลยครับ
- /home/invsins1/sqllib/db2dump/DIAG0000 มีไฟล์ diaglog 16 GB
สรุปสาเหตุ และวิธีแก้
สรุป archive log เต็ม พอเต็มเสร็จมันทำ diaglog มันเขียน log ซึ่งการแก้ไข
- ลบ diaglog ถ้าไฟล์ใหญ่มากแบบของผม ทำใจครับ เอามาหาตัวเปิดยาก
# ตรวจสอบ DB2 diagnostic logs
cd $DIAGPATH
ls -lth *.log
# ลบ log files เก่าๆ (ระวังให้แน่ใจว่าสำรองแล้ว)
find . -name "*.log" -mtime +30 -exec rm {} \;
- ลบ diaglog เพื่อให้เรา Run พวก db2stop / db2start ได้ครับ
- จากนั้นลบ Archive Log แนะนำให้มัน backup ก่อนนะครับ เผื่อมีเคสที่ต้องใช้งาน และ Clear โดย Command
# ตรวจสอบ log path db2 get db cfg for <DBNAME> | grep -i log # ไปที่ directory ของ archive logs cd <archive_log_path> # ลบ archive logs เก่า (หลังจาก backup แล้ว) rm -f S*.LOG
- จากนั้น kill process DB2 ที่ค้าง
# ลอง kill process ทั้งหมด ipclean -a # Stop DB2 db2stop force # หรือถ้ายังไม่ได้ ใช้ db2_kill db2stop
- สุดท้ายเมื่อ Start ได้ลอง backup อีกทีครับ
# Start DB2 db2start # Connect to database db2 connect to <DBNAME> db2 backup database <DBNAME> to /backup/path compress # Prune archive logs db2 prune history <timestamp> and delete
- ถ้าทำ HADR อย่างลิมตรวจ Status
การป้องกัน
- คำถามแรก จำเป็นต้องใช้ Archive Log ทำพวก HADR ถ้าไม่ปรับไปใช้ circular log ถ้าสงสัยว่าแต่ละแบบต่างอย่างไรลองดูจาก Blog [DB2] Backup DB2 offline/online and database logs
db2 update db cfg for <DBNAME> using LOGARCHMETH1 OFF
- ตั้งค่า automatic log cleanup:
db2 update db cfg for <DBNAME> using LOGARCHMETH1 'DISK:/archive/path' db2 update db cfg for <DBNAME> using NUM_LOG_SPAN 3
Reference
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.


