2016-12-28 16 views
5

Tôi đang sử dụng temporary tables của MySQL với connection pooling.Các hồ bơi kết nối và phát hành các bảng tạm thời khi trả lại

Thông thường, các bảng tạm thời được tạo trong phiên trong phiên đó sẽ bị ngắt khi kết nối bị đóng. Tuy nhiên, vì tôi đang sử dụng kết nối tổng hợp và kết nối vật lý không thực sự đóng khi java.sql.Connection.close() được gọi, tôi đang tìm các bảng tạm thời ở xung quanh và ảnh hưởng đến phiên tiếp theo.

Điều này gây ra rò rỉ tài nguyên trên DB vì các bảng tạm thời không được giải phóng ngay lập tức, cũng như các xung đột tên do các tên bảng va chạm.

Bằng trực giác, tôi mong đợi một phương tiện chặn sạch khi tôi mượn kết nối. Làm thế nào để đạt được điều này?

  • Có vẻ như không tương đương SQL Server's sp_reset_connection cho MySQL.
  • Ngay cả khi có, tôi không thể thấy cách dbcp2 can be configured gọi nó khi kết nối được trả lại.
  • Luôn đóng kết nối vật lý khi quay lại hồ bơi có thể hoạt động, nhưng tôi không thể xem cách cấu hình dbcp2 để thực hiện điều đó.

Bên cạnh bảng tạm thời, vấn đề này cũng ảnh hưởng đến:

+0

* "Luôn đóng kết nối vật lý khi quay lại hồ bơi có thể hoạt động" * ... đó là một mâu thuẫn trong điều khoản, phải không? Nếu kết nối được đóng lại, nó sẽ không quay trở lại hồ bơi. Bạn có thể cố gắng buộc hồ bơi giải phóng kết nối db khi bạn hoàn tất việc phát hành truy vấn 'ROLLBACK RELEASE;' Điều đó gần như chắc chắn sẽ làm những gì bạn đang cố gắng làm, nhưng các tác dụng phụ sẽ rất thú vị và tổng hợp sẽ trở thành bit vô nghĩa. Về cơ bản, với việc gộp nhóm, mã của bạn phải chắc chắn rằng nó khởi tạo riêng của nó, 'DROP TEMPORARY TABLE IF EXISTS ...' trước khi tạo bảng, v.v. –

Trả lời

0

MySqlConnection.ClearPool sử dụng (kết nối); có thể làm việc. Tôi có vấn đề tương tự với điều này cho GET_LOCK(), MySqlConnection.ClearPool (kết nối) có thể giải quyết vấn đề này.

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