Acceso a tablas con optimización para memoria mediante Transact-SQL interpretado

Se aplica a:SQL ServerAzure SQL Database

Con unas pocas excepciones, se puede acceder a las tablas optimizadas para la memoria mediante cualquier consulta de Transact-SQL u operación DML (select, insert, update o delete), lotes ad hoc y módulos SQL como procedimientos almacenados, funciones de valores de tabla, desencadenadores y vistas.

Transact-SQL interpretado hace referencia a procedimientos almacenados o lotes de Transact-SQL distintos de un procedimiento almacenado compilado de forma nativa. El acceso de Transact-SQL interpretado a las tablas optimizadas para memoria se conoce como acceso de interoperabilidad.

A partir de SQL Server 2016 (13.x), las consultas en Transact-SQL interpretado pueden examinar tablas optimizadas para la memoria en paralelo, en lugar de hacerlo solo en serie.

También se puede tener acceso a las tablas con optimización para memoria mediante un procedimiento almacenado compilado de forma nativa. Los procedimientos almacenados compilados de forma nativa se recomiendan para las operaciones OLTP donde el rendimiento es un factor crítico.

El acceso interpretado de Transact-SQL se recomienda en estos casos:

  • Consultas ad hoc y tareas administrativas.

  • Consultas de notificación, que suelen usar construcciones no disponibles en los procedimientos almacenados compilados de forma nativa (como funciones de ventana , a las que a veces se hace referencia como funciones OVER ).

  • Para migrar componentes esenciales para el rendimiento de su aplicación a tablas optimizadas para memoria, con cambios mínimos en el código de la aplicación (o sin ningún cambio). Puede ver mejoras en el rendimiento si se migran las tablas. Si después migra los procedimientos almacenados a procedimientos almacenados compilados de forma nativa, puede ver una mejora adicional del rendimiento.

  • Cuando no hay disponible una instrucción de Transact-SQL para los procedimientos almacenados compilados de forma nativa.

Sin embargo, las construcciones de Transact-SQL siguientes no se admiten en procedimientos almacenados de Transact-SQL interpretado que tienen acceso a datos de una tabla optimizada para memoria.

Área No compatible
Acceso a tablas TRUNCATE TABLE

MERGE (tabla optimizada para memoria como destino).

Cursores dinámicos y cursores de conjunto de claves (estos se degradan automáticamente a estáticos).

Acceso desde módulos CLR mediante la conexión de contexto.

Referencia a una tabla optimizada para memoria desde una vista indexada.
A través de bases de datos Consultas entre bases de datos

Transacciones entre bases de datos

Servidores vinculados

Sugerencias de tabla

Para obtener más información acerca de las sugerencias de tabla, vea: Sugerencias de tabla (Transact-SQL). Se añadió SNAPSHOT para ofrecer compatibilidad con In-Memory OLTP.

Las siguientes sugerencias de tabla no se admiten cuando se obtiene acceso a una tabla optimizada para memoria mediante Transact-SQL interpretado.

HOLDLOCK

PAGLOCK

READUNCOMMITTED

TABLOCKXX

IGNORE_CONSTRAINTS

READCOMMITTED

ROWLOCK

UPDLOCK

IGNORE_TRIGGERS

READCOMMITTEDLOCK

SPATIAL_WINDOW_MAX_CELLS = entero

XLOCK

NOWAIT

READPAST

TABLOCK

Al tener acceso a una tabla optimizada para memoria desde una transacción explícita o implícita con Transact-SQL interpretado, debe hacer al menos una de las siguientes acciones:

No es necesaria una sugerencia de tabla de nivel de aislamiento para las tablas optimizadas para memoria a las que acceden las consultas que se ejecutan en modo de confirmación automática.