Consultas entre bases de datos en Azure SQL Database

Publicado el 15 octubre, 2015

Principal Program Manager Lead, Azure SQL Database

NOTA: El artículo Información general sobre la consulta elástica de base de datos de Azure SQL Database (versión preliminar) contiene la información más actualizada y relevante sobre las consultas elásticas de bases de datos.

Estamos encantados de anunciar una serie de mejoras importantes en la consulta elástica de base de datos de Azure SQL Database. En particular, la funcionalidad de consulta elástica de base de datos permite ahora realizar consultas entre bases de datos de Azure SQL Database. Gracias a esto, son posibles tareas comunes de consulta entre bases de datos, como la selección de contenido de una tabla remota para incluirlo en una tabla local.

Consultas entre bases de datos en Azure SQL Database

También permite topologías de consulta más completas de bases de datos remotas, como la que se muestra en la siguiente imagen, donde una serie de bases de datos necesitan acceder a las tablas de las demás.

Consulta de bases de datos remotas en Azure SQL Database

Esta nueva funcionalidad de consulta entre bases de datos complementa la funcionalidad actual de consulta elástica de base de datos para el particionamiento horizontal, que se muestra en la siguiente imagen.

Particionamiento horizontal
A diferencia de SQL Server en el entorno local, la consulta elástica de base de datos en Azure SQL Database unifica el particionamiento vertical y horizontal bajo un concepto común y la misma área expuesta.

Entre las mejoras de la última actualización de la versión preliminar de la consulta elástica de base de datos, se incluyen las siguientes:

  • Funcionalidad mejorada para situaciones comunes de consultas entre bases de datos que no implican particionamiento.
  • La consulta elástica ya está disponible en los niveles de rendimiento Estándar y Premium.
  • El lenguaje DDL flexible permite ahora representar tablas de bases de datos remotas con alias de nombres de tabla y esquema.
  • Se ha mejorado considerablemente el rendimiento de las consultas que implican parámetros T-SQL cuando hacen referencia a tablas remotas.
  • Mejoras en el rendimiento de las consultas que recuperan grandes cantidades de filas de bases de datos remotas.
  • Compatibilidad con parámetros en el procedimiento sp_execute_fanout.

Lea los siguientes párrafos para conocer los detalles de estas mejoras.

Consulta de bases de datos remotas

La consulta elástica de base de datos proporciona ahora acceso a tablas de instancias remotas de Azure SQL Database a través de una extensión sencilla en el lenguaje DDL para orígenes de datos externos y tablas externas. Puede definir un origen de datos externo que, por ejemplo, proporcione acceso a una base de datos remota donde se almacenan datos de referencia que comparten todas las bases de datos de su capa de datos. También puede copiar fácilmente el contenido de tablas de una base de datos remota en otra usando una instrucción INSERT INTO... SELECT.

Los orígenes de datos externos que hacen referencia a una sola base de datos remota se identifican con la opción RDBMS en la cláusula TYPE de la siguiente instrucción del lenguaje DDL:

CREATE EXTERNAL DATA SOURCE RemoteReferenceData
WITH
(
	TYPE=RDBMS,
	LOCATION='myserver.database.windows.net',
	DATABASE_NAME='ReferenceData',
	CREDENTIAL= SqlUser
);

Según este origen de datos externo, ya puede definir una tabla externa que proporcione acceso remoto a una tabla de códigos postales situada en la base de datos ReferenceData.

CREATE EXTERNAL TABLE [dbo].[zipcode](
	[zc_id] int NOT NULL,
	[zc_cityname] nvarchar(256) NULL,
	[zc_zipcode] nvarchar(20) NOT NULL,
	[zc_country] nvarchar(5) NOT NULL
)
WITH
(
	DATA_SOURCE = RemoteReferenceData
);

Después de esta sencilla tarea de configuración que solo es necesario realizar una vez, sus consultas pueden acceder a la tabla de códigos postales remota de cualquier instancia de Azure SQL Database donde se hayan definido el origen de datos externo y la tabla externa.

Disponibilidad en más niveles de rendimiento

Ahora la consulta elástica de base de datos está disponible también en el nivel de rendimiento Estándar de Azure SQL Database. Esto reduce considerablemente el costo de entrada para escenarios de consultas entre bases de datos y particionamiento en Azure SQL Database. Debido a los límites de DTU más bajos del nivel Estándar, la inicialización de una consulta elástica de base de datos puede tardar hasta un minuto cuando se ejecuta la primera consulta en una base de datos remota. La latencia de la inicialización de las consultas elásticas de bases de datos es algo en lo que estamos trabajando activamente. La experiencia mejorará en los próximos dos meses.

Nomenclatura más flexible

En varios escenarios importantes, es necesario poder dar a la tabla externa un nombre distinto al de la tabla original en la base de datos remota. Un ejemplo son aquellos casos en los que ya existe una tabla local con el mismo nombre que la tabla remota. En esos casos, es necesario poder usar un alias para el nombre de la tabla remota.

Por ejemplo, imagine un escenario en el que desea que la definición de una tabla externa agregue una vista de administración dinámica (DMV) en una capa de datos particionada horizontalmente. Antes, eran necesarias soluciones alternativas complejas, como cambiar el nombre de la vista DMV usando una vista en las bases de datos remotas y haciendo referencia a la vista desde la definición de la tabla externa. Esto era necesario porque los nombres de vistas DMV o de catálogo ya existían en el entorno local y no se podían usar directamente como nombres de tablas externas.

Ahora ya puede usar cualquier nombre para la tabla externa e identificar la tabla remota subyacente con las nuevas cláusulas OBJECT_SCHEMA y OBJECT_NAME en la vista DDL de la tabla externa. De este modo, es fácil realizar consultas en vistas DMV o de catálogo en su capa de datos escalada horizontalmente, como se muestra en el siguiente ejemplo. El siguiente código DDL (lenguaje de definición de datos) lleva a cabo la configuración (una sola vez) del origen de datos externo y la tabla externa. Vea el uso de las cláusulas OBJECT_SCHEMA y OBJECT_NAME en la definición de la tabla externa:

CREATE EXTERNAL DATA SOURCE MyExtSrc
WITH
(
	TYPE=SHARD_MAP_MANAGER,
	LOCATION='myserver.database.windows.net',
	DATABASE_NAME='ShardMapDatabase',
	CREDENTIAL= SMMUser,
	SHARD_MAP_NAME='ShardMap'
);

 

CREATE EXTERNAL TABLE [dbo].[all_dm_exec_requests](
	[session_id] smallint NOT NULL,
	[request_id] int NOT NULL,
	[start_time] datetime NOT NULL, 
	[status] nvarchar(30) NOT NULL,
	[command] nvarchar(32) NOT NULL,
	[sql_handle] varbinary(64),
	[statement_start_offset] int,
	[statement_end_offset] int,
	[cpu_time] int NOT NULL
)
WITH
(
	DATA_SOURCE = MyExtSrc,
	SCHEMA_NAME = 'sys',
	OBJECT_NAME = 'dm_exec_requests',
	DISTRIBUTION=ROUND_ROBIN
);

Ahora puede recuperar las consultas que consumen más recursos en toda la capa de datos con una sencilla consulta elástica de base de datos como la siguiente:

SELECT TOP 10 
	[request_id],
	[start_time]
	[status],
	[command]
FROM all_dm_exec_requests
ORDER BY [cpu_time] DESC

Nueva signatura para sp_execute_fanout

La consulta elástica de base de datos proporciona el procedimiento almacenado sp_execute_fanout para invocar procedimientos almacenados y funciones en bases de datos remotas. Ahora las últimas mejoras de Azure SQL Database alinean la signatura de sp_execute_fanout con la conocida signatura de sp_executesql. Esto permite pasar parámetros SQL regulares a invocaciones de sp_execute_fanout y estará disponible a principios de la semana que viene.

Mejoras en el rendimiento

Antes, la consulta elástica de base de datos no podía insertar operaciones parametrizadas en bases de datos remotas. Como resultado, a veces había que traer innecesariamente al entorno local los conjuntos de filas de gran tamaño para evaluar estas operaciones. Con las últimas mejoras, ahora se pueden insertar las operaciones parametrizadas en bases de datos remotas y se pueden evaluar en modo remoto. Para una consulta en una tabla externa y una tabla local como la siguiente, esto puede evitar ahora la transferencia de millones de filas gracias a la evaluación del filtro selectivo en la cláusula WHERE en la base de datos remota:

DECLARE @low int
DECLARE @high int
SET @low = 100
SET @high = 200

SELECT c.CustomerId, c.Name, count(OrderId) 
FROM remote_customers c
JOIN local_orders o
ON c.CustomerId = o.CustomerId 
WHERE c.CustomerId > @low and c.CustomerId < @high
GROUP BY c.CustomerId, c.Name

Una vista rápida al plan de la consulta anterior confirma que el predicado de rango de CustomerId en la cláusula WHERE lo convirtió correctamente en el operador de consulta remota.

Rendimiento mejorado de las operaciones remotas parametrizadas

Finalmente, también hemos logrado que sea más eficiente la transferencia de grandes cantidades de filas pequeñas con la consulta elástica de base de datos. Nuestras pruebas muestran una mejora del rendimiento de las consultas en tablas externas más de cinco veces superior cuando se transfieren 100 000 filas o más.

Si desea obtener más información acerca de todas las mejoras mencionadas, visite la página de información general de la consulta elástica de base de datos.