เพื่อนๆ คงจะเคยประสบปัญหา กับตาราง _log ทั้งหลาย ..
สำหรับ HOSxP แล้ว จะมีตารางประเภทนี้จำนวนมาก ซึ่งจะเกิดปัญหาเรื่องการสำรองข้อมูลรวมไปถึงหากปล่อยไว้จะทำให้เกิดปัญหาในเรื่อง Performance ของระบบได้เลยทีเดียว ...หากต้องการแก้ปัญหานี้ไปดูกันเลยครับ
ตารางต่างๆ ที่เป็น log ดูได้จากคำสั่ง
show table status like '%log%'
ตัวอย่างการแก้ปัญหา ตาราง ksklog มีขนาดใหญ่
รูปแบบ แรก คือการเก็บสำรองไว้ที่ tmp database (แบบนี้ขนาดพื้นที่ H/D ไม่ได้ลดลง เพียงแต่ข้อมูลใน Table ใน DB หลักจะ มีขนาดเล็กลง ) มีขั้นตอนทำดังนี้
1. สร้างฐานข้อมูลเปล่าๆ ไว้ เช่น hos_backup ด้วยคำสั่ง
create database hos_backup
2. หากต้องการลบข้อมูลออกจากตารางไหน ให้ใช้คำสั่งนี้ครับ (ตัวอย่างตาราง ksklog) (DB หลักชื่อ hos )
create table hos_backup.ksklog select * from hos.ksklog limit 0;
จากนั้น
alter ignore table hos_backup.ksklog add primary key (ksklog_id);
จากนั้น
insert ignore into hos_backup.ksklog select * from hos.ksklog;
จากนั้น หากต้องการลบทั้งหมดให้ใช้คำสั่ง
delete from hos.ksklog;
หากไม่ต้องการลบทั้งหมดให้ใช้คำสั่ง (จากคำสั่งลบทีละ 100000 record )
delete from hos.ksklog where ksklog_id < 100000
หลังจากทำการลบข้อมูลแล้ว ให้ทำการ optimize table ด้วยคำสั่ง อ่านบทความได้ที่นี่ ---> อ่านบทความ optimize table คลิก
optimize table hos.ksklog
แบบที่ 2 คือการ TRUNCATE จะล้างข้อมูลพร้อมทั้ง reset auto increment ให้เริ่มนับใหม่ด้วย แต่ delete แค่ลบข้อมูล ไม่ reset auto increment ให้ครับ TRUNCATE จะทำการลบข้อมูลทั้งตาราง เมื่อรันคำสั่งนี้จะไม่สามารถ ROLLBACK ได้ ซึ่ง TRUNCATE จะเร็วกว่าการใช้คำสั่ง DELETE เพราะไม่จำเป็นต้องมีการไปเก็บข้อมูลไว้ใน undo เพื่อไว้สำหรับการ ROLLBACK
การใช้งานโดยใช้คำสั่ง truncate table hos.ksklog ;
...การทดสอบต่างๆมีความเสียง ควรทำด้วยความระมัดระวัง และให้ทดสอบกับข้อมููลทดสอบก่อน เห็นผลจริงค่อยทำกับระบบจริง การจะทำหรือไม่ทำขึ้นอยู่กับบริบทแต่ละที่ครับ หากระบบทำงานได้ดีไม่มีปัญหา ก็ไม่มีความจำเป็นที่จะต้องทำ ...

No comments:
Post a Comment