Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

แก้ไขปัญหา Too many connection ของ MySQL ในระบบที่เขียนด้วยภาษา Go

$
0
0

เช้านี้เจอปัญหาจากระบบหนึ่งที่พัฒนาด้วยภาษา Go
ซึ่งพบเจอ error ว่า "Error 1040: Too many connections"
ตั้งแต่เปิดระบบให้บริการมา ยังไม่เคยเจอ error นี้เลย
แต่เมื่อไปดูเรื่องของ traffic การใช้งาน พบว่าใช้งานสูงขึ้นอย่างมาก
ซึ่งคิด ๆ ดูแล้ว ก็เป็นเรื่องที่ดีเลย ที่เจอ error นี้
ดังนั้นไปดูปัญหา และ re-produce ปัญหากันหน่อย
เพื่อจะได้แก้ไขปัญหาได้ง่าย และ ถูกต้องมากขึ้น

เริ่มจากการทำ load test แบบง่าย ๆ ด้วย Ddosify นิดหน่อย

ยิงไปสัก 5,000 request ก็พังตามนี้

[gist id="39970d8165bc3cac8cde861c68d13768" file="load.txt"]

error มาเพียบ

[gist id="39970d8165bc3cac8cde861c68d13768" file="1.txt"]

เมื่อเจอปัญหาแล้ว ก็ไปดู code และ configuration กันหน่อย
จากไปดู code คร่าว ๆ พบว่า เขียน code แบบปกติ
คือในเอกสารเขียนไว้อย่างไร ก็ทำแบบนั้นเช่นกัน !!

ก็เลยทำการเปลี่ยนไปใช้ Go routine และ channel นิดหน่อย
สำหรับการ insert ข้อมูล เพื่อช่วยให้จัดการ resource ได้ดีขึ้น
โดยที่ยังไม่เปลี่ยนแปลง config อะไร

ตัวอย่าง code แบบง่าย ๆ ก็แจ้งแนวทางการแก้ไขกลับไป
เพื่อปรับปรุงการทำงานของ code และระบบให้ดีขึ้น

[gist id="39970d8165bc3cac8cde861c68d13768" file="db.go"]

จากนั้นเพื่อให้แน่ใจ ลองยิง load test กันอีกหน่อย
จะได้ผลเป็นที่น่าพอใจ
คือ ไม่มี error อีกแล้ว
ส่วนการทำงานก็ผ่านฉลุย
รวมทั้งเพิ่มจำนวนการยิงให้สูงขึ้นไปอีก 2 เท่าตัว ก็ผ่าน เช่นกัน

[gist id="39970d8165bc3cac8cde861c68d13768" file="2.txt"]

สุดท้าย ยังมีวิธีแก้ไขอีกหลายอย่างเลย
ไว้ค่อย ๆ ปรับปรุงกันไป ตามรูปแบบของ traffic ที่เกิดขึ้นต่อไป
ทั้ง code และ database


Viewing all articles
Browse latest Browse all 1997

Trending Articles