Việc đóng kết nối MySQL có quan trọng không?

Có, tôi nghĩ điều quan trọng là phải ngắt kết nối của bạn thay vì để nó mở hoặc cho phép bộ thu gom rác cuối cùng xử lý nó. Có một số lý do tại sao bạn nên làm điều này và dưới đây tôi sẽ mô tả phương pháp tốt nhất để thực hiện

TẠI SAO

Vì vậy, bạn đã mở một kết nối tới cơ sở dữ liệu và gửi một số dữ liệu qua lại dọc theo đường dẫn này và hiện có kết quả mà bạn đang tìm kiếm. Lý tưởng nhất là tại thời điểm này, bạn làm điều gì đó khác với dữ liệu và kết quả cuối cùng của ứng dụng của bạn đã đạt được

Sau khi bạn có dữ liệu từ cơ sở dữ liệu, bạn không cần nó nữa, phần này đã hoàn thành nên việc để kết nối mở không làm gì khác ngoài việc giữ bộ nhớ và tăng số lượng kết nối mà cơ sở dữ liệu và ứng dụng của bạn phải theo dõi và

"Nhưng đợi đã. Tôi phải thực hiện liên tiếp nhiều cuộc gọi cơ sở dữ liệu. "

Được rồi, không vấn đề gì, hãy mở kết nối, thực hiện các cuộc gọi của bạn rồi đóng lại. Việc mở một kết nối tới cơ sở dữ liệu trong một ứng dụng "hiện đại" sẽ không tiêu tốn của bạn một lượng thời gian/công suất tính toán đáng kể, trong khi việc đóng kết nối một cách rõ ràng không giúp được gì ngoài việc giúp ích (giải phóng bộ nhớ, giảm số lượng kết nối hiện tại của bạn)

Vì vậy, đó là lý do tại sao, đây là cách

LÀM SAO

Vì vậy, tùy thuộc vào cách bạn đang kết nối với cơ sở dữ liệu MySQL của mình, có thể bạn đang sử dụng một đối tượng IDisposible để giúp quản lý kết nối. Đây là những gì MSDN nói về việc sử dụng IDisposable

Theo quy định, khi bạn sử dụng một đối tượng IDisposable, bạn nên khai báo và khởi tạo nó trong câu lệnh sử dụng. Câu lệnh sử dụng gọi phương thức Vứt bỏ trên đối tượng theo đúng cách và (khi bạn sử dụng nó như được hiển thị trước đó) nó cũng khiến chính đối tượng đó nằm ngoài phạm vi ngay khi Vứt bỏ được gọi. Trong khối sử dụng, đối tượng chỉ đọc và không thể sửa đổi hoặc gán lại

Đây là quan điểm cá nhân của tôi về chủ đề này

  1. Sử dụng khối using giúp mã của bạn sạch hơn (dễ đọc)
  2. Sử dụng một khối using giúp giữ cho mã của bạn rõ ràng (bộ nhớ thông minh), nó sẽ "tự động" dọn sạch các mục không sử dụng
  3. Với một usingblock, nó giúp ngăn việc vô tình sử dụng một kết nối trước đó vì nó sẽ tự động đóng kết nối khi bạn hoàn thành nó

Nói tóm lại, tôi nghĩ điều quan trọng là phải đóng các kết nối đúng cách, tốt nhất là sử dụng phương thức câu lệnh loại con.close() kết hợp với khối using

Như đã chỉ ra trong các nhận xét, đây cũng là một câu hỏi/câu trả lời rất hay tương tự như câu hỏi của bạn. Tại sao luôn đóng kết nối Cơ sở dữ liệu?

Không. Đừng đóng kết nối. Hãy để PHP làm điều đó cho bạn. Điều gì xảy ra nếu bạn cần lấy thêm dữ liệu? . Cũng có thể giữ kết nối mở và làm mọi thứ bạn cần hoặc muốn. Hãy để PHP tự đóng nó và hoàn thành nó. Bạn lãng phí thời gian và tài nguyên mỗi khi mở và đóng các kết nối chỉ để thực hiện một truy vấn chung chung đơn giản

Đó chính xác là những gì tôi đã làm trong những năm qua. Tôi mở truy vấn chạy kết nối và để kết thúc thực thi tập lệnh và đóng kết nối. Hôm nay chúng tôi vừa có một cuộc thảo luận với các đồng nghiệp của tôi về chủ đề này. Họ nói rằng bạn nên đóng kết nối trước khi tập lệnh kết thúc luôn khi bạn không cần chạy truy vấn nữa. Ngoài ra, các ví dụ thủ công PHP dường như đề xuất đóng các kết nối

Và khi tôi nói “đóng kết nối”, ý tôi không phải là bạn mở-đóng và mở lại-đóng lại kết nối cho truy vấn tiếp theo. Điều tôi sẽ làm nếu đóng kết nối là chạy tất cả truy vấn trước, đóng kết nối rồi xử lý dữ liệu được trả về từ truy vấn. Vì vậy, sẽ chỉ có một chu kỳ kết nối mở-đóng

Thông thường việc thực thi tập lệnh không mất nhiều thời gian. Hãy tưởng tượng chúng ta có một kịch bản trong đó chúng ta phải chạy nhiều tập lệnh trong cron mất nhiều thời gian. Tất cả các công việc định kỳ này sẽ dự trữ kết nối trong một khoảng thời gian. Ngoài ra, nếu chúng tôi có một lượng lớn người dùng đồng thời sử dụng cùng một nhóm kết nối. Điều này khiến có thể vượt quá số kết nối tối đa và một số người dùng không thể sử dụng dịch vụ

Cũng có một giải pháp cho vấn đề đó, chỉ cần tăng giới hạn kết nối tối đa, mặt khác, điều này sẽ chiếm nhiều tài nguyên hơn. Và ý kiến ​​của tôi là tài nguyên ngày nay không đắt. Việc bổ sung thêm xử lý phần cứng trên VM ngày nay khá dễ dàng và rẻ tiền

Tôi mở chủ đề này để nghe các ý kiến ​​và thói quen của các đồng nghiệp khác trong cộng đồng về cách bạn xử lý các kết nối cơ sở dữ liệu khi bạn viết mã. Ngoài ra, tôi đã thử google và các ý kiến ​​khá khác nhau. Một số người thích đóng các kết nối một cách nghiêm ngặt trước khi quá trình thực thi tập lệnh kết thúc và một số người chỉ nói rằng cuối cùng hãy để tập lệnh thực hiện

Bạn có nên đóng kết nối MySQL sau mỗi truy vấn không?

Sẽ không có gì xấu xảy ra . Nhưng nếu bạn liên tục mở/đóng kết nối, bạn đang thực hiện bắt tay TCP, buộc HĐH phải phân bổ bộ mô tả tệp và CPU phải làm nhiều việc hơn vì HĐH liên tục tạo một luồng mới cho mỗi kết nối bạn tạo/hủy. Điều đó vô cùng lãng phí.

Điều gì xảy ra nếu bạn không đóng kết nối MySQL?

nếu bạn không bao giờ đóng kết nối của mình với DB thì mã của bạn sẽ không bao giờ giải phóng tài nguyên, cuối cùng DB không thể theo kịp và bị quá tải và gặp sự cố.

Có cần thiết phải đóng kết nối cơ sở dữ liệu?

Dựa vào bộ sưu tập rác, đặc biệt là trong lập trình cơ sở dữ liệu, là một cách lập trình rất kém. Bạn nên tạo thói quen luôn đóng kết nối bằng phương thức close() được liên kết với đối tượng kết nối . Để đảm bảo rằng kết nối đã được đóng, bạn có thể cung cấp khối 'cuối cùng' trong mã của mình.

Điều gì xảy ra nếu tôi không đóng kết nối cơ sở dữ liệu?

Nếu bạn không đóng nó, nó sẽ rò rỉ và liên kết tài nguyên máy chủ . @EJP Bản thân kết nối có thể an toàn theo luồng (do JDBC yêu cầu), nhưng các ứng dụng sử dụng kết nối có thể không an toàn theo luồng. Hãy nghĩ về những thứ như cách ly giao dịch khác nhau, ranh giới (cam kết/rollback/autocommit), v.v.