Wednesday, April 2, 2014

แก้ปัญหา ตาราง _log ทั้งหลายที่มีขนาดใหญ่

เพื่อนๆ คงจะเคยประสบปัญหา กับตาราง _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: