Mô tả TCP mà bạn có thể được điều chỉnh khi SQL Server kết nối tổng hợp được kích hoạt

Tóm tắt

Khi bạn sử dụng trình điều khiển SQL Server ODBC, SQL Server OLE DB provider hoặc nhà cung cấp được quản lý System.Data.SqlClient, bạn có thể vô hiệu hoá kết nối tổng hợp bằng cách sử dụng giao diện lập trình ứng dụng tương ứng (API). Khi bạn vô hiệu hoá tổng hợp, nhấn thư viện mạng cơ bản của SQL Server có thể được tăng lên nếu ứng dụng của bạn thường xuyên mở và đóng kết nối. Bài viết này mô tả một số thiết đặt TCP/IP mà bạn có thể điều chỉnh trong các điều kiện.

Thông tin

Tắt tổng hợp có thể gây ra điều khiển mạng cơ bản SQL Server để nhanh chóng mở và đóng mới cắm kết nối với máy tính đang chạy SQL Server. Bạn có thể phải thay đổi thiết đặt mặc định cổng TCP/IP cho hệ điều hành và máy tính đang chạy SQL Server để xử lý cấp áp lực cao.

Lưu ý rằng bài viết này chỉ thảo luận về thiết đặt có ảnh hưởng đến các thư viện mạng SQL Server khi bạn sử dụng giao thức TCP/IP. Tắt tổng hợp cũng có thể gây ra sự cố liên quan đến áp lực với giao thức SQL Server khác như đường ống được đặt tên, nhưng bài viết này thảo luận các chủ đề này. Bài viết này là dành cho người dùng chuyên sâu. Nếu bạn không hiểu các chủ đề trong bài viết này, Microsoft khuyên bạn xem sách tốt về khe cắm TCP/IP.

Lưu ý rằng Microsoft thực sự khuyên bạn luôn sử dụng tổng hợp với các trình điều khiển máy chủ SQL. Sử dụng tổng hợp rất nhiều cải thiện hiệu năng tổng thể phía máy khách và máy chủ SQL phía khi bạn sử dụng trình điều khiển máy chủ SQL. Sử dụng tổng hợp cũng đáng kể làm giảm lưu lượng mạng máy tính đang chạy SQL Server. Ví dụ: kiểm tra mẫu sử dụng 20.000 SQL Server kết nối mở và đóng với tổng hợp cho phép sử dụng khoảng 160 TCP/IP mạng gói, tổng cộng 23,520 byte mạng hoạt động. Với tổng hợp vô hiệu hoá, kiểm tra mẫu cùng tạo 225,129 TCP/IP mạng gói, một số 27,209,622 byte mạng hoạt động.

Lưu ý rằng khi bạn thấy những áp lực liên quan đến TCP/IP cổng vấn đề với thư viện mạng SQL Server, bạn có thể nhận được một hoặc nhiều thông báo lỗi sau khi bạn cố gắng kết nối với máy tính đang chạy SQL Server:

SQL Server không tồn tại hoặc truy cập bị từ chối

Thời gian chờ hết hạn

Lỗi mạng chung

TCP cung cấp: Chỉ sử dụng từng địa chỉ cổng (giao thức/mạng địa chỉ/cổng) thường được cho phép.

Lưu ý rằng bạn cũng có thể nhận được các thông báo lỗi cụ thể khi các vấn đề đang xảy ra với SQL Server; Ví dụ: bạn có thể nhận được thông báo lỗi này nếu máy tính từ xa đang chạy SQL Server được tắt nếu máy tính từ xa đang chạy SQL Server không nghe khe cắm TCP/IP, nếu mạng kết nối với máy tính đang chạy SQL Server rồi vì cáp mạng được kéo ra hoặc nếu bạn đang gặp các vấn đề về độ phân giải DNS. Về cơ bản bất cứ thứ gì có thể khiến khách hàng không thể mở một cổng TCP/IP cho máy tính đang chạy SQL Server cũng có thể gây ra các thông báo lỗi. Tuy nhiên, có một vấn đề liên quan đến áp lực ổ cắm, sự cố xảy ra liên tục nhấn mạnh tăng và rơi. Máy tính có thể mất giờ không có lỗi, sau đó lỗi xảy ra một hoặc hai lần và máy tính sau đó chạy một số nhiều giờ không có lỗi. Ngoài ra, khi bạn gặp sự cố này, chung kết nối với SQL Server làm việc ngay lập tức một, không thành công sau, sau đó hoạt động lại ngay lập tức sau. Nói cách khác, các vấn đề liên quan đến áp lực khe cắm thường xảy ra sporadically, nhưng thực sự cố kết nối mạng với SQL Server thường xảy ra sporadically.

Hai vấn đề liên quan đến áp lực chính thường xảy ra khi bạn vô hiệu hoá tổng hợp khi bạn sử dụng giao thức SQL Server TCP/IP: bạn có thể chạy trên cổng vô danh trên máy tính hoặc bạn có thể vượt quá WinsockListenBacklog mặc định cài đặt trên máy tính đang chạy SQL Server.


Để biết thêm thông tin về cổng vô danh, bấm số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:

319502 PRB: 'WSAEADDRESSINUSE' thông báo lỗi khi bạn cố gắng kết nối qua một cổng vô danh sau khi bạn tăng giới hạn kết nối IMAP

Điều chỉnh cài đặt MaxUserPort và TcpTimedWaitDelay

Lưu ý rằng các cài đặt MaxUserPort và TcpTimedWaitDelay được áp dụng cho máy khách nhanh chóng mở và đóng kết nối với máy tính từ xa đang chạy SQL Server và không sử dụng kết nối tổng hợp. Ví dụ: các thiết đặt được áp dụng trên một máy chủ Dịch vụ thông tin Internet (IIS) đã phục vụ nhiều yêu cầu HTTP đến và được mở và đóng kết nối với máy tính từ xa đang chạy SQL Server và đã sử dụng giao thức TCP/IP tổng hợp vô hiệu hoá. Nếu tổng hợp được bật, bạn không cần phải điều chỉnh thiết đặt MaxUserPort và TcpTimedWaitDelay .

Khi bạn sử dụng giao thức TCP/IP để mở kết nối với máy tính đang chạy SQL Server, thư viện mạng SQL Server cơ bản mở cổng TCP/IP cho máy tính đang chạy SQL Server. Khi mở ra khe cắm này, thư viện mạng SQL Server không bật tuỳ chọn khe cắm TCP/IP SO_REUSEADDR . Để biết thêm thông tin về cài đặt ổ cắm SO_REUSEADDR , xem chủ đề "Setsockopt" trong Microsoft Developer Network (MSDN).


Lưu ý rằng thư viện mạng SQL Server cụ thể không cho phép tùy chọn cổng SO_REUSEADDR TCP/IP vì lý do bảo mật. Khi SO_REUSEADDR được kích hoạt, người dùng nguy hiểm có thể cướp cổng khách hàng SQL Server và sử dụng thông tin khách hàng cung cấp để truy nhập vào máy tính đang chạy SQL Server. Theo mặc định, vì thư viện mạng SQL Server không bật tuỳ chọn ổ cắm SO_REUSEADDR , mỗi lần bạn mở và đóng một ổ cắm qua thư viện mạng SQL Server ở phía khách hàng, ổ cắm vào tình trạng TIME_WAIT bốn phút. Nếu bạn đang nhanh chóng mở và đóng kết nối SQL Server qua TCP/IP với tổng hợp vô hiệu hoá, bạn nhanh chóng mở và đóng khe cắm TCP/IP. Nói cách khác, mỗi kết nối SQL Server có một khe cắm TCP/IP. Nếu bạn nhanh chóng mở và đóng 4000 socket trong vòng bốn phút, bạn sẽ đạt được mặc định cài đặt tối đa cho khách hàng vô danh cổng và cố gắng kết nối ổ mới không thành công đến hiện tại nhóm TIME_WAIT socket hết thời gian.

Phía máy khách, bạn có thể phải tăng MaxUserPort và TcpTimedWaitDelay các thiết đặt được thảo luận trong Q319502 khi bạn đã vô hiệu hoá tổng hợp. Cài đặt các giá trị được xác định bởi số lượng các kết nối SQL Server mở và đóng lại xảy ra ở phía máy khách. Bạn có thể kiểm tra bao nhiêu cổng khách hàng đang ở trạng thái TIME_WAIT bằng cách sử dụng công cụ Netstat trên máy. Chạy công cụ Netstat với cờ -n như sau và đếm số khe cắm máy khách địa chỉ IP máy chủ SQL của bạn trong một TIME_WAIT trạng thái. Trong ví dụ này, địa chỉ IP của máy tính từ xa đang chạy SQL Server là 10.10.10.20, địa chỉ IP của máy khách là 10.10.10.10 và ba thiết lập hai kết nối và kết nối đang ở trạng thái TIME_WAIT:

C:\>netstat -n
Active Connections

Proto Local Address Foreign Address State
TCP 10.10.10.10:2000 10.10.10.20:1433 ESTABLISHED
TCP 10.10.10.10:2001 10.10.10.20:1433 ESTABLISHED
TCP 10.10.10.10:2002 10.10.10.20:1433 ESTABLISHED
TCP 10.10.10.10:2003 10.10.10.20:1433 TIME_WAIT
TCP 10.10.10.10:2004 10.10.10.20:1433 TIME_WAIT

Nếu bạn chạy netstat -n và bạn thấy rằng gần 4000 kết nối vào địa chỉ IP của máy tính đích đang chạy SQL Server đang ở trạng thái TIME_WAIT, bạn có thể cả tăng thiết đặt mặc định MaxUserPort và giảm thiết lập TcpTimedWaitDelay để bạn không chạy trên cổng khách hàng vô danh. Ví dụ: bạn có thể đặt thiết đặt MaxUserPort 20000 và đặt thiết đặt TcpTimedWaitDelay 30. Thiết lập TcpTimedWaitDelay thấp hơn có nghĩa là các ổ cắm chờ ở trạng thái TIME_WAIT ít thời gian. Thiết lập MaxUserPort cao có nghĩa là bạn có thể có thêm ổ cắm bang TIME_WAIT.

Lưu ý rằng nếu bạn điều chỉnh thiết đặt MaxUserPort hoặc TcpTimedWaitDelay , bạn phải khởi động Microsoft Windows để cài đặt mới có hiệu lực. Cài đặt MaxUserPort và TcpTimedWaitDelay cho bất kỳ máy nói chuyện với máy tính đang chạy SQL Server qua khe cắm TCP/IP. Các thiết đặt này không có hiệu lực nếu chúng được đặt trên máy tính đang chạy SQL Server nếu bạn đang làm cục bộ cổng kết nối với máy tính đang chạy SQL Server.

Lưu ý Nếu bạn điều chỉnh cài đặt MaxUserPort , chúng tôi khuyên bạn đặt cổng 1434 để sử dụng dịch vụ trình duyệt máy chủ SQL (sqlbrowser.exe). Để biết thêm thông tin về cách thực hiện việc này, bấm vào số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:

Làm thế nào để đặt một loạt các cổng không lâu trên máy tính đang chạy Windows Server 2003 hoặc Windows 2000 Server 812873

Điều chỉnh cài đặt WinsockListenBacklog

Để biết thêm thông tin về SQL Server cụ thể thiết đặt đăng ký này, bấm số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:

154628 INF: SQL ghi 17832 với nhiều yêu cầu kết nối TCP\IP
Khi thư viện mạng SQL Server lắng nghe trên khe cắm TCP/IP, thư viện mạng SQL Server sử dụng máy nghe Winsock API. Tham số thứ hai để máy nghe API là tồn đọng được phép cho ổ cắm. Tồn đọng này thể hiện chiều dài tối đa của hàng đợi chờ kết nối cho nghe. Khi chiều dài hàng đợi vượt quá độ dài tối đa này, thư viện mạng SQL Server ngay lập tức loại bỏ cố gắng kết nối TCP/IP khe cắm thêm. Ngoài ra, thư viện mạng SQL Server gửi một gói dữ liệu ACK + lại.

Sử dụng SQL Server 2000 một mặc định nghe tồn đọng thiết lập 5. Điều này có nghĩa là máy tính đang chạy SQL Server đi 5 giá trị tham số tồn đọng của nghe Winsock API khi máy nghe API thiết lập giao thức TCP/IP nghe chủ đề trên máy tính đang chạy SQL Server. Bạn có thể điều chỉnh WinsockListenBacklog khoá đăng ký để xác định một giá trị khác được chuyển cho tham số này. Khởi động SQL Server 2005, thư viện mạng đi giá trị của SOMAXCONN là cài đặt tồn đọng máy nghe API. SOMAXCONN cho phép nhà cung cấp Winsock đặt giá trị hợp lý tối đa cho thiết đặt này. Do đó, khoá đăng ký WinsockListenBacklog không sử dụng hoặc trong SQL Server 2005.

Tồn đọng đặt hoạt động như sau: giả sử một dịch vụ bất kỳ nghe cho yêu cầu khe cắm TCP/IP đến. Nếu bạn đặt thiết đặt tồn đọng 5 và nhiều yêu cầu kết nối ổ cắm liên tục trực tuyến trong dịch vụ không thể đáp ứng các yêu cầu đến nhanh như họ có. Tại thời điểm này, lớp cổng TCP/IP hàng đợi các yêu cầu đến hàng tồn đọng và dịch vụ có thể sau đó kéo các yêu cầu trong hàng đợi này và xử lý yêu cầu kết nối đến khe cắm. Sau khi hàng đợi đầy lên, lớp cổng TCP/IP ngay lập tức loại bỏ bất kỳ yêu cầu các khe cắm đến bằng cách gửi một gói dữ liệu ACK + RESET lại cho khách hàng. Tăng tăng kích thước hàng tồn đọng số đang chờ xử lý ổ cắm kết nối yêu cầu lớp cổng TCP/IP hàng đợi trước khi yêu cầu bị từ chối.

Lưu ý rằng thiết đặt WinsockListenBacklog dành riêng cho SQL Server. SQL Server cố đọc thiết đặt đăng ký này khi lần đầu tiên khởi động dịch vụ SQL Server. Nếu thiết đặt không tồn tại, mặc định 5 được sử dụng. Nếu thiết đặt đăng ký, SQL Server đọc cài đặt và sử dụng giá trị được cung cấp thiết đặt tồn đọng khi WinSock API nghe được gọi là như chủ đề nghe khe cắm TCP/IP được đặt lên trong SQL Server.

Để xác định xem bạn đang chạy vào vấn đề này, bạn có thể chạy theo dõi giám sát mạng trên máy khách hoặc máy tính đang chạy SQL Server và tìm kiếm yêu cầu kết nối ổ cắm ngay lập tức bị từ chối với ACK + lại. Nếu bạn kiểm tra gói TCP/IP ng, bạn thấy một gói như sau khi sự cố này xảy ra:

Frame: Base frame propertiesETHERNET:  EType = Internet IP (IPv4) 
IP: Protocol = TCP - Transmission Control; Packet ID = 40530; Total IP Length = 40; Options = No Options
TCP: Control Bits: .A.R.., len: 0, seq: 0-0, ack:3409265780, win: 0, src: 1433 dst: 4364
TCP: Source Port = 0x0599
TCP: Destination Port = 0x110C
TCP: Sequence Number = 0 (0x0)
TCP: Acknowledgement Number = 3409265780 (0xCB354474)
TCP: Data Offset = 20 bytes
TCP: Flags = 0x14 : .A.R..
TCP: ..0..... = No urgent data
TCP: ...1.... = Acknowledgement field significant
TCP: ....0... = No Push function
TCP: .....1.. = Reset the connection
TCP: ......0. = No Synchronize
TCP: .......0 = Not the end of the data
TCP: Window = 0 (0x0)
TCP: Checksum = 0xF1E7
TCP: Urgent Pointer = 0 (0x0)

Lưu ý rằng cổng nguồn 0x599 hoặc 1433 trong thập phân. Điều này có nghĩa gói đến từ một máy tính thông thường đang chạy SQL Server và đang chạy trên cổng mặc định của 1433. Lưu ý rằng nhận trường quan trọng và cờ lại kết nối được thiết lập. Nếu bạn đã quen với lọc theo dõi giám sát mạng, bạn có thể lọc giá trị TCP cờ theo 0x14 hệ thập lục phân để xem chỉ gói ACK + lại trong theo dõi giám sát mạng.

Lưu ý rằng bạn cũng có thể thấy tương tự như gói ACK + lại nếu máy tính đang chạy SQL Server không chạy tất cả hoặc nếu máy tính đang chạy SQL Server không nghe giao thức TCP/IP để xem gói dữ liệu ACK + lại không rõ ràng xác nhận rằng bạn đang gặp sự cố này. Nếu WinsockListenBacklog quá thấp, kết nối một số lần nhận được chấp nhận gói và một số kết nối ngay lập tức nhận được gói dữ liệu ACK + lại trong cùng một khoảng thời gian.

Lưu ý rằng rất hiếm, bạn có thể điều chỉnh thiết đặt này ngay cả khi tổng hợp được bật trên máy khách. Ví dụ: nếu nhiều máy khách đang nói chuyện với một máy tính đang chạy SQL Server, nhiều cố gắng kết nối đến đồng thời có thể xảy ra bất kỳ lúc nào cụ thể ngay cả khi tổng hợp được kích hoạt.

Lưu ý Nếu bạn điều chỉnh cài đặt WinsockListenBacklog , bạn không phải khởi động lại Windows để cài đặt này có hiệu lực. Chỉ cần dừng và khởi động lại dịch vụ SQL Server để thiết đặt có hiệu lực. Cài đặt đăng ký WinsockListenBacklog là chỉ dành cho máy tính đang chạy SQL Server. Không có hiệu lực trên bất kỳ máy nói chuyện với SQL Server.

Vấn đề với các máy khách và máy chủ thư viện mạng SQL Server, hãy xem nhóm WebData phát triển hỗ trợ.

Tác giả: mattn (2002-08-24T16:53:00) biên tập chỉnh sửa: V-SYLVAN (2002-09-10T21:36:00) biên tập kỹ thuật: KOUSHIKD (2002-08-27T12:59:00)

Bạn cần thêm trợ giúp?

Phát triển các kỹ năng của bạn
Khám phá nội dung đào tạo
Sở hữu tính năng mới đầu tiên
Tham gia Microsoft dùng nội bộ

Thông tin này có hữu ích không?

Bạn hài lòng đến đâu với chất lượng dịch thuật?

Điều gì ảnh hưởng đến trải nghiệm của bạn?

Bạn có góp ý gì thêm không? (Không bắt buộc)

Cảm ơn phản hồi của bạn!

×