Mass killing MySQL connections

Posted In Database - By Tum. On Friday, April 13th, 2012 With 0 Comments

mysql-logo
เมื่อเกิดเหตุการ MySQL มีจำนวน connection มากเกินไปจนทำให้เครื่องทำงานช้า หรือเกิดเหตุการ Table ใน database เกิดการ Lock ขึ้นมา จากเหตุการณ์เช่นนี้เราจำเป็นต้องทำให้ระบบกลับมาให้สามารถทำงานได้โดยเกิด down time น้อยที่สุด สำหรับผมแล้วการแก้ไขปัญหาดังกล่าวจึงเลือกที่จะ kill connections ที่ค้างอยู่ออกให้หมด โดยเลือกจะเลือกที่จะเลือก connection ที่เป็น Query และมีการทำงานที่นานกว่า Query อื่นๆ หรือมีสถานะเป็น Locked เป็นหลัก และหลีกเลี่ยง connections ที่เป็น Update และ Delete เพื่อป้องกันไม่ให้ข้อมูลสูญหาย

วิธีการ kill connections สามารถทำได้หลายวิธี และในบทความนี้จะพูดถึงการ kill connections แบบ Mass ซึ่งจะทำให้สามารถ kill connections ได้หลาย connections โดยรันคำสั่งเพียง 2-3 คำสั่งเท่านั้น ซึ่งมีขั้นตอนดังนี้

1. ตรวจสอบ Connection ต่างๆ เพื่อจะได้ระบุ connection ที่ต้องการ Kill ได้ถูกต้อง
รันคำสั่ง เพื่อตรวจสอบ connections ต่างๆ ว่ามี connection ไหนบ้างที่เราต้องการ Kill โดยใช้คำสั่ง select * from information_schema.processlist; หรือ show processlist;

ตัวอย่างคำสั่ง select * from information_schema.processlist;

ตัวอย่างคำสั่ง show processlist;

2. เมื่อพบ Connection ที่ต้องการ Kill แล้วให้รันคำสั่งด้านล่างโดยใสเงื่อนไขที่ต้องการ (ตรง where)

เมื่อรันคำสั่งด้านบนแล้ว จะได้ข้อมูลทีเก็บไว้ที่ไฟล์ /tmp/kill.txt เป็น

ซึ่งข้อมูลดังกล่าวจะเก็บเป็นแบบ text file ดังนั้นเมื่อต้องการให้รันคำสั่งที่อยู่ใน text file เราจะใช้คำสั่ง source เข้ามาช่วย

ตัวอย่าง การ Kill connections ที่เป็น Query
ต้องการ kill connections ที่เป็น Query ให้รันคำสั่ง

จากนั้นให้รันคำสั่ง source /tmp/querykill.txt;

ตัวอย่าง การ Kill connections ที่มากจาก User1

รันคำสั่ง

จากนั้นให้รันคำสั่ง

Leave a comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

*