สอบถามเรื่องปัญหาการ connecting database เมื่อมีการ connect หลายๆครั้งครับ
โดยเมื่อมีการ connect หลายๆครั้ง จะแสดง error ดังนี้ครับ
MySql.Data.MySqlClient.MySqlException (0x80004005): error connecting: Timeout expired.
The timeout period elapsed prior to obtaining a connection from the pool.
This may have occured because all pooled connections were in use and
max pool size was reached.
at MySql.Data.MySqlClient.MySqlPool.GetConnection()
at MySql.Data.MySqlClient.MySqlConnection.Open()
at ...(ชื่อ class ที่ connect database)
ตอนนี้ที่แก้ไปแล้วคือ
- เข้าไป set timeout ใน server ใหม่เป็น 60 วินาที ซึ่งยังไม่หาย
- เข้าไป set max_pool_size เป็นจำนวน 60% ของ ram แล้ว ก็ยังไม่หายครับ
ไม่ทราบว่ามีท่านใดที่เคยประสบปัญหาดังกล่าวและแก้ไขได้บ้างครับ และแก้อย่างไร ขอบคุณครับ
ปล. พัฒนาบน vb.net framework ครับ
ทุกๆ ครั้งที่ต่อ DB คุณได้ปิดการเชื่อมต่อมั้ยครับ ถ้าไม่ก็เพราะว่าคุณเปิดอย่างเดียวแต่ไม่ปิดเลยครับ
2.1 ดู block try-catch ให้ดีๆ ว่ามี finally หรือไม่? ให้เอา connection.close ใส่ใน finally ไว้ด้วยเสมอ (เพราะเจอการเขียนที่พลาดบ่อย เช่น มี try ใน try มี con.open แล้วก็เขียน con.close ไว้ที่ catch แต่ลืมคิดไปว่า ถ้าไม่เกิด error จะไม่ได้เข้า catch แล้วก็เลยไม่ได้ปิด con.close)
ทางแก้
1. เพิ่ม max pool size ใน connection string (เต็มที่ของ mysql น่าจะได้ 100) แล้วเทสดู
2. แก้ถาวร ใช้ max pool size ไม่มากนัก (เช่น 2) แล้วไล่ตามปิด connection ทันที ที่ใช้ข้อมูล/แก้ไขข้อมูลเสร็จ ให้เร็วที่สุด
https://msdn.microsoft.com/en-us/library/htd05whh.aspx
ขอบพระคุณทุกท่านครับ สำหรับคำตอบ