หลังจากค้นหามากในที่สุดฉันก็พบทางออก
ฉันไม่ได้เป็นนักเขียนมากนักดังนั้นฉันจะพยายามทำให้ดีที่สุดเพื่อให้กระชับที่สุด
เท่าที่ฉันจะหาได้มีวิธีแก้ปัญหา 2 ข้อ:
รีเลย์ SQL
http://sqlrelay.sourceforge.net/
นี่เป็นคำถามที่ถามมาและอีกมากมาย ฉันจะไม่ลงรายละเอียดมากเกินไปในสิ่งที่ฉันสามารถค้นหาเกี่ยวกับเรื่องนี้ แต่จะพูดถึงว่ามันไม่ใช่วิธีแก้ปัญหาที่ทำงานได้เพราะมันไม่โปร่งใส ความหมายที่ไหลเป็นดังนี้:
PHP -> Queries -> SQL Relay Extension -> SQL Relay -> Externally hosted MySQL
ดังนั้นสิ่งนี้จะเกี่ยวข้องกับการเขียนโค้ดทั้งหมดของเราใหม่จาก mysql ถึง sql relay ไม่ใช่ตัวเลือกในกรณีของเรา
ทั้งหมดที่ถูกกล่าวว่าถ้ามีคนมีการวางแผนสดโครงการขนาดใหญ่ที่ต้องใช้ใด ๆ ของคุณสมบัติมากมายที่ SQL Relay มีมันเสียงที่สวยงาม
proxy Mysql
http://forge.mysql.com/wiki/MySQL_Proxy
นี่คือทางออกที่เราใช้
กุญแจสำคัญในการทำสิ่งนี้สิ่งที่เราต้องการให้ทำคือการรวมสคริปต์ LUA สำหรับพรอกซี mysql
ส่วนขยาย LUA นี้สามารถดูได้ที่:
https://github.com/cwarden/mysql-proxy/blob/315ab806bb95b8223f5afd3d238eff2a40af03d8/lib/ro-pooling.lua
นี่คือสถิติพื้นฐานบางอย่าง ... โปรดจำไว้ว่านี่คือการทดสอบที่เวลาใช้งานต่ำ:
[root@HOSTNAME etc]# netstat -na | grep ":3306 " | grep TIME_WAIT | wc
6433 38598 572537
หลังจากเปลี่ยนมาใช้ mysql-proxy และให้สิ่งต่าง ๆ สงบลง:
[root@HOSTNAME etc]# netstat -na | grep ":3306 " | grep TIME_WAIT | wc
32 192 2848
อย่างที่คุณเห็นได้ชัดเจนว่าพอร์ต TIME_WAIT ไปยัง mysql ได้ลดลงไปเกือบไม่มีเลย
ขณะนี้การเชื่อมต่อยังคงอยู่โดยไม่ใช้ mysql_pconnect / mysqli_connect (... p: hostname ... )
อาจกล่าวได้ว่ามีการตั้งค่าบางอย่างที่สามารถกำหนดค่าได้ใกล้กับส่วนบนสุดของสคริปต์ตัวพูลเลอร์
ท้องถิ่น min_idle_connections
และ
max_idle_connections ท้องถิ่น
สิ่งเหล่านี้ดูเหมือนจะอธิบายได้ด้วยตนเอง ยกเว้นว่า: มันจะปรากฏว่าชุดค่าผสมชื่อผู้ใช้แต่ละคน (และรหัสผ่าน? ยังไม่ได้ทดสอบ ... ส่วนใหญ่ไม่ใช่สรรพสิ่ง) สร้างชุดการเชื่อมต่อแบบถาวรของตัวเอง
max_idle_connections ดังนั้นคูณด้วยจำนวนผู้ใช้ mysql ที่ไม่ซ้ำใครที่จะเชื่อมต่อกับฐานข้อมูล และนั่นควรให้ความคิดเกี่ยวกับจำนวนการเชื่อมต่อที่ไม่ใช้งานที่คุณจะได้รับ
ดังนั้นฉันขอย้ำอีกครั้งเพื่อให้สิ่งเล็ก ๆ น้อย ๆ นี้กระทบกับคำหลักบางคำสำหรับผู้ที่ค้นหาผ่าน google:
เมื่อใช้ PHP เป็นไปได้หรือไม่ที่จะมีการเชื่อมต่อ mysql แบบต่อเนื่องโดยไม่ต้อง mysql_pconnect?
ใช่สิ่งนี้สามารถทำได้ผ่าน SQL Relay หากคุณไม่ต้องการสร้างรหัสส่วนใหญ่ของคุณอีกครั้งเพื่อส่งคำสั่งของคุณผ่านส่วนขยายหรือโปร่งใสโดยใช้ mysql-proxy พร้อมกับสคริปต์ ro-pooling.lua
เราต้องการสิ่งนี้มาประมาณหนึ่งปีแล้ว
สนุก!
mysql_pconnect
และเริ่มการเชื่อมต่อแต่ละครั้งด้วย "ฟังก์ชั่นการล้างข้อมูล" บ้าง