2009-05-19 37 views
73

Việc quyết định đóng các kết nối mysql có hiệu quả khôn ngoan hay không tự động đóng sau khi tệp php đã chạy?Việc đóng kết nối mysql có quan trọng không?

+0

Tôi đoán điều tương tự cũng áp dụng cho ftp_close? – rahmanisback

+0

Xem câu hỏi này quá http://stackoverflow.com/questions/336078/php-mysql-when-is-the-best-time-to-disconnect-from-the-database – alex

+0

Việc đóng kết nối mysql có quan trọng không? có, nó giống như destructor trong C++ –

Trả lời

77

Từ documentation:

Lưu ý: Các liên kết đến các máy chủ sẽ được đóng lại ngay sau khi thực hiện các kịch bản kết thúc, trừ khi nó đóng cửa sớm hơn bằng cách gọi một cách rõ ràng mysql_close().

Nếu tập lệnh của bạn có số lượng xử lý hợp lý để thực hiện sau khi tìm nạp kết quả và đã truy xuất tập kết quả đầy đủ, bạn chắc chắn nên đóng kết nối. Nếu bạn không, có một cơ hội máy chủ MySQL sẽ đạt đến giới hạn kết nối của nó khi máy chủ web đang được sử dụng nhiều. Nếu bạn không thể đóng kết nối MySQL cho đến khi kết thúc kịch bản, nó sạch hơn mặc dù không cần thiết để làm điều đó một cách rõ ràng.

Tôi không chắc chắn cách thức fastcgi ảnh hưởng đến mọi thứ. One page tuyên bố rằng một bản dựng PHP hỗ trợ fastcgi sẽ tạo ra các kết nối liên tục, ngay cả đối với mysql_connect. Điều này mâu thuẫn với các tài liệu trong đó kết nối được đóng lại khi quá trình, chứ không phải là kịch bản, kết thúc. Thay vì thử nghiệm nó, tôi sẽ khuyên bạn nên sử dụng mysql_close(). Trên thực tế, tôi khuyên bạn nên sử dụng PDO, nếu có.

+0

Tôi đoán điều tương tự cũng áp dụng cho ftp_close? – rahmanisback

+1

Điều đó có nghĩa là nếu người dùng đóng trang (ví dụ) sớm (hoặc có một số lỗi) thì kết nối có thể vẫn mở? –

+0

@Toni Michel Caubet '" Liên kết tới máy chủ sẽ bị đóng ngay sau khi thực thi tập lệnh kết thúc. "' Khi người dùng đóng trang sớm thì không quan trọng đối với máy chủ PHP. Nó chạy kịch bản như luôn luôn và kết thúc kịch bản như mọi khi. Chỉ người dùng sẽ không thấy kết quả. – arrowman

4

Khi sử dụng một cái gì đó như cgi, nó hoàn toàn không cần thiết để đóng kết nối mysql của bạn kể từ khi chúng tự động đóng vào cuối thực thi kịch bản. Khi sử dụng các công nghệ liên tục như mod_perl và các công nghệ khác, duy trì kết nối của bạn giữa các yêu cầu, thì điều quan trọng là phải theo dõi các kết nối, các biến toàn cục, v.v ..

Về cơ bản, dữ liệu liên tục sẽ tự động dọn sạch. Đối với dữ liệu không liên tục, không liên tục, tất cả sẽ biến mất khi yêu cầu hoàn tất. Dù bằng cách nào, thực hành tốt nhất là luôn đóng kết nối của bạn.

+1

Anh ấy đang nói về PHP, không liên tục, do đó không áp dụng. –

8

Điều đó có quan trọng không? Không quá nhiều

Được coi là một phương pháp hay để làm theo? Vâng.

Tôi không hiểu tại sao bạn không muốn đóng.

+4

Vâng, xem xét rằng ngay cả trang hướng dẫn sử dụng cho 'mysql_close' nói" Sử dụng mysql_close() thường không cần thiết, vì các liên kết mở không liên tục được tự động đóng lại vào cuối quá trình thực thi của tập lệnh. " Tôi sẽ không thực sự xem xét nó thực hành xấu không phải để đóng kết nối. – nico

+3

"Tôi không hiểu tại sao bạn không muốn đóng nó." Bạn sẽ không muốn đóng nó nếu có bất kỳ cơ hội nào mà bạn có thể cần nó một lần nữa. –

+1

nếu U sử dụng ajax thì nếu kết nối đóng sau đó mỗi lần U cố gắng sử dụng ajax kết nối sẽ mở và đóng lại và điều này sẽ có giá trị hơn để kết nối mở cho máy chủ và máy khách không quan tâm đến kết nối mở hay không anh quan tâm rằng trang web là tốc độ – robert

2

Được đóng ngay sau khi tập lệnh hoàn tất thực thi. Trừ khi bạn đã mở kết nối liên tục. Lý tưởng nhất là bạn nên phát hành một tài nguyên (một kết nối tại đây) ngay khi bạn hoàn thành nó. Trừ khi có một cơ hội tốt mà bạn sẽ cần nó một lần nữa rất sớm trong việc thực hiện.

Kết nối tổng hợp hoặc sử dụng kết nối liên tục (nếu đó là ý của bạn) là một ý tưởng hay nếu bạn ở sau một máy chủ cơ sở dữ liệu. Tuy nhiên nếu có nhiều máy chủ hơn và bạn đang cân bằng tải, nó có thể làm hỏng sự phân phối công việc. Thông thường một số khách hàng chạy các truy vấn nặng trong khi các ứng dụng khác chạy các truy vấn nhẹ hơn. Vì vậy, nếu cùng một kết nối được sử dụng trên n trên, một số máy chủ sẽ nhấn tải nặng trong khi những người khác sẽ được sử dụng. Cân nhắc sử dụng các ttls nhỏ hơn và kích thước hồ bơi kết nối thay đổi.

Các vấn đề liên quan