Tôi có dịch vụ .NET 4 C# đang sử dụng thư viện TPL để phân luồng. Gần đây chúng tôi đã chuyển sang sử dụng kết nối tổng hợp, vì một kết nối đã trở thành một cổ chai để xử lý.Kết nối cơ sở dữ liệu tổng hợp với dịch vụ đa luồng
Trước đây, chúng tôi đã sử dụng mệnh đề khóa để kiểm soát an toàn luồng trên đối tượng kết nối. Khi công việc sẽ sao lưu, hàng đợi sẽ tồn tại dưới dạng nhiệm vụ, và nhiều luồng (nhiệm vụ) sẽ đợi trong mệnh đề khóa. Bây giờ, trong hầu hết các kịch bản, các chủ đề chờ IO cơ sở dữ liệu và các quy trình làm việc MUCH nhanh hơn.
Tuy nhiên, bây giờ tôi đang sử dụng tính năng tổng hợp kết nối, chúng tôi có sự cố mới. Khi đạt đến số lượng kết nối tối đa (100 mặc định), nếu có yêu cầu kết nối thêm, có thời gian chờ (xem Pooling info). Khi điều này xảy ra, một ngoại lệ được ném ra rằng "Yêu cầu kết nối đã hết thời gian".
Tất cả IDisposables của tôi đều nằm trong các câu lệnh và tôi đang quản lý đúng các kết nối của mình. Kịch bản này xảy ra do nhiều công việc được yêu cầu hơn so với hồ bơi có thể xử lý (dự kiến). Tôi hiểu lý do tại sao ngoại lệ này bị ném và tôi biết cách xử lý nó. Một thử lại đơn giản cảm thấy giống như một hack. Tôi cũng nhận ra rằng tôi có thể tăng thời gian chờ thông qua chuỗi kết nối, tuy nhiên điều đó không giống như một giải pháp vững chắc. Trong thiết kế trước đó (không gộp chung), các mục công việc sẽ xử lý vì khóa trong ứng dụng.
Cách tốt nhất để xử lý trường hợp này là gì để đảm bảo rằng tất cả công việc được xử lý?
Bạn có thể đăng một số mã của bạn? Sẽ rất hữu ích khi xem bạn đang tạo và lên lịch các nhiệm vụ như thế nào. –
Nhiệm vụ được tạo ra gần như thế này: Task.Factory.StartNew (() => ProcessItem (mục)); Tôi không theo dõi các đối tượng nhiệm vụ đủ để hạn chế việc tạo các nhiệm vụ (nếu đó là tuyến đường bạn đang nghĩ). Không phải tất cả các tác vụ đều yêu cầu cơ sở dữ liệu hoạt động, và không phải tất cả công việc cơ sở dữ liệu đều sử dụng cùng một cơ sở dữ liệu (có rất nhiều khác nhau, oracle, mssql, v.v.). –
Đây có phải là biện pháp xử lý tải trọng tăng hoặc yêu cầu liên tục đến quá nhanh để bạn có thể xử lý không? Nếu sau này, bạn sẽ phải thừa nhận thất bại và trở về thất bại tại một số điểm. –