2008-09-09 52 views
6

Dưới đây là toàn bộ lỗi: SqlException: A transport-level error has occurred when receiving results from the server. (provider: Shared Memory Provider, error: 1 - I/O Error detected in read/write operation)gì gây SqlException này: Một lỗi vận chuyển cấp đã xảy ra khi nhận được kết quả từ máy chủ

Tôi đã bắt đầu nhìn thấy thông báo này liên tục cho một vài trong số các bài kiểm tra đơn vị trong ứng dụng của tôi (có hơn 1100 đơn vị & kiểm tra hệ thống). Tôi đang sử dụng nhân vật thử nghiệm trong ReSharper 4.1.

Một điều khác: máy phát triển của tôi là máy ảo VMWare.

Trả lời

5

Tôi đã gặp phải nhiều mặt trăng này trước đây. Điểm mấu chốt là bạn đang chạy ra khỏi các cổng có sẵn.

Trước tiên hãy đảm bảo ứng dụng gọi điện của bạn có tính năng kết nối tổng hợp.

Nếu điều đó xảy ra thì hãy kiểm tra số cổng khả dụng cho Máy chủ SQL.

Điều đang xảy ra là nếu tính năng tổng hợp bị tắt thì mọi cuộc gọi sẽ mất một cổng và phải mất 4 phút mặc định để cổng hết hạn và bạn đang hết cổng.

Nếu tính năng tổng hợp được bật thì bạn cần phải cấu hình tất cả các cổng của SQL Server và đảm bảo bạn có đủ và mở rộng chúng nếu cần.

Khi tôi gặp lỗi này, tính năng tổng hợp kết nối đã bị tắt và nó gây ra sự cố này bất cứ khi nào có tải trọng tốt trên trang web. Chúng tôi không thấy nó phát triển bởi vì tải trọng là 2 hoặc 3 người ở mức tối đa, nhưng khi số lượng tăng lên trên 10, chúng tôi vẫn thấy lỗi này. Chúng tôi quay lại và cố định nó.

2

Tôi cũng đã gặp nhiều vệ tinh này trước đây. Tuy nhiên, không phải để giảm giá lời giải thích @ Longhorn213s, nhưng chúng tôi đã có hành vi ngược lại chính xác. Chúng tôi đã nhận được lỗi trong quá trình phát triển và thử nghiệm, nhưng không phải sản xuất mà rõ ràng tải trọng lớn hơn nhiều. Chúng tôi đã chịu đựng được vấn đề phát triển vì nó đã rời rạc và không làm chậm tiến trình. Tôi nghĩ rằng có thể có một số lý do cho lỗi này, nhưng không bao giờ có thể pin điểm nguyên nhân bản thân mình.

+0

Như Trumpi gợi ý, tôi đã tìm thấy lỗi này có thể xảy ra đơn giản bằng cách đạp xe máy chủ DB (hoặc bất kỳ thứ gì buộc máy chủ phải giải phóng kết nối).Kết nối vẫn được lưu trữ ở một mức nào đó từ đầu kia (trong phần mềm máy khách, hoặc trong một nhóm) và sau đó trong quá trình sử dụng nó, khám phá ra rằng nó không còn là "lỗi vận chuyển". Vì vậy, nó có thể là vì bạn không khởi động lại máy chủ DB sản xuất của bạn (một điều tốt) và bạn khởi động lại máy chủ DB dev của bạn (những người quan tâm?). – ErikE

0

Tôi đã thấy rằng rất nhiều khi mạng được sôi nổi, hoặc NIC đang trên đường ra. Kiểm tra ngăn xếp mạng của bạn.

0

Chúng tôi đã thấy điều này trong môi trường của chúng tôi và truy tìm một phần của nó xuống gợi ý "NOLOCK" trong các truy vấn của chúng tôi. Chúng tôi đã xóa gợi ý NOLOCK và đặt máy chủ của chúng tôi sử dụng chế độ Cách ly Snapshot và tần suất của các lỗi này đã giảm đi một chút.

1

Chúng tôi cũng đã chạy qua lỗi này và tìm ra rằng chúng tôi đã giết chết một kết nối máy chủ SQL từ máy chủ cơ sở dữ liệu. Ứng dụng khách dưới ấn tượng rằng kết nối vẫn hoạt động và cố gắng sử dụng kết nối đó, nhưng không thành công vì nó đã bị chấm dứt.

0

Chúng tôi đã gặp lỗi này một vài lần và đã thử các độ phân giải khác nhau với sự thành công khác nhau. Một chủ đề cơ bản phổ biến là hệ thống đưa ra lỗi đã hết bộ nhớ. Điều này đặc biệt đúng nếu máy chủ lưu trữ Sql Server đang chạy BẤT CỨ quá trình không phải hệ điều hành khác. Theo mặc định, SQL Server sẽ lấy bất kỳ bộ nhớ nào mà nó có thể, sau đó nếu để lại ít cho các quá trình/trình điều khiển khác. Điều này có thể gây ra hành vi thất thường và các thông báo không liên tục. Thực hành tốt để cấu hình SQL Server của bạn cho một bộ nhớ tối đa để lại một số khoảng không là có các quy trình khác có thể cần đến nó. Ví dụ: Visual Studio trên một máy dev đang chạy một bản sao của phiên bản phát triển SQL Server trên cùng một máy.

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