2015-03-10 13 views
10

Tôi nhận thấy rằng có sự khác biệt đáng chú ý giữa kích thước gói mạng mặc định trong lớp SqlConnection của .NET và mặc định trong SQL Server.Sự khác biệt về kích thước gói mạng mặc định: Mặc định SqlConnection và SQL Server

Đối với SqlConnection lớp PacketSize tài sản, mỗi this link:

Kích thước (tính theo byte) của các gói dữ liệu mạng. Giá trị mặc định là 8000.

Trong các phiên bản trước của bài viết đó, đề cập đến (tất cả cách quay lại .NET 1.1) mặc định là 8192 byte. Tuy nhiên, đối với SQL Server (mỗi this link):

Kích thước gói mặc định là 4.096 byte.

Từ bài viết đó dường như đó là mặc định vì ít nhất SQL Server 2005. Có ai biết lý do cho sự khác biệt này giữa chúng không?

CẬP NHẬT: Để thêm nhiều niềm vui hơn cho câu hỏi này, tôi đã nói chuyện với Thomas LaRock (ai xảy ra là SQL MVP) và ông đã đề cập với tôi rằng trong SQL Server 2000, kích thước gói mạng mặc định là , 8192 byte (như .NET 1.1!). Mặc dù vậy, nó đã bị thay đổi trong các phiên bản sau, vì có bao nhiêu phân mảnh nó gây ra, đòi hỏi phải khởi động lại máy chủ hàng tuần.

Vậy tại sao SQL Server giảm một nửa, nhưng .NET chỉ giảm 192 byte? Có điều gì đó buộc SQL Server chỉ sử dụng bội số của 2 cho điều này?

+0

phân mảnh của cái gì? –

+0

Rất tiếc, tôi không nghĩ bạn sẽ tìm thấy câu trả lời hay nhất ở đây. Mục đích của câu hỏi là gì? Kiến thức cá nhân lịch sử/Fokeloric? Các kích thước này được đặt dựa trên Có lẽ tốt nhất trong hầu hết các trường hợp. Nếu bạn đang thực hiện tải lên LỚN bằng cách sử dụng giá trị lớn hơn thì tốt hơn (xem ra MTU mạng). Tôi chỉ có thể hỏi những câu hỏi có thể làm sáng tỏ câu trả lời thực sự. – ripvlan

Trả lời

0

Điều này luôn xảy ra. Ngay cả trong SQL 7.0 và SQL Server 2000, default value was 4096 bytes.

Các problem xảy ra khi bạn cố gắng sử dụng một bộ nhớ mạng cao hơn 8060 byte vì nó sẽ đòi hỏi SQL Server để cấp phát bộ nhớ từ một vùng bộ nhớ mà sử dụng một kích thước 384 MB.

Rất dễ dàng để sửa đổi kích thước gói từ phía ứng dụng khách. Trong chuỗi kết nối, bạn chỉ cần đặt packet size=4096.

Không được khuyến khích kích thước mạng mặc định trên máy chủ đang chạy SQL Server, trừ khi bạn đang thực hiện việc nâng cấp nặng bằng SSIS hoặc ứng dụng của bạn đang thực hiện thao tác sao chép hàng loạt, gửi và nhận dữ liệu BLOB.

Lưu ý rằng SybaseASE sử dụng 512 byte như kích thước gói tin mặc định, vì vậy SQL Server 6.5 có thể có mà đặt như mặc định (nhưng tôi không có tài liệu tham khảo để trích dẫn nếu đó là trường hợp cho SQL 6.5).

Tham khảo: Network Packet Size: to Fiddle With or Not to Fiddle With

+0

Tôi hiểu rằng, nhưng tôi tự hỏi tại sao. Net có nó khác với sql cơ bản. – IronMan84

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