Consideraciones en el uso de Servidores Vinculados [MSSQL 2008R2]

SQL Server permite que la tarea de traer datos sin importar dónde se encuentren, sea algo muy fácil de hacer.  Y seguramente es algo que los usuarios saben muy bien, porque sin importar la ubicación geográfica ni el tamaño de los datos,  o el ancho de banda de la red ellos quieren sus datos aquí y ahora.

Los servidores vinculados permiten que podamos ejecutar consultas en una instancia local de base de datos y al mismo tiempo podamos traer datos ubicados en otro instancia ubicada físicamente en cualquier lugar del mundo sin complejidad.

La siguiente es una consulta común que se ejecuta en la base de datos

 select c1,c2,c3 from db.schema.tabla 

Y esta una consulta vinculada que trae los datos desde otra instancia.

 select c1,c2,c3 from servidorVinculado.db.schema.tabla 

Traer datos sin importar dónde se encuentren es algo que todos nos vemos tentados a hacer, sin embargo, hay que tener en cuenta que SQL Server podría necesitar algún tipo de ayuda, cómo traer sólo lo estrictamente necesario, y considerar algunas cosas como lo siguiente:

  • Permisos Insuficientes

Como podremos darnos cuenta al leer sobre control de acceso a las estadísticas esta es una de las razones que más afecta el rendimiento de las consultas vinculadas.

Por lo menos en SQL Server 2008 (Algo que se modificó a partir de SQL Server 2012 SP1) un usuario que consulte un objeto sobre la base datos no tiene permisos de lectura sobre las estadísticas a menos que posea permisos de sysadmin, db_owner o db_ddladmin, es decir, si el usuario configurado en la vinculación no tiene dichos permisos, probablemente tengamos un mal desempeño en la ejecución de la consulta vinculada, y si otorgamos los permisos estaríamos sacrificando seguridad por desempeño, una difícil decisión.

  • Ejecución de Join

En el siguiente video Conor Cunningham habla acerca de qué tipos de Join utilizar en diferentes escenarios y en consultas vinculadas.  Por ejemplo, qué hacer si quiero mezclar datos de una tabla local con una tabla más grande ubicada en un servidor remoto.

Algo que aprendemos es que SQL Server necesita de nuestra ayuda, la mejor forma de hacer tus consultas más eficientes es traer sólo lo necesario.

  • Funciones

SQL Server no permite ejecutar algunas funciones de forma remota, como por ejemplo getdate(), y es lógico ya que cada servidor tiene configurada la zona horaria según su ubicación física.

Qué puedo hacer si me doy cuenta de que una consulta vinculada no está funcionando?

  1. Pedirle al DBA revisar la configuración del objeto.
  2. Cerciorarse de que los permisos de la cuenta vinculada sean los que correspondan. (Aquí podría ser necesario recordar algo del apartado permisos insuficientes)

Si todo lo anterior está en orden podemos acudir a la función OpenQuery() que forzara la ejecución de la consulta con los permisos definidos en la configuración. También puede ayudar revisar nuevamente la consulta, revisar los predicados, la existencia de las columnas que estoy trayendo y/o ejecutar la consulta por partes.

 

 

 

Anuncios

Autor: Diego Flores

Diego Flores, DBA en Isapre Nueva Masvida. Concepción, Región del Bio Bio, Chile.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s