การปิดการเชื่อมต่อ mysql สำคัญหรือไม่?


88

การปิดประสิทธิภาพการเชื่อมต่อ mysql อย่างชาญฉลาดเป็นสิ่งสำคัญหรือไม่หรือปิดโดยอัตโนมัติหลังจากที่ไฟล์ php ทำงานแล้ว?


ดูคำถามนี้ด้วยstackoverflow.com/questions/336078/…
alex

ฉันเดาเช่นเดียวกันกับ ftp_close?
doc_id

การปิดการเชื่อมต่อ mysql สำคัญหรือไม่? ใช่มันเป็นเหมือน destructor ใน c ++
jasinth premkumar

คำตอบ:


90

จากเอกสารประกอบ :

หมายเหตุ: ลิงก์ไปยังเซิร์ฟเวอร์จะถูกปิดทันทีที่การเรียกใช้สคริปต์สิ้นสุดลงเว้นแต่จะปิดก่อนหน้านี้โดยการเรียก mysql_close () อย่างชัดเจน

หากสคริปต์ของคุณมีการประมวลผลในปริมาณพอสมควรหลังจากดึงผลลัพธ์และได้รับชุดผลลัพธ์ทั้งหมดแล้วคุณควรปิดการเชื่อมต่ออย่างแน่นอน หากคุณไม่ทำเช่นนั้นมีโอกาสที่เซิร์ฟเวอร์ MySQL จะถึงขีด จำกัด การเชื่อมต่อเมื่อเว็บเซิร์ฟเวอร์มีการใช้งานหนัก หากคุณไม่สามารถปิดการเชื่อมต่อ MySQL ได้จนกว่าจะใกล้ถึงจุดสิ้นสุดของสคริปต์จะเป็นการดีกว่าแม้ว่าจะไม่จำเป็นต้องทำอย่างชัดเจนก็ตาม

ฉันไม่แน่ใจว่า fastcgi มีผลต่อสิ่งต่างๆแค่ไหน หน้าหนึ่งอ้างว่าการสร้าง PHP ที่รองรับ fastcgi จะสร้างการเชื่อมต่อแบบต่อเนื่องแม้กระทั่งสำหรับ mysql_connect สิ่งนี้ขัดแย้งกับเอกสารที่ระบุว่าการเชื่อมต่อถูกปิดเมื่อกระบวนการแทนที่จะสิ้นสุดสคริปต์ แทนที่จะทดสอบฉันจะแนะนำให้ใช้ mysql_close () จริงๆแล้วฉันแนะนำให้ใช้PDOถ้ามี


ฉันเดาเช่นเดียวกันกับ ftp_close?
doc_id

4
นั่นหมายความว่าหากผู้ใช้ปิดเพจ (เช่น) ก่อนกำหนด (หรือมีข้อผิดพลาด) การเชื่อมต่ออาจยังเปิดอยู่
Toni Michel Caubet

1
@Toni Michel Caubet "The link to the server will be closed as soon as the execution of the script ends."เมื่อผู้ใช้ปิดเพจเร็วก็ไม่สำคัญสำหรับเซิร์ฟเวอร์ PHP มันรันสคริปต์เช่นเคยและสิ้นสุดสคริปต์เช่นเคย ผู้ใช้เท่านั้นที่จะไม่เห็นผลลัพธ์
ลูกศร

10

มันสำคัญมาก? ไม่ค่อยเท่าไหร่

ถือว่าเป็นแนวปฏิบัติที่ดีหรือไม่? ใช่.

ฉันไม่เห็นว่าทำไมคุณถึงไม่อยากปิดมัน


6
เมื่อพิจารณาจากหน้าคู่มือที่mysql_closeระบุว่า "การใช้ mysql_close () มักไม่จำเป็นเนื่องจากลิงก์ที่เปิดอยู่ไม่ถาวรจะปิดโดยอัตโนมัติเมื่อสิ้นสุดการเรียกใช้สคริปต์" ฉันจะไม่คิดว่าเป็นการปฏิบัติที่ไม่ดีจริงๆที่จะไม่ปิดการเชื่อมต่อ
nico

4
"ฉันไม่เห็นว่าทำไมคุณถึงไม่อยากปิด" คุณคงไม่อยากปิดมันถ้ามีโอกาสที่คุณอาจต้องการมันอีกครั้ง
Frank Farmer

1
หากคุณใช้ ajax หากการเชื่อมต่อปิดทุกครั้งที่คุณพยายามใช้ ajax การเชื่อมต่อจะเปิดและปิดอีกครั้งและจะคุ้มค่ากว่าปล่อยให้การเชื่อมต่อเปิดไปยังเซิร์ฟเวอร์และไคลเอนต์ไม่สนใจว่าการเชื่อมต่อจะเปิดหรือไม่ ดูแลให้เว็บไซต์มีความเร็ว
Robert

มันสำคัญมาก !!! หากโหลดเซิร์ฟเวอร์สูงและคุณมีการเชื่อมต่อที่ไม่ปิดสนิทจำนวนมากตามที่คนอื่นกล่าวไว้ว่าสิ่งนี้อาจนำไปสู่เซิร์ฟเวอร์ที่ไม่ตอบสนองดังนั้นฉันจึงเรียกได้ว่าสำคัญมาก!
oliiix

ปิดไปเลยดีกว่า. ง่ายและไม่มีปัญหา
José Carlos PHP

5

เมื่อใช้บางอย่างเช่น cgi คุณไม่จำเป็นต้องปิดการเชื่อมต่อ mysql ของคุณโดยสิ้นเชิงเนื่องจากจะปิดโดยอัตโนมัติเมื่อสิ้นสุดการเรียกใช้สคริปต์ เมื่อใช้เทคโนโลยีต่อเนื่องเช่น mod_perl และอื่น ๆ ซึ่งรักษาการเชื่อมต่อระหว่างคำขอสิ่งสำคัญคือต้องติดตามการเชื่อมต่อตัวแปรส่วนกลางและอื่น ๆ

โดยทั่วไปสำหรับข้อมูลถาวรให้ล้างข้อมูลด้วยตัวคุณเอง สำหรับข้อมูลที่ไม่สำคัญและไม่ถาวรข้อมูลทั้งหมดจะหายไปเมื่อคำขอเสร็จสิ้นอยู่ดี ไม่ว่าจะด้วยวิธีใดแนวทางปฏิบัติที่ดีที่สุดคือปิดการเชื่อมต่อของคุณเสมอ


1
เขากำลังพูดถึง PHP ซึ่งไม่คงอยู่ดังนั้นจึงไม่สามารถใช้ได้
Sasha Chedygov

2

ปิดทันทีที่สคริปต์ดำเนินการเสร็จสิ้น เว้นแต่คุณจะเปิดการเชื่อมต่อแบบถาวร ตามหลักการแล้วคุณควรปล่อยทรัพยากร (การเชื่อมต่อที่นี่) ทันทีที่คุณดำเนินการเสร็จสิ้น เว้นแต่จะมีโอกาสดีที่คุณจะต้องใช้มันอีกครั้งในไม่ช้าในการดำเนินการ

การรวมการเชื่อมต่อหรือการใช้การเชื่อมต่อแบบต่อเนื่อง (หากนั่นคือสิ่งที่คุณหมายถึง) เป็นความคิดที่ดีหากคุณอยู่เบื้องหลังเซิร์ฟเวอร์ฐานข้อมูลเดียว อย่างไรก็ตามหากมีเซิร์ฟเวอร์มากขึ้นและคุณกำลังโหลดบาลานซ์ก็อาจส่งผลเสียต่อการกระจายงาน โดยทั่วไปไคลเอนต์บางรายจะเรียกใช้แบบสอบถามจำนวนมากในขณะที่บางรายเรียกใช้งานที่เบากว่า ดังนั้นหากใช้การเชื่อมต่อเดียวกันกับ n มากกว่าเซิร์ฟเวอร์บางตัวอาจมีภาระงานหนักในขณะที่เซิร์ฟเวอร์อื่น ๆ ใช้งานไม่ได้ พิจารณาใช้ ttls ที่เล็กกว่าและขนาดพูลการเชื่อมต่อที่เปลี่ยนแปลงได้


1

CMS ส่วนใหญ่ปิดการเชื่อมต่อ MySQL เมื่อสิ้นสุดคำขอซึ่งไม่มีความหมายจริงๆเพราะ PHP จะทำต่อไป

อย่างไรก็ตามหากคุณมีสคริปต์ที่ไม่จำเป็นต้องเชื่อมต่ออีกต่อไปให้พูดตรงกลางของสคริปต์จากนั้นกิจกรรมหนักอื่น ๆ เกิดขึ้นคุณควรปิดการเชื่อมต่ออย่างชัดเจน สิ่งนี้จะทำให้ทรัพยากรบางอย่างฟรี

ตอนนี้มีการพูดถึงประโยชน์ของการปิดการเชื่อมต่อมากมาย แต่แทบไม่มีการพูดถึงประโยชน์ของการไม่ปิดการเชื่อมต่อ โดยพื้นฐานแล้วหากคุณไม่ได้ปิดการเชื่อมต่อในตอนท้ายของสคริปต์แสดงว่าคุณกำลังประหยัดทรัพยากรบางอย่าง ลองนึกภาพเว็บแอปพลิเคชัน (หรือแอปพลิเคชันใด ๆ ) ที่ได้รับการดูหน้าเว็บ 100 ครั้ง / วินาที ดังนั้นทุก ๆ วินาทีคุณจะต้องเรียกใช้mysqli_close100 ครั้งซึ่งหมายความว่าในทุก ๆ วินาทีคุณมี 100 Roundtrips ที่ไม่จำเป็นไปยังเซิร์ฟเวอร์ฐานข้อมูลเพื่อปิดการเชื่อมต่อที่เปิดอยู่ จากมุมมองด้านประสิทธิภาพนี่เป็นค่าใช้จ่ายที่แท้จริงเนื่องจาก PHP จะตรวจสอบการเชื่อมต่อแบบเปิดเมื่อสคริปต์เสร็จสิ้นและจะปิดการเชื่อมต่อเหล่านั้นและอาจเป็นเช่นนั้นเนื่องจากทุกอย่างเกิดขึ้นอย่างรวดเร็วทำให้ PHP ไม่เห็นว่าคุณมี ปิดการเชื่อมต่อเหล่านั้นและจะพยายามปิดอีกครั้ง

หมายเหตุ: คำตอบข้างต้นจะถือว่าคุณไม่ได้ใช้การเชื่อมต่อแบบถาวร (การเชื่อมต่อแบบถาวรไม่ได้ใช้ใน CMS หลักใด ๆ )

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.