2016-09-22 31 views
9

Tôi có ứng dụng Mule kết nối với cơ sở dữ liệu Oracle. Ứng dụng này là một api SOAP cho phép thực thi các thủ tục lưu trữ SQL. Trình kết nối của tôi được thiết lập để sử dụng kết nối tổng hợp và tôi đã tự giám sát các kết nối. Tôi có kích thước hồ bơi tối đa là 20 và khi thực hiện cuộc gọi đến cơ sở dữ liệu, tôi có thể thấy chúng mở (netstat -ntl | grep PORTNUMBER).Đóng các kết nối cơ sở dữ liệu sau khi không hoạt động

tcp4  0  0 IP HERE  OTHER IP HERE  SYN_SENT 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  10  0 IP HERE  OTHER IP HERE  ESTABLISHED 

Khi cuộc gọi được thực hiện, tôi hy vọng các kết nối sẽ bị đóng sau một khoảng thời gian nhất định. Điều này không xảy ra. Tôi đã nhận thấy rằng khi ứng dụng đang chạy trên một máy chủ, các kết nối vẫn mở từ tháng bảy (đó là một vài tháng trở lại).

Cách duy nhất tôi tìm thấy cho đến nay thực sự đóng kết nối sau một vài giây là bằng cách bật giao dịch XA và đặt Thời gian chờ kết nối. Tuy nhiên, điều này hoàn toàn messes lên hiệu suất của ứng dụng và nó không cần thiết trên không.

Tôi làm cách nào để thêm thời gian chờ mà không sử dụng kết nối XA? Tôi muốn kết nối cơ sở dữ liệu của mình bị đóng sau 20 giây không hoạt động.

Cảm ơn bạn

Edit: nối cơ sở dữ liệu được sử dụng Generic - Mule phiên bản 3.8.0, Chúng tôi có một số lượng tối đa các kết nối được phép vào cơ sở dữ liệu, chúng tôi có nhiều trường hợp của dòng chảy chạy này. Điều này có nghĩa là các kết nối được bảo lưu bởi một trong các trường hợp khiến các trường hợp khác không thể nhận được kết nối mới.

Vấn đề cụ thể mà chúng tôi đã có là một ví dụ vẫn có 120 kết nối được bảo lưu, mặc dù lần cuối cùng nó chạy được vài tuần trước đó. Khi trường hợp thứ hai yêu cầu nhiều kết nối hơn, nó chỉ có thể nhận được 30 vì tối đa ở phía cơ sở dữ liệu là 150.

Trả lời

0

Bạn có thể thử sử dụng Oracle Transparent Connection Caching nếu không có may mắn với Mule.

Một vài câu hỏi để hiểu được những trường hợp tốt hơn:

  1. loại hình kết nối bạn đang sử dụng (jdbc/cơ sở dữ liệu) và phiên bản nào của Mule là?
  2. tại sao bạn quan tâm đến kết nối đang mở sau đó? bạn có đang quan sát một số triệu chứng khác mà bạn không hài lòng không?
+1

Tôi đã chỉnh sửa câu hỏi của mình. – DenCowboy

0

Kết nối cơ sở dữ liệu qua JDBC được thiết kế để mở với mục đích được sử dụng lại. Nói chung, hầu hết các công nghệ cơ sở dữ liệu bao gồm các cơ sở dữ liệu NoSQL thế hệ tiếp theo, có chi phí khởi động và tắt máy tốn kém. Các kết nối cơ sở dữ liệu nên được thiết lập khi khởi động ứng dụng và đóng một cách duyên dáng khi tắt ứng dụng. Bạn không nên đóng các kết nối sau mỗi lần sử dụng.

Oracle cung cấp một hồ bơi kết nối có tên UCP. UCP cung cấp các tùy chọn để kiểm soát stale connections bao gồm đặt thời gian sử dụng lại tối đa và thời gian chờ kết nối không hoạt động trong số các tùy chọn khác.

Điều này có thể hữu ích để trả lại tài nguyên cho ứng dụng cũng như kiểm tra các kết nối bị hỏng. Bất kể, các kết nối nên được tái sử dụng nhiều lần trước khi đóng.

+0

Tôi biết rằng các kết nối sẽ không được đóng sau mỗi lần sử dụng và có thể được sử dụng lại bằng cách sử dụng hồ bơi. Kết nối được mở trong 2 tháng là một chút mặc dù. Bản thân ứng dụng không bao giờ tắt. Nó không phải đóng cửa, nhưng bất cứ khi nào nó không sử dụng kết nối trong một khoảng thời gian nhất định, tôi muốn nó đóng lại. Nhưng dù sao, đây là câu hỏi dành riêng cho Mule và tôi muốn biết cách sử dụng UCP này bằng Mule. Tôi đã thử sử dụng đậu như một cách để cấu hình kết nối cơ sở dữ liệu của tôi nhưng tôi đã luôn luôn có hiệu suất tồi tệ hơn làm điều này so với chỉ sử dụng một kết nối Mule mặc định. " – DenCowboy

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