Encuesta de áreas iniciales de OLTP en memoriaSurvey of Initial Areas in In-Memory OLTP

Se aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL DatabaseSe aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database

Este artículo está destinado a los desarrolladores que necesitan aprender rápidamente los conceptos básicos de las características de rendimiento de OLTP en memoria de Microsoft SQL Server y Base de datos SQL de Azure.This article is for the developer who is in a hurry to learn the basics of the In-Memory OLTP performance features of Microsoft SQL Server and Azure SQL Database.

Para OLTP en memoria, este artículo incluye lo siguiente:For In-Memory OLTP, this article provides the following:

  • Breves explicaciones de las características.Quick explanations of the features.
  • Ejemplos de código principal que implementan las características.Core code samples that implement the features.

SQL Server y Base de datos SQL presentan solo pequeñas variaciones en su compatibilidad con tecnologías en memoria.SQL Server and SQL Database have only minor variations in their support of In-Memory technologies.

En su ámbito, algunos blogueros hacen referencia a las características de OLTP en memoria como Hekaton.In the wild some bloggers refer to the In-Memory OLTP as Hekaton.

Ventajas de las características en memoriaBenefits of In-Memory Features

SQL Server proporciona características en memoria que pueden mejorar considerablemente el rendimiento de muchos sistemas de aplicaciones.SQL Server provides In-Memory features that can greatly improve the performance of many application systems. En esta sección se describen las consideraciones más sencillas.The most straight forward considerations are described in this section.

Características de OLTP (procesamiento de transacciones en línea)Features for OLTP (Online Transactional Processing)

Los sistemas que deben procesar simultáneamente grandes cantidades de instrucciones INSERT de SQL son los candidatos perfectos para las características de OLTP.Systems which must processes large numbers of SQL INSERTs concurrently are excellent candidates for the OLTP features.

  • Nuestras pruebas comparativas muestran que la velocidad se puede multiplicar entre 5 y 20 veces con la adopción de las características en memoria.Our benchmarks show that speed improvements from 5 times to 20 times faster are achievable by adoption of the In-Memory features.

Los sistemas que procesan cálculos intensivos en Transact-SQL son candidatos ideales.Systems which process heavy calculations in Transact-SQL are excellent candidates.

  • Un procedimiento almacenado que se dedica a cálculos intensivos se puede ejecutar hasta 99 veces más rápido.A stored procedure that is dedicated to heavy calculations can run up to 99 times faster.

Más tarde tal vez le interese visitar los siguientes artículos, que ofrecen demostraciones de las mejoras de rendimiento de OLTP en memoria:Later you might visit the following articles which offer demonstrations of performance gains from In-Memory OLTP:

Características de análisis operativoFeatures for Operational Analytics

El análisis en memoria hace referencia a instrucciones SELECT de SQL que agregan datos transaccionales, normalmente mediante la inclusión de una cláusula GROUP BY.In-Memory Analytics refers to SQL SELECTs which aggregate transactional data, typically by inclusion of a GROUP BY clause. El tipo de índice denominado columnstore es fundamental para el análisis operativo.The index type called columnstore is central to operational analytics.

Hay dos escenarios principales:There are two major scenarios:

  • Elanálisis operativo por lotes hace referencia a los procesos de agregación que se ejecutan cuando finaliza el horario laboral o bien en hardware secundario que tiene copias de los datos transaccionales.Batch Operational Analytics refers to aggregation processes that run either after business hours or on secondary hardware which has copies of the transactional data.
  • Elanálisis operativo en tiempo real hace referencia a los procesos de agregación que se ejecutan en horario laboral y en el hardware principal que se usa para cargas de trabajo transaccionales.Real-time Operational Analytics refers to aggregration processes that run during business hours and on the primary hardware which is used for transactional workloads.

El presente artículo se centra en OLTP y no en el análisis.The present article focuses on OLTP, and not on Analytics. Para obtener información sobre cómo los índices de almacén de columnas llevan el análisis a SQL, vea:For information on how columnstore indexes bring Analytics to SQL, see:

Nota

Hay disponible un vídeo de dos minutos sobre las características en memoria en Azure SQL Database - In-Memory Technologies (Base de datos SQL de Azure: tecnologías en memoria).A two minute video about the In-Memory features is available at Azure SQL Database - In-Memory Technologies. El vídeo tiene fecha de diciembre de 2015.The video is dated December 2015.

columnstoreColumnstore

Una secuencia de entradas de blog excelentes explica de manera elegante los índices de almacén de columnas desde varias perspectivas.A sequence of excellent blog posts elegantly explains columnstore indexes from several perspectives. En la mayoría de las publicaciones se describe más el concepto de análisis operacional en tiempo real, que es compatible con el almacén de columnas.The majority of the posts describe further the concept of real-time operational analytics, which columnstore supports. Sunil Agarwal, director de programas en Microsoft, creó estas entradas en marzo de 2016.These posts were authored by Sunil Agarwal, a Program Manager at Microsoft, in March 2016.

análisis operativo en tiempo realReal-time Operational Analytics

  1. Análisis operativos en tiempo real mediante la tecnología In-MemoryReal-Time Operational Analytics Using In-Memory Technology
  2. Análisis operativos en tiempo real: información general del índice de almacén de columnas no agrupado (NCCI)Real-Time Operational Analytics - Overview nonclustered columnstore index (NCCI)
  3. Análisis operativos en tiempo real: ejemplo sencillo de uso de un índice de almacén de columnas no agrupado (NCCI) en SQL Server 2016Real-Time Operational Analytics: Simple example using nonclustered clustered columnstore index (NCCI) in SQL Server 2016
  4. Análisis operativos en tiempo real: operaciones de DML e índice de almacén de columnas no agrupado (NCCI) en SQL Server 2016Real-Time Operational Analytics: DML operations and nonclustered columnstore index (NCCI) in SQL Server 2016
  5. Análisis operativos en tiempo real: índices de almacén de columnas no agrupados y filtrados (NCCI)Real-Time Operational Analytics: Filtered nonclustered columnstore index (NCCI)
  6. Análisis operativos en tiempo real: opción de retraso de compresión del índice de almacén de columnas no agrupado (NCCI)Real-Time Operational Analytics: Compression Delay Option for Nonclustered Columnstore Index (NCCI)
  7. Análisis operativos en tiempo real: opción de retraso de compresión con NCCI y el rendimientoReal-Time Operational Analytics: Compression Delay option with NCCI and the performance
  8. Análisis operativos en tiempo real: índice de almacén de columnas y tablas optimizadas para memoriaReal-Time Operational Analytics: Memory-Optimized Tables and Columnstore Index

Desfragmentar un índice de almacén de columnas.Defragment a columnstore index

  1. Desfragmentación del índice de almacén de columnas mediante el comando REORGANIZEColumnstore Index Defragmentation using REORGANIZE Command
  2. Directiva de combinación del índice de almacén de columnas para REORGANIZEColumnstore Index Merge Policy for REORGANIZE

Importación masiva de datosBulk importation of data

  1. Almacén de columnas agrupadas: carga masivaClustered Column Store: Bulk Load
  2. Índice de almacén de columnas agrupado: optimizaciones de carga de datos: registro mínimoClustered Columnstore Index: Data Load Optimizations - Minimal Logging
  3. Índice de almacén de columnas agrupado: optimizaciones de carga de datos: importación masiva en paraleloClustered columnstore Index: Data Load Optimization - Parallel Bulk Import

Característica de OLTP en memoriaFeatures of In-Memory OLTP

Veamos las características principales de OLTP en memoria.Let's look at the main features of In-Memory OLTP.

Tablas optimizadas para memoriaMemory-optimized tables

La palabra clave MEMORY_OPTIMIZED de T-SQL, en la instrucción CREATE TABLE, indica que se crea una tabla en la memoria activa, en lugar de en disco.The T-SQL keyword MEMORY_OPTIMIZED, on the CREATE TABLE statement, is how a table is created to exist in active memory, instead of on disk.

Las tablas con optimización para memoria tienen una representación de sí mismas en la memoria activa y una copia secundaria en el disco.A Memory-optimized tables has one representation of itself in active memory, and secondary copy on the disk.

  • La copia del disco es para recuperación rutinaria después de un cierre y reinicio del servidor o de la base de datos.The disk copy is for routine recovery after a shutdown-then-restart of the server or database. Esta dualidad de disco más memoria está oculta automáticamente y no se ve en el código.This memory-plus-disk duality is completely hidden from you and your code.

Módulos compilados de forma nativaNatively compiled modules

La palabra clave NATIVE_COMPILATION de T-SQL, en la instrucción CREATE PROCEDURE, indica que se crea un procedimiento almacenado compilado de forma nativa.The T-SQL keyword NATIVE_COMPILATION, on the CREATE PROCEDURE statement, is how a natively compiled stored procedure is created. Las instrucciones de T-SQL se compilan en el código máquina la primera vez que se usa el procedimiento nativo cada vez que la base de datos se recorre en línea.The T-SQL statements are compiled to machine code on first use of the native proc each time the database is cycled online. Las instrucciones de T-SQL ya no aguantan la interpretación lenta de cada instrucción.The T-SQL instructions no longer endure slow interpretation of every instruction.

  • Hemos visto el resultado de compilación nativa en duraciones de 1/100 de la duración interpretada.We have seen native compilation result in durations that are 1/100th of the interpreted duration.

Un módulo nativo solamente puede hacer referencia a tablas optimizadas para memoria, y no a tablas basadas en disco.A native module can reference memory-optimized tables only, and it cannot reference disk-based tables.

Hay tres tipos de módulos compilados de forma nativa:There are three types of natively compiled modules:

Disponibilidad en Base de datos SQL de AzureAvailability in Azure SQL Database

OLTP en memoria y Almacén de columnas están disponibles en Azure SQL Database.In-Memory OLTP and Columnstore are available in Azure SQL Database. Para detalles, consulte Optimize Performance using In-Memory Technologies in SQL Database (Optimizar el rendimiento con las tecnologías In-Memory en SQL Database).For details see Optimize Performance using In-Memory Technologies in SQL Database.

1. Garantizar un compatibilidad >= 1301. Ensure compatibility level >= 130

Esta sección es la primera de una serie de secciones numeradas que muestran la sintaxis de Transact-SQL que puede usar para implementar características de OLTP en memoria.This section begins a sequence of numbered sections that together demonstrate the Transact-SQL syntax you can use to implement In-Memory OLTP features.

En primer lugar, es importante que la base de datos se establezca en un nivel de compatibilidad de al menos 130.First, it is important that your database be set to a compatibility level of at least 130. A continuación figura el código de T-SQL para ver el nivel de compatibilidad actual en el que está establecida la base de datos actual.Next is the T-SQL code to view the current compatibility level that your current database is set to.

SELECT d.compatibility_level
    FROM sys.databases as d
    WHERE d.name = Db_Name();

A continuación figura el código de T-SQL para actualizar el nivel, si es necesario.Next is the T-SQL code to update the level, if necessary.

ALTER DATABASE CURRENT
    SET COMPATIBILITY_LEVEL = 130;

2. Elevar a SNAPSHOT2. Elevate to SNAPSHOT

Cuando una transacción implica una tabla basada en disco y una tabla optimizada para memoria, la llamamos transacción entre contenedores.When a transaction involves both a disk-based table and a memory-optimized table, we call that a cross-container transaction. En una transacción de este tipo es esencial que la parte optimizada para memoria de la transacción funcione en el nivel de aislamiento de la transacción llamado SNAPSHOT.In such a transaction it is essential that the memory-optimized portion of the transaction operate at the transaction isolation level named SNAPSHOT.

Para exigir de forma confiable este nivel para tablas optimizadas para memoria en una transacción entre contenedores, modifique la configuración de la base de datos ejecutando el siguiente código T-SQL.To reliably enforce this level for memory-optimized tables in a cross-container transaction, alter your database setting by executing the following T-SQL.

ALTER DATABASE CURRENT
    SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON;

3. Crear un grupo de archivos optimizado3. Create an optimized FILEGROUP

En Microsoft SQL Server, antes de poder crear una tabla optimizada para memoria debe crear un grupo de archivos que declara CONTAINS MEMORY_OPTIMIZED_DATA.On Microsoft SQL Server, before you can create a memory-optimized table you must first create a FILEGROUP that you declare CONTAINS MEMORY_OPTIMIZED_DATA. El grupo de archivos se asigna a la base de datos.The FILEGROUP is assigned to your database. Para obtener detalles, vea:For details see:

En Azure SQL Database, no es necesario y no se puede crear tal grupo de archivos.On Azure SQL Database, you need not and cannot create such a FILEGROUP.

El siguiente ejemplo de script T-SQL habilita una base de datos para OLTP en memoria y configura todos los ajustes recomendados.The following sample T-SQL script enables a database for In-Memory OLTP and configures all recommended settings. Funciona con SQL Server y Azure SQL Database: enable-in-memory-oltp.sql.It works with both SQL Server and Azure SQL Database: enable-in-memory-oltp.sql.

Tenga en cuenta que no todas las características de SQL Server son compatibles con las bases de datos que tienen un grupo de archivos MEMORY_OPTIMIZED_DATA.Note that not all SQL Server features are supported for databases with a MEMORY_OPTIMIZED_DATA filegroup. Para obtener más información sobre las limitaciones, vea: Características de SQL Server no admitidas para OLTP en memoriaFor details on limitations see: Unsupported SQL Server Features for In-Memory OLTP

4. Crear una tabla optimizada para memoria4. Create a memory-optimized table

La palabra clave de Transact-SQL fundamental es la palabra clave MEMORY_OPTIMIZED.The crucial Transact-SQL keyword is the keyword MEMORY_OPTIMIZED.

CREATE TABLE dbo.SalesOrder
    (
        SalesOrderId   integer   not null   IDENTITY
            PRIMARY KEY NONCLUSTERED,
        CustomerId   integer    not null,
        OrderDate    datetime   not null
    )
        WITH
            (MEMORY_OPTIMIZED = ON,
            DURABILITY = SCHEMA_AND_DATA);

Las instrucciones INSERT y SELECT de Transact-SQL en una tabla optimizada para memoria son las mismos que para una tabla normal.Transact-SQL INSERT and SELECT statements against a memory-optimized table are the same as for a regular table.

ALTER TABLE para tablas con optimización para memoriaALTER TABLE for Memory-Optimized tables

ALTER TABLE... ADD/DROP puede agregar o quitar una columna de una tabla optimizada para memoria o un índice.ALTER TABLE...ADD/DROP can add or remove a column from a memory-optimized table, or an index.

Planear sus índices y tablas optimizadas para memoriaPlan your memory-optimized tables and indexes

5. Crear un procedimiento almacenado compilado de forma nativa (procedimiento nativo)5. Create a natively compiled stored procedure (native proc)

La palabra clave fundamental es NATIVE_COMPILATION.The crucial keyword is NATIVE_COMPILATION.

CREATE PROCEDURE ncspRetrieveLatestSalesOrderIdForCustomerId  
        @_CustomerId   INT  
        WITH  
            NATIVE_COMPILATION,  
            SCHEMABINDING  
    AS  
    BEGIN ATOMIC  
        WITH  
            (TRANSACTION ISOLATION LEVEL = SNAPSHOT,
            LANGUAGE = N'us_english')  
      
        DECLARE @SalesOrderId int, @OrderDate datetime;
      
        SELECT TOP 1  
                @SalesOrderId = s.SalesOrderId,  
                @OrderDate    = s.OrderDate  
            FROM dbo.SalesOrder AS s  
            WHERE s.CustomerId = @_CustomerId  
            ORDER BY s.OrderDate DESC;  
      
        RETURN @SalesOrderId;  
    END;  

La palabra clave SCHEMABINDING significa que las tablas a las que se hace referencia en el procedimiento nativo no se puede quitar a menos que dicho procedimiento se quite primero.The keyword SCHEMABINDING means the tables referenced in the native proc cannot be dropped unless the native proc is dropped first. Para obtener detalles, vea Crear procedimientos almacenados compilados de forma nativa.For details see Creating Natively Compiled Stored Procedures.

Tenga en cuenta que no es necesario crear un procedimiento almacenado compilado de forma nativa para tener acceso a una tabla optimizada en memoria.Note that you do not need to create a natively compiled stored procedure to access a memory-optimized table. También puede hacer referencia a tablas optimizadas en memoria desde procedimientos almacenados tradicionales y desde lotes ad hoc.You can also reference memory-optimized tables from traditional stored procedures and ad hoc batches.

6. Ejecutar el procedimiento nativo6. Execute the native proc

Rellene la tabla con dos filas de datos.Populate the table with two rows of data.

INSERT into dbo.SalesOrder  
        ( CustomerId, OrderDate )  
    VALUES  
        ( 42, '2013-01-13 03:35:59' ),
        ( 42, '2015-01-15 15:35:59' );

Después seguirá una llamada EXECUTE al procedimiento almacenado compilado de forma nativa.An EXECUTE call to the natively compiled stored procedure follows.

DECLARE @LatestSalesOrderId int, @mesg nvarchar(128);
      
EXECUTE @LatestSalesOrderId =  
    ncspRetrieveLatestSalesOrderIdForCustomerId 42;
      
SET @mesg = CONCAT(@LatestSalesOrderId,  
    ' = Latest SalesOrderId, for CustomerId = ', 42);
PRINT @mesg;  

Esta es la salida de PRINT real:Here is the actual PRINT output:

-- 2 = Latest SalesOrderId, for CustomerId = 42  

Guía de la documentación y pasos siguientesGuide to the documentation and next steps

Los ejemplos anteriores sin formato constituyen una base para aprender las características más avanzadas de OLTP en memoria.The preceding plain examples give you a foundation for learning the more advanced features of In-Memory OLTP. Las secciones siguientes constituyen una guía a las consideraciones especiales que convendría conocer y dónde puede encontrar los detalles sobre cada una de ellas.The following sections are a guide to the special considerations you might need to know, and to where you can see the details about each.

¿Cómo funcionan las características de OLTP en memoria tan rápido?How In-Memory OLTP features work so much faster

Las siguientes subsecciones describen brevemente cómo funcionan las características de OLTP en memoria internamente para proporcionar un rendimiento mejorado.The following subsections briefly describe how the In-Memory OLTP features work internally to provide improved performance.

¿Cómo funcionan las tablas optimizadas para memoria más rápido?How memory-optimized tables perform faster

Naturaleza doble: una tabla optimizada para memoria tiene una naturaleza doble: una representación en memoria activa y la otra en el disco duro.Dual nature: A memory-optimized table has a dual nature: one representation in active memory, and the other on the hard disk. Cada transacción se confirma con ambas representaciones de la tabla.Each transaction is committed to both representations of the table. Las transacciones funcionan en la representación memoria activa mucho más rápida.Transactions operate against the much faster active memory representation. Las tablas con optimización para memoria se benefician de la mayor velocidad de la memoria activa en comparación con el disco.Memory-optimized tables benefit from the greater speed of active memory versus the disk. Además, la mayor agilidad de la memoria activa hace práctica una estructura de tabla más avanzada que se optimiza para velocidad.Further, the greater nimbleness of active memory makes practical a more advanced table structure that is optimized for speed. La estructura avanzada tampoco tiene páginas, por lo que evita la sobrecarga y la contención de bloqueos temporales y bloqueos por subproceso.The advanced structure is also pageless, so it avoids the overhead and contention of latches and spinlocks.

No hay bloqueos: la tabla optimizada para memoria se basa en un enfoque optimista de los objetivos de la competencia de integridad de datos frente a la simultaneidad y el alto rendimiento.No locks: The memory-optimized table relies on an optimistic approach to the competing goals of data integrity versus concurrency and high throughput. Durante la transacción, la tabla no coloca bloqueos en ninguna versión de las filas de datos actualizadas.During the transaction, the table does not place locks on any version of the updated rows of data. Esto puede reducir considerablemente la contención en algunos sistemas de gran volumen.This can greatly reduce contention in some high volume systems.

Versiones de fila: en lugar de bloqueos, la tabla optimizada para memoria agrega una versión nueva de una fila actualizada en la propia tabla, no en tempdb.Row versions: Instead of locks, the memory-optimized table adds a new version of an updated row in the table itself, not in tempdb. La fila original se mantiene hasta que se confirma la transacción.The original row is kept until after the transaction is committed. Durante la transacción, otros procesos pueden leer la versión original de la fila.During the transaction, other processes can read the original version of the row.

  • Cuando se crean varias versiones de una fila para una tabla basada en disco, las versiones de fila se almacenan temporalmente en tempdb.When multiple versions of a row are created for a disk-based table, row versions are stored temporarily in tempdb.

Menos tareas de registro: las versiones anterior y posterior de las filas actualizadas se mantienen en la tabla optimizada para memoria.Less logging: The before and after versions of the updated rows are held in the memory-optimized table. El par de filas proporciona gran parte de la información que tradicionalmente se escribe en el archivo de registro.The pair of rows provides much of the information that is traditionally written to the log file. Esto permite al sistema escribir menos información y con menos frecuencia en el registro.This enables the system to write less information, and less often, to the log. Aún así, la integridad transaccional está garantizada.Yet transactional integrity is ensured.

¿Cómo funcionan los procedimientos nativos más rápido?How native procs perform faster

Convertir un procedimiento almacenado interpretado normal en un procedimiento almacenado compilado de forma nativa, reduce considerablemente el número de instrucciones que se ejecutan en tiempo de ejecución.Converting a regular interpreted stored procedure into a natively compiled stored procedure greatly reduces the number of instructions to execute during run time.

Ventajas e inconvenientes de las características en memoriaTrade-offs of In-Memory features

Como es habitual en informática, las mejoras de rendimiento que ofrecen las características en memoria son una solución de compromiso.As is common in computer science, the performance gains provided by the In-Memory features are a trade-off. Las mejores características ofrecen beneficios que son más valiosos que los costos adicionales de la característica.The better features bring benefits that are more valuable than the extra costs of the feature. Puede encontrar instrucciones completas sobre los compromisos en:You can find comprehensive guidance about the trade-offs at:

En el resto de esta sección se enumeran algunas de las consideraciones principales de planeación y compromiso.The rest of this section lists some of the major planning and trade-off considerations.

Ventajas e inconvenientes de las tablas optimizadas para memoriaTrade-offs of memory-optimized tables

Calcular la memoria: debe calcular la cantidad de memoria activa que consumirá la tabla optimizada para memoria.Estimate memory: You must estimate the amount of active memory that your memory-optimized table will consume. El equipo debe tener la capacidad de memoria suficiente para hospedar una tabla optimizada para memoria.Your computer system must have adequate memory capacity to host a memory-optimized table. Para obtener detalles, vea:For details see:

Dividir la tabla grande: una manera de satisfacer la demanda de grandes cantidades de memoria activa es dividir la tabla grande en partes en memoria que almacenen filas de datos recientes frecuentes frente a otras partes en el disco que almacenen filas heredadas inactivas (por ejemplo, pedidos de ventas que se han enviado y completado totalmente).Partition your large table: One way to meet the demand for lots of active memory is to partition your large table into parts in-memory that store hot recent data rows versus other parts on the disk that store cold legacy rows (such as sales orders that have been fully shipped and completed). Esta división es un proceso manual de diseño e implementación.This partitioning is a manual process of design and implementation. Consulte:See:

Ventajas e inconvenientes de los procedimientos nativosTrade-offs of native procs

  • Un procedimiento almacenado compilado de forma nativa no puede acceder a una tabla basada en disco.A natively compiled stored procedure cannot access a disk-based table. Un procedimiento nativo solo puede acceder a tablas optimizadas en memoria.A native proc can access only memory-optimized tables.
  • Cuando se ejecuta un procedimiento nativo por primera vez después de que el servidor o base de datos vuelve a estar en línea, el procedimiento nativo se debe compilar de nuevo una vez.When a native proc runs for its first time after the server or database was most recently brought back online, the native proc must be recompiled one time. Esto provoca un retraso antes de que el procedimiento nativo empieza a ejecutarse.This causes a delay before the native proc starts to run.

Consideraciones avanzadas sobre tablas optimizadas para memoriaAdvanced considerations for memory-optimized tables

Losíndices de tablas con optimización para memoria difieren en algunos aspectos de los índices de las tablas en disco tradicionales.Indexes for Memory-Optimized Tables are different in some ways from indexes on traditional on-disk tables. Los índices de hash solo están disponibles en las tablas optimizadas para memoria.Hash Indexes are available only on memory-optimized tables.

Debe tener un plan para asegurarse de que haya suficiente memoria activa para la tabla optimizada para memoria planeada y sus índices.You must plan to ensure there will be sufficient active memory for your planned memory-optimized table and its indexes. Consulte:See:

Es posible declarar una tabla optimizada para memoria con DURABILITY = SCHEMA_ONLY:A memory-optimized table can be declared with DURABILITY = SCHEMA_ONLY:

  • Esta sintaxis indica al sistema que descarte todos los datos de la tabla optimizada para memoria cuando la base de datos se desconecta.This syntax tells the system to discard all data from the memory-optimized table when the database is taken offline. Solo se conserva la definición de tabla.Only the table definition is persisted.
  • Cuando la base de datos vuelva a estar en línea, la tabla optimizada para memoria se vuelve a cargar en la memoria activa, vacía de datos.When the database is brought back online, the memory-optimized table is loaded back into active memory, empty of data.
  • Las tablas SCHEMA_ONLY pueden ser una mejor alternativa a las tablas temporales en tempdb, cuando hay implicados varios miles de filas.SCHEMA_ONLY tables can be a superior alternative to #temporary tables in tempdb, when many thousands of rows are involved.

Las variables de tabla también pueden declararse como optimizadas para memoria.Table variables can also be declared as memory-optimized. Consulte:See:

Consideraciones avanzadas para módulos compilados de forma nativaAdvanced considerations for natively compiled modules

Los tipos de módulos compilados de forma nativa disponibles a través de Transact-SQL son:The types of natively compiled modules available through Transact-SQL are:

Una función definida por el usuario (UDF) compilada de forma nativa se ejecuta más rápido que una UDF interpretada.A natively compiled user defined function (UDF) runs faster than an interpreted UDF. Debe tener en cuenta lo siguiente con respecto a las UDF:Here are some things to consider with UDFs:

  • Cuando una instrucción SELECT de T-SQL usa una UDF, siempre se llama una vez a la UDF por cada fila devuelta.When a T-SQL SELECT uses a UDF, the UDF is always called once per returned row.
    • Las UDF nunca se ejecutan en línea, sino que siempre se llaman.UDFs never run inline, and instead are always called.
    • La distinción compilada es menos significativa de lo que es la sobrecarga de llamadas repetidas que es inherente a todas las UDF.The compiled distinction is less significant than is the overhead of repeated calls that is inherent to all UDFs.
    • A pesar de ello, la sobrecarga de llamadas a UDF suele ser aceptable en la práctica.Still, the overhead of UDF calls is often acceptable at the practical level.

Para obtener datos de prueba y una explicación del rendimiento de UDF nativas, vea:For test data and explanation about the performance of native UDFs, see:

Guía de documentación para tablas optimizadas para memoriaDocumentation guide for memory-optimized tables

Consulte estos otros artículos que tratan consideraciones especiales para tablas optimizadas para memoria:Refer to these other articles that discuss special considerations for memory-optimized tables:

Guía de documentación para procedimientos nativosDocumentation guide for native procs

El siguiente artículo, y los artículos secundarios en la tabla de contenido (TOC), explican los detalles sobre los procedimientos almacenados compilados de forma nativa.The following article, and its children articles in the table of contents (TOC), explain the details about natively compiled stored procedures.

Los artículos siguientes incluyen código para demostrar las mejoras de rendimiento que se pueden lograr con el uso de OLTP en memoria:Here are articles that offer code to demonstrate the performance gains you can achieve by using In-Memory OLTP: