SQL Server: ¿Deberíamos usar TCP o Canalizaciones con nombre o usar el predeterminado?

17

Cuando se conecta a un SQL Server 2008 R2 desde una aplicación cliente .NET 4 en un servidor diferente en la misma LAN, se pueden establecer tres protocolos de red diferentes:

  1. TCP
  2. Tubos con nombre
  3. No establezca nada en la cadena de conexión y use el valor predeterminado

¿Cuál es la mejor práctica? Que elegir

Información adicional: tanto TCP como Canalizaciones con nombre están habilitadas tanto en el servidor como en el cliente. La aplicación está utilizando la creación de reflejo de la base de datos. El cliente y el servidor se comunican a través de una LAN rápida.

Estamos investigando esto porque tenemos problemas de conectividad y tiempo de espera poco frecuentes y espurios. (Pero independientemente de eso me gustaría saber la mejor práctica).

Hay un artículo sobre este tema en MSDN pero es muy genérico y vago. No aconseja ni recomienda nada útil.

usr
fuente
2
@ccook, creo que sí. También encontré tcp:configurado como parte de la mayoría de las cadenas de conexión en el entorno de una compañía diferente años más tarde. Supongo que encontraron problemas similares.
usr
1
No tengo la confianza suficiente para publicar eso como respuesta. Sin embargo, es extraño que un problema tan atroz no esté solucionado. Debe ser muy raro o difícil de reproducir. @ccook
usr
1
Es muy poco frecuente y difícil de reproducir para nosotros. Afortunadamente, cuando creamos esa aplicación que genera conexiones simultáneas cada minuto, puede reproducirla de vez en cuando. Todavía es muy impredecible. Sin embargo, estamos probando ese cambio ahora, esperando un tiempo antes de llamarlo fijo. Sin embargo, después de haber investigado esto, definitivamente estoy inclinado a usar tcp: de manera predeterminada, a menos que la aplicación y el servidor estén en la misma máquina.
Cocinar
1
@ccook tuve un nuevo pensamiento. Los archivos compartidos de Windows son notoriamente poco confiables. Muchos errores espurios y fallas de conexión son vistos. Es raro pero difícil / imposible de diagnosticar. Al usar canalizaciones con nombre, ahora incorpora toda esta tecnología a su implementación de SQL Server. Eso parece imprudente en términos generales.
usr
1
convenido. Hasta ahora tcp: parece estar abordando el problema. Sin embargo, estamos esperando un poco para llamarlo confirmado.
Cocinar

Respuestas:

18

Prefiero TCP / IP sobre canalizaciones con nombre, aunque en la mayoría de las situaciones no habrá una diferencia notable. Puede hacerlo ajustando los protocolos admitidos por la instancia en el Administrador de configuración de SQL Server en lugar de codificar las cosas en su cadena de conexión (esto facilita hacer cambios o solucionar problemas).

Esencialmente, el enrutamiento y otros gastos generales involucrados con las canalizaciones con nombre (a menos que sus aplicaciones estén en la misma máquina que SQL Server, en cuyo caso solo hay un poco de sobrecarga adicional) lo convierten en la opción menos eficiente, especialmente a escala, en un entorno de red más lento (100 MB o menos), o si sus cargas de trabajo vienen en ráfagas.

Si sus aplicaciones están en el mismo cuadro que SQL Server, también debe tener en cuenta la memoria compartida: si tiene aplicaciones en el cuadro de SQL Server que se comunican directamente con SQL Server, esta será la opción más eficiente.

Puede leer sobre las ventajas de rendimiento de TCP / IP con más detalle .

Aaron Bertrand
fuente
Por lo tanto, básicamente no importa tanto, pero generalmente es preferible usar TCP porque no hay razones para elegir canalizaciones con nombre. ¿Estaría de acuerdo con ese resumen?
Usr
1
@ usr Bueno, importa cuando escalas, o si tu red apesta. Pero sí, en general, no hay beneficios reales de elegir tuberías con nombre en cualquier caso, que yo sepa.
Aaron Bertrand
7

Los protocolos de canalizaciones con nombre son útiles para la aplicación que están diseñados en torno a NetBIOS u otros protocolos basados ​​en LAN.

Las canalizaciones con nombre proporcionan un fácil acceso a las llamadas a procedimiento remoto (RPC) dentro de un solo dominio de seguridad y, por lo tanto, es ventajoso para estas aplicaciones.

Por lo general, el protocolo TCP es bueno en la práctica porque no tiene que preocuparse por todo esto en la red.

JP Chauhan
fuente