Estadísticas para las tablas con optimización para memoriaStatistics for Memory-Optimized Tables

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

El optimizador de consultas utiliza las estadísticas de las columnas para crear planes de consulta que mejoren el rendimiento de las consultas.The query optimizer uses statistics about columns to create query plans that improve query performance. Las estadísticas se recopilan de las tablas de la base de datos y se almacenan en los metadatos de la base de datos.Statistics are collected from the tables in the database and stored in the database metadata.

Las estadísticas se crean automáticamente, pero también se pueden crear manualmente.Statistics are created automatically, but can also be created manually. Por ejemplo, para las columnas de clave de índice, las estadísticas se crean automáticamente cuando se crea el índice.For example, statistics are created automatically for index key columns when the index is created. Para obtener más información acerca de cómo crear estadísticas, vea Statistics.For more information about creating statistics see Statistics.

Normalmente, los datos de tabla cambian a medida que se insertan, se actualizan y se eliminan filas.Table data typically changes over time as rows are inserted, updated, and deleted. Esto significa que las estadísticas deben actualizarse periódicamente.This means statistics need to be updated periodically. De forma predeterminada, las estadísticas de tablas se actualizan automáticamente cuando el optimizador de consultas determina que podrían estar obsoletas.By default, statistics on tables are updated automatically when the query optimizer determines they might be out of date.

Consideraciones sobre las estadísticas de tablas optimizadas para memoria:Considerations for statistics on memory-optimized tables:

  • A partir de SQL Server 2016 y de Azure SQL DatabaseAzure SQL Database, se admite la actualización automática de estadísticas de tablas optimizadas para memoria, si se usa un nivel de compatibilidad de base de datos de al menos 130.Starting in SQL Server 2016 and in Azure SQL DatabaseAzure SQL Database, automatic update of statistics is supported for memory-optimized tables, when using database compatibility level of at least 130. Vea Nivel de compatibilidad de ALTER DATABASE (Transact-SQL).See ALTER DATABASE Compatibility Level (Transact-SQL). Si una base de datos tiene tablas creadas anteriormente con un nivel de compatibilidad inferior, las estadísticas se tendrán que actualizar manualmente una vez para, así, poder actualizarlas automáticamente desde ese instante.If a database has tables that were previously created using a lower compatibility level, the statistics need to be updated manually once, to enable automatic update of statistics going forward.

  • En el caso de los procedimientos almacenados compilados de forma nativa, los planes de ejecución de las consultas del procedimiento se optimizan cuando se compila el procedimiento, algo que tiene lugar al crearlo.For natively compiled stored procedures, execution plans for queries in the procedure are optimized when the procedure is compiled, which happens at create time. No se vuelven a compilar automáticamente cuando se actualizan las estadísticas.They are not automatically recompiled when statistics are updated. Por lo tanto, las tablas deben contener un conjunto de datos representativo para que los procedimientos puedan crearse.Therefore, the tables should contain a representative set of data before the procedures are created.

  • Los procedimientos almacenados compilados de forma nativa se pueden compilar manualmente con sp_recompile (Transact-SQL)y se vuelven a compilar automáticamente si la base de datos se desconecta y se vuelve a conectar, o bien cuando hay un reinicio del servidor o una conmutación por error de la base de datos.Natively compiled stored procedures can be manually recompiled using sp_recompile (Transact-SQL), and they are automatically recompiled if the database is taken offline and brought back online, or if there is a database failover or server restart.

Habilitar la actualización automática de estadísticas de las tablas existentesEnabling Automatic Update of Statistics in Existing Tables

Cuando se crean tablas en una base de datos que tiene un nivel de compatibilidad de, como mínimo, 130, la actualización automática de estadísticas estará habilitada para todas las estadísticas de la tabla y no será necesario realizar ninguna acción.When tables are created in a database that has compatibility level of at least 130, automatic update of statistics is enabled for all statistics on that table, and no further action is needed.

Si una base de datos tiene tablas optimizadas para memoria creadas con una versión anterior de SQL ServerSQL Server o en un nivel de compatibilidad por debajo de 130, las estadísticas se tendrán que actualizar manualmente una vez para, así, poder actualizarlas automáticamente desde ese instante.If a database has memory-optimized tables that were created in an earlier version of SQL ServerSQL Server or under a lower compatibility level than 130, the statistics need to be updated manually once to enable automatic update going forward.

Haga lo siguiente para habilitar la actualización automática de estadísticas de tablas optimizadas para memoria creadas en un nivel de compatibilidad anterior:To enable automatic update of statistics for memory-optimized tables that were created under an older compatibility level, follow these steps:

  1. Actualice el nivel de compatibilidad de la base de datos: ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL=130Update the database compatibility level: ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL=130

  2. Actualice manualmente las estadísticas de las tablas optimizadas para memoria.Manually update the statistics of the memory-optimized tables. Este es un script de ejemplo que consigue lo mismo.Below is a sample script that performs the same.

  3. Vuelva a compilar los procedimientos almacenados compilados de forma nativa para aprovechar las estadísticas actualizadas.Manually recompile the natively compiled stored procedures to benefit from the updated statistics.

Script único para estadísticas: en el caso de las tablas optimizadas para memoria creadas en un nivel de compatibilidad inferior, se puede ejecutar el siguiente script Transact-SQL una vez para actualizar las estadísticas de todas esas tablas optimizadas para memoria y habilitar la actualización automática de estadísticas desde ese momento (suponiendo que AUTO_UPDATE_STATISTICS esté habilitado para la base de datos):One-time script for statistics: For memory-optimized tables that were created under a lower compatibility level, you can run the following Transact-SQL script one time to update the statistics of all memory-optimized tables, and enable automatic update of statistics from then onward (assuming AUTO_UPDATE_STATISTICS is enabled for the database):

-- Assuming AUTO_UPDATE_STATISTICS is already ON for your database:
-- ALTER DATABASE CURRENT SET AUTO_UPDATE_STATISTICS ON;

ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 130;
GO
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT
      @sql += N'UPDATE STATISTICS '
         + quotename(schema_name(t.schema_id))
         + N'.'
         + quotename(t.name)
         + ';' + CHAR(13) + CHAR(10)
   FROM sys.tables AS t
   WHERE t.is_memory_optimized = 1 AND 
        t.object_id IN (SELECT object_id FROM sys.stats WHERE no_recompute=1)
;
EXECUTE sp_executesql @sql;
GO
-- Each row appended to @sql looks roughly like:
-- UPDATE STATISTICS [dbo].[MyMemoryOptimizedTable];

Comprobar que la actualización automática está habilitada: con el siguiente script se comprueba si la actualización automática está habilitada para las estadísticas en las tablas optimizadas para memoria.Verify auto-update is enabled: The following script verifies whether automatic update is enabled for statistics on memory-optimized tables. Tras ejecutar el script anterior, devolverá 1 en la columna auto-update enabled de todos los objetos de estadística.After running the previous script it will return 1 in the column auto-update enabled for all statistic objects.

SELECT 
    quotename(schema_name(o.schema_id)) + N'.' + quotename(o.name) AS [table],
    s.name AS [statistics object],
    1-s.no_recompute AS [auto-update enabled]
FROM sys.stats s JOIN sys.tables o ON s.object_id=o.object_id
WHERE o.is_memory_optimized=1

Directrices para implementar tablas y procedimientosGuidelines for Deploying Tables and Procedures

Para asegurarse de que el optimizador de consultas dispone de estadísticas actualizadas al crear los planes de consulta, haga lo siguiente para implementar tablas optimizadas para memoria y procedimientos almacenados compilados de forma nativa con acceso a dichas tablas:To ensure that the query optimizer has up-to-date statistics when creating query plans, deploy memory-optimized tables and natively compiled stored procedures that access these tables using these four steps:

  1. Procure que el nivel de compatibilidad de la base de datos sea al menos 130.Ensure the database has compatibility level of at least 130. Vea Nivel de compatibilidad de ALTER DATABASE (Transact-SQL).See ALTER DATABASE Compatibility Level (Transact-SQL).

  2. Cree tablas e índices.Create tables and indexes. Los índices han de especificarse insertados en instrucciones CREATE TABLE .Indexes should be specified inline in the CREATE TABLE statements.

  3. Cargue datos en las tablas.Load data into the tables.

  4. Cree procedimientos almacenados que tengan acceso a las tablas.Create stored procedures that access the tables.

El hecho de crear procedimientos almacenados compilados de forma nativa después de cargar los datos garantiza que el optimizador va a disponer de estadísticas para las tablas optimizadas para memoria.Creating natively compiled stored procedures after you load the data ensures that the optimizer has statistics available for the memory-optimized tables. Esto garantizará planes de consulta eficaces cuando se compile el procedimiento.This will ensure efficient query plans when the procedure is compiled.

Consulte tambiénSee Also

Tablas optimizadas para la memoriaMemory-Optimized Tables