ใช่แล้วครับวิธีแก้ปัญหาที่ดีที่สุดของ MySQL Too Many Connection คือการทำระบบ cache
อย่างที่ง่ายที่สุดคือคือการ Cache ทั้ง Page เป็นการ cache output ทั้งหมดให้ออกมาในรูปแบบ Static ซึ่ง Library ที่สนับสนุนการทำ Cache ประเภทนี้คือ smarty ถ้าไม่งั้นคงต้องเขียนเอง โดยใช้ คำสั่งในตระกูล ob โดยเฉพาะ ob_get_content หรือรวบคำสั่งเดียวด้วย ob_get_clean
ส่วนวิธีที่ผมชอบที่สุดคือการทำ cache query โดยการ cache ในระดับนี้สามารถทำได้ตั้งแต่
1. File Cache
อันนี้เป็นการ cache query results ลง text file ทำง่ายสุด แต่ผลลัพธ์ก็ไม่เลวร้ายนัก
2. Fast Memory on local (apc)
อันนี้เป็นการ cache ลง fast memory (ram) ภายในเครื่องตัวเอง เร็วสุดๆ แต่มีข้อจำกัดคือ ขนาดแรมที่ไม่สามารถเพิ่มได้มากนัก (ตาม spec mainboard)
3. Fast Memory on networks (memcache)
อันนี้เป็นการทำ cache ลง fast memory เช่นกัน เพียงแต่สามารถ connect ไปยัง server ตัวอื่นๆ ที่ต้องการได้เลย ดังนั้นจึงไม่ต้องห่วงเรื่อง แรมจำกัด facebook เองใช้วิธีนี้ โดยแทบจะไม่มีการ แตะ db เลย db เอาไว้ backup เท่านั้น (เผื่อไฟดับ) ความเร็วเป็นรอง local นิดหน่อย แต่ระยะยาวสุดยอดครับ แต่ทุนต้องหนาหน่อย
ตัวอย่าง library ที่ใช้ทำ cache ทั้ง 3 ประเภท
http://www.rooftopsolutions.nl/article/107 วิธีสุดท้ายเป็นวิธีการที่ไม่อยากแนะนำเท่าไหร่ คือซื้อ server มารัน mysql อีกตัวเลย แล้ว connect ข้ามเครื่อง (สุดท้ายก็ต้องซื้อเพิ่มไปเรื่อยๆ -*-)
-----------------------------------------
comment ส่วนตัว
ผมว่าวิธีที่น่าจะเป็นทางเลือกที่ดีที่สุดของคุณคือการทำ index ให้ db ดีๆหน่อย รวมทั้งการทำ cache ในระดับ file รวมทั้งคำนึงปัญหาเรื่องการ seek cache ผ่าน folder ด้วยก็น่าจะเพียงพอแล้วล่ะครับ
Tee++;