ซีพียูเข้มข้นเปิดและปิดการเชื่อมต่อฐานข้อมูล (สำหรับเว็บแอป) ใน MySQL อย่างไร
- ... เมื่อซอฟต์แวร์ DB อยู่บน localhost
- ... เมื่อซอฟต์แวร์ DB อยู่ในเครื่องอื่น
ซีพียูเข้มข้นเปิดและปิดการเชื่อมต่อฐานข้อมูล (สำหรับเว็บแอป) ใน MySQL อย่างไร
คำตอบ:
คิดเกี่ยวกับจำนวนหน่วยความจำที่ถูกจัดสรรต่อการเชื่อมต่อฐานข้อมูล สิ่งที่จะต้องจัดสรร? ตามคู่มือการศึกษาการรับรอง MySQL 5.0, หน้า 357 :
เซิร์ฟเวอร์จะเก็บบัฟเฟอร์ไว้หลายตัวสำหรับการเชื่อมต่อลูกค้าแต่ละครั้ง หนึ่งถูกใช้เป็นบัฟเฟอร์การสื่อสารสำหรับการแลกเปลี่ยนข้อมูลกับลูกค้า บัฟเฟอร์อื่น ๆ จะได้รับการดูแลต่อลูกค้าสำหรับการอ่านตารางและการดำเนินการเข้าร่วมและเรียงลำดับ
การตั้งค่าใดที่ควบคุมบัฟเฟอร์ต่อการเชื่อมต่อ
ใช้เวลาในการจัดสรรและยกเลิกการจัดสรรบัฟเฟอร์เหล่านี้เมื่อมีการเชื่อมต่อ อย่าลืมให้หลายผลรวมของค่าเหล่านั้นโดยmax_connections โปรดอย่าใช้mysql_pconnectเนื่องจากการเชื่อมต่อแบบต่อเนื่องของ PHP และ MySQL นั้นไม่สอดคล้องกัน นี่คือลิงก์ข้อมูลสองลิงก์ในหัวข้อนี้:
ในสภาพแวดล้อมที่หนักอ่านและเขียนหนักเช่น OLTP สิ่งนี้จะมีราคาแพงในแง่ของการใช้ RAM และการยับยั้งที่เป็นไปได้เนื่องจากการสลับในระบบปฏิบัติการ บนเว็บไซต์ low-write ที่ low_read ฉันไม่ต้องกังวลอะไรมาก
ฉันไม่แน่ใจว่ามันสำคัญแค่ไหน แน่นอนว่ามีค่าใช้จ่ายสูงกว่าการใช้การเชื่อมต่อเดียวกันอีกครั้ง สิ่งที่คุณจะสังเกตได้นั้นขึ้นอยู่กับว่าคุณใช้การรวมการเชื่อมต่ออย่างถูกต้องหรือไม่สระว่ายน้ำของคุณอิ่มตัวทรัพยากรที่มีอยู่ในกล่อง ฯลฯ อย่างไร
โดยทั่วไปถ้าคุณมีประสิทธิภาพห่วงจะทำปฏิสัมพันธ์กับฐานข้อมูลบางอย่างที่คุณจะไปได้ไกลดีกว่าอีกครั้งโดยใช้การเชื่อมต่อใช้งานเดียวกันกว่าการเปิดและปิดภายในวง (การต่อต้านรูปแบบที่ฉันเห็นค่อนข้างบ่อย) .
ภาวะที่กลืนไม่เข้าคายไม่ออกระหว่างการใช้วัตถุอีกครั้งและฉีกมันออกและสร้างมันขึ้นมาอีกครั้ง (ซึ่งทั้งคู่มีข้อดีและข้อเสีย) สามารถแก้ไขได้ด้วยการประนีประนอม: แคชวัตถุ แต่ในเวลา จำกัด (เช่นหมดอายุ) หากมีการเข้าถึงวัตถุบ่อยครั้งวัตถุจะถูกนำกลับมาใช้ใหม่ แต่ถ้ามันไม่ได้ถูกใช้มาระยะหนึ่งแล้วกลไกการหมดอายุก็จะปิดลงทำให้มันถูกสร้างขึ้นใหม่เมื่อมันต้องการอีกครั้ง
ระบบสามารถมี hook แบบโกลบอลสำหรับแคชประเภทนี้ซึ่งถูกเรียกใช้เมื่อหน่วยความจำเหลือน้อยซึ่งจะทำให้พวกมันทั้งหมดปล่อยวัตถุที่ไม่ได้ใช้งานเมื่อเร็ว ๆ นี้
Mysql แคชการเชื่อมต่อ (หรือเธรด) โดยใช้ Thread Cache (thread_cache_size) ค่าสูงสุดสำหรับมันคือ 100 เมื่อไคลเอ็นต์ปิดการเชื่อมต่อจะถูกส่งคืนไปยังแคช เมื่อการเชื่อมต่อใหม่เปิดขึ้นจะทำการตรวจสอบแคชเธรด ในระบบที่ยุ่งมากการเปิดการเชื่อมต่อแบบปิดอาจมีค่าใช้จ่ายสูง
https://dev.mysql.com/doc/refman/5.6/en/connection-threads.html หากคุณสามารถซื้อ Mysql Enterprise ได้คุณสามารถใช้ Thread Pool ปลั๊กอินที่ติดตั้งใน Mysql 5.6