TCP Chimney Offload transfers network traffic workload processing from the CPU to a network adapter that supports TCP Chimney Offload. This feature was introduced with Windows Server 2003 SP2, and it was called the Microsoft Scalable Networking Pack (SNP). Since Windows Server 2008, these features are a base part of these operating systems, so they no longer go by this name. To utilize this feature, the network adapter (and driver) must support this feature, and both the operating system and the network adapter must have this setting enabled.
This feature is not suitable for all applications. Microsoft says (at http://technet.microsoft.com/en-us/library/gg162709%28v=WS.10%29.aspx):
Because of the overhead associated with moving TCP/IP processing to the network adapter, TCP Chimney Offload offers the most benefit to applications that have long-lived connections and transfer large amounts of data. Servers that perform database replication, function as file servers, or perform backup functions are examples of computers that may benefit when you enable TCP Chimney Offload.
With the different operating systems versions, this feature is by default in different states:
|Windows OS||Default state of TCP Chimney Offload|
|Windows Server 2003||enabled|
|Windows Server 2008||disabled|
|Windows Server 2008 R2||automatic|
|Windows Server 2012||disabled|
With all of these changes to the OS, which setting should we use for SQL Server? In general, for all of these operating systems, I recommend that TCP Chimney Offload be disabled – because you can see odd connectivity problems in any other state. Notice in the above quote that Microsoft says that this feature is best used for applications with long-lived connections that transfer large amounts of data – hopefully your OLTP database is performing lots of short-lived connections and they are not transferring large amounts of data (if they are, contact us… we can help you with that!). Some of the error messages that you can encounter are:
[Microsoft][ODBC SQL Server Driver][DBNETLIB] General Network error. Check your network documentation
ERROR [08S01] [Microsoft][SQL Native Client]Communication link failure
System.Data.SqlClient.SqlException: A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 – An existing connection was forcibly closed by the remote host.)
These errors are not exclusive to having problems with the TCP Chimney Offload. Additionally, they may only occur during times of high network load on the server.
To determine the Current TCP Chimney Offload Setting and to Disable it
In typical Microsoft format, this also varies between different operating system versions.
For Windows Server 2003, you need to check the registry. From a DOS command prompt, run:
reg query HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\PARAMETERS /v EnableTCPChimney
If disabled, this will have a value of 0x0; if enabled, it will have a value of 0x1.
To disable, from an elevated DOS command prompt, run:
netsh INT tcp show GLOBAL
netsh INT tcp SET GLOBAL chimney=disabled