Uso de OLTP en memoria en Azure SQL Database para mejorar el rendimiento de la aplicación
Se aplica a: Azure SQL Database
OLTP en memoria puede utilizarse para mejorar el rendimiento del procesamiento de transacciones, la ingesta de datos y los escenarios de datos transitorios, sin aumentar el objetivo de servicio de la base de datos o del grupo elástico.
- Las bases de datos y los grupos elásticos de los niveles de servicio Premium (DTU) y Crítico para la empresa (núcleo virtual) admiten OLTP en memoria.
- El nivel de servicio Hiperescala admite un subconjunto de objetos OLTP en memoria, pero no incluye tablas optimizadas para memoria. Para obtener más información consulte Limitaciones de hiperescala.
Siga estos pasos para comenzar a usar OLTP en memoria en las base de datos existentes.
Paso 1: Asegúrese de que está utilizando una base de datos de nivel Prémium o Crítico para la empresa
OLTP en memoria se admite si el resultado de la consulta siguiente es 1
(no 0
):
SELECT DATABASEPROPERTYEX(DB_NAME(), 'IsXTPSupported');
XTP significa Procesamiento extremo de transacciones, que es un nombre informal de la característica OLTP en memoria.
Paso 2: Identifique los objetos para migrar a OLTP en memoria
SQL Server Management Studio (SSMS) incluye un informe de Información general del análisis de rendimiento de transacciones que se pueden ejecutar en una base de datos con una carga de trabajo activa. El informe identifica las tablas y los procedimientos almacenados que son candidatos para la migración a In-Memory OLTP.
Para generar el informe en SSMS:
- En el Explorador de objetos, haga clic con el botón derecho en el nodo de la base de datos.
- Haga clic en Informes>Informes estándar>Información general de análisis de rendimiento de transacciones.
Para obtener más información sobre la evaluación de las ventajas de OLTP en memoria, consulte Determinar si una tabla o un procedimiento almacenado se debe pasar a OLTP en memoria.
Paso 3: Cree una base de datos de prueba comparable
Supongamos que el informe indica que la base de datos tiene una tabla que se beneficiaría de convertirse en una tabla optimizada para memoria. Se recomienda que la pruebe primero para confirmar la indicación.
Necesitará una copia de prueba de la base de datos de producción. La base de datos de prueba debe estar en el mismo nivel de servicio que la base de datos de producción.
Para facilitar las pruebas, ajuste la base de datos de prueba de la forma siguiente:
Conectarse a la base de datos de prueba mediante SQL Server Management Studio (SSMS).
Para evitar la necesidad de usar la opción
WITH (SNAPSHOT)
en las consultas, establezca la opciónMEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT
actual de la base de datos tal como se muestra en la siguiente instrucción T-SQL:ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON;
Paso 4: Migre las tablas
Debe crear y rellenar una copia optimizada para memoria de la tabla que desea probar. Se puede crear mediante:
Asistente para optimización de memoria en SSMS
Para usar esta opción de migración:
Conéctese a la base de datos de prueba con SSMS.
En el Explorador de objetos, haga clic con el botón derecho en la tabla y después seleccione Asistente de optimización de memoria.
Se muestra el asistente Asesor del optimizador de memoria de tablas .
En el asistente, seleccione Validación de migración (o el botón Siguiente) para ver si la tabla tiene las características no admitidas en las tablas optimizadas para memoria. Para más información, vea:
- La lista de comprobación de optimización de memoria en Asesor de optimización de memoria.
- Construcciones de transact-SQL no admitidas por In-Memory OLTP.
- Migración a In-Memory OLTP.
Si la tabla no tiene características no admitidas, el asesor puede realizar el esquema real y la migración de datos.
T-SQL manual
Para usar esta opción de migración:
- Conéctese a la base de datos de prueba con SSMS.
- Obtenga el script T-SQL completo para la tabla y sus restricciones e índices.
- En SSMS, haga clic con el botón derecho en el nodo de tabla.
- Seleccione Incluir tabla como>Crear en>Nueva ventana de consulta.
- En la ventana de script, agregue
WITH (MEMORY_OPTIMIZED = ON)
a la instrucciónCREATE TABLE
. Para obtener más información, vea Sintaxis de tablas optimizadas para memoria. - Si hay un índice CLUSTERD, cámbielo a NONCLUSTERED.
- Cambie el nombre de la tabla existente mediante sp_rename.
- Cree la nueva copia de la tabla optimizada para memoria mediante la ejecución del script
CREATE TABLE
editado. - Copie los datos en la tabla optimizada en memoria mediante
INSERT...SELECT * INTO
:INSERT INTO [<new_memory_optimized_table>] SELECT * FROM [<old_disk_based_table>];
Paso 5 (opcional): Migre los procedimientos almacenados
OLTP en memoria también admite procedimientos almacenados compilados de forma nativa, que pueden mejorar el rendimiento de T-SQL.
Consideraciones con procedimientos almacenados compilados de forma nativa
Un procedimiento almacenado compilado de forma nativa debe tener las siguientes opciones en su cláusula WITH
de T-SQL:
- NATIVE_COMPILATION: significa que las instrucciones Transact-SQL del procedimiento se compilan en código nativo para una ejecución eficaz.
- SCHEMABINDING: significa que las definiciones de las tablas a las que se hace referencia en el procedimiento almacenado no se pueden modificar de ningún modo que afecte al procedimiento almacenado, a menos que excluya el procedimiento almacenado.
Un módulo con compilación nativa debe usar un bloque ATOMIC para la administración de transacciones. No hay ningún uso de instrucciones BEGIN TRANSACTION
o ROLLBACK TRANSACTION
explícitas. El código puede finalizar el bloque ATOMIC con una instrucción THROW, por ejemplo, si detecta una infracción de una regla de negocio.
Ejemplo de procedimiento almacenado compilado de forma nativa
El T-SQL para crear un procedimiento almacenado compilado de forma nativa es similar a la siguiente plantilla:
CREATE PROCEDURE schemaname.procedurename
@param1 type1, ...
WITH NATIVE_COMPILATION, SCHEMABINDING
AS
BEGIN ATOMIC WITH
(
TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'<desired sys.syslanuages.sysname value>'
)
...
END;
- Para
TRANSACTION_ISOLATION_LEVEL
,SNAPSHOT
es el valor más común para los procedimientos almacenados compilados de forma nativa. Sin embargo, también se admite un subconjunto de los demás valores:REPEATABLE READ
SERIALIZABLE
- El valor
LANGUAGE
debe estar presente en la vistasys.syslanguages
, en la columnaname
. Por ejemplo,N'us_english'
.
Instrucciones para migrar un procedimiento almacenado para que use la compilación nativa
Los pasos de migración son los siguientes:
- Obtenga el script
CREATE PROCEDURE
para el procedimiento almacenado regular (interpretado). - Vuelva a escribir el encabezado para que coincida con la plantilla anterior.
- Determine si el código T-SQL del procedimiento almacenado usa las características que no se admiten para los procedimientos almacenados compilados de forma nativa. Implemente soluciones alternativas si es necesario. Para obtener más información, consulte Problemas de migración para los procedimientos almacenados compilados de forma nativa.
- Cambie el nombre del procedimiento almacenado anterior por sp_rename o exclúyalo.
- Ejecute el script T-SQL
CREATE PROCEDURE
editado.
Paso 6: Ejecute la carga de trabajo en la prueba
Ejecutar una carga de trabajo en la base de datos de prueba es similar a la carga de trabajo que se ejecuta en la base de datos de producción. Esto debería mostrar la mejora del rendimiento conseguida mediante el uso de OLTP en memoria para tablas y procedimientos almacenados.
Los atributos principales de la carga de trabajo son los siguientes:
- Número de conexiones simultáneas.
- Relación de lectura/escritura.
Para adaptar y ejecutar la carga de trabajo de prueba, considere la posibilidad de usar la herramienta ostress.exe
del grupo de herramientas Utilidades de RML. Para obtener más información, consulte Ejemplo en memoria de Azure SQL Database.
Para minimizar la latencia de red, ejecute ostress.exe
en la misma región de Azure que la base de datos.
Paso 7: Supervise después de la implementación
Considere la posibilidad de supervisar los efectos de rendimiento de implementar OLTP en memoria en producción:
- Supervisión del almacenamiento de OLTP en memoria.
- Supervisión mediante vistas de administración dinámica.