Compartir a través de


Estadísticas para las tablas con optimización para memoria

El optimizador de consultas utiliza las estadísticas de las columnas para crear planes de consulta que mejoren el rendimiento de las consultas. Las estadísticas se recopilan de las tablas de la base de datos y se almacenan en los metadatos de la base de datos.

Las estadísticas se crean automáticamente, pero también se pueden crear manualmente. Por ejemplo, para las columnas de clave de índice, las estadísticas se crean automáticamente cuando se crea el índice. Para obtener más información acerca de cómo crear estadísticas, vea Statistics.

Normalmente, los datos de tabla cambian a medida que se insertan, se actualizan y se eliminan filas. Esto significa que las estadísticas deben actualizarse periódicamente. De forma predeterminada, las estadísticas basadas en disco se actualizan automáticamente cuando el optimizador determina que podrían estar obsoletas.

Las estadísticas de tablas optimizadas para memoria no se actualizan de forma predeterminada. En su lugar, debe actualizarlas manualmente. Use UPDATE STATISTICS (Transact-SQL) para columnas, índices o tablas individuales. Use sp_updatestats (Transact-SQL) para actualizar las estadísticas de todas las tablas internas y de usuario de la base de datos.

Al usar CREATE STATISTICS (Transact-SQL) o UPDATE STATISTICS (Transact-SQL), debe especificar NORECOMPUTE que deshabilite la actualización automática de estadísticas para las tablas optimizadas para memoria. En el caso de las tablas basadas en disco, sp_updatestats (Transact-SQL) solo actualiza las estadísticas si la tabla se ha modificado desde el último sp_updatestats (Transact-SQL). En el caso de las tablas optimizadas para memoria, sp_updatestats (Transact-SQL) siempre genera estadísticas actualizadas. sp_updatestats (Transact-SQL) es una buena opción para las tablas optimizadas para memoria; de lo contrario, debe saber qué tablas tienen cambios significativos para actualizar las estadísticas individualmente.

Se pueden generar estadísticas mediante el muestreo de los datos o realizando un examen completo. Las estadísticas muestreadas solo usan un ejemplo de los datos de la tabla para estimar la distribución de los datos. Las estadísticas completas examinan toda la tabla para determinar la distribución de los datos. Las estadísticas completas suelen ser más precisas pero tardan más tiempo en calcularse. Las estadísticas muestreadas se pueden recopilar más rápidamente.

Las tablas basadas en disco usan las estadísticas muestreadas de forma predeterminada. Las tablas con optimización para memoria solo admiten las estadísticas completas. Al usar CREATE STATISTICS (Transact-SQL) o UPDATE STATISTICS (Transact-SQL), debe especificar la FULLSCAN opción para las tablas optimizadas para memoria.

Consideraciones adicionales sobre las estadísticas de tablas optimizadas para memoria:

  • Los índices de las tablas optimizadas para memoria se crean con la tabla. Las estadísticas de las columnas de clave de índice se crean cuando la tabla está vacía. Por lo tanto, estas estadísticas deberán actualizarse después de que los datos se hayan cargado en la tabla.

  • Para los procedimientos almacenados compilados de forma nativa, los planes de ejecución de las consultas del procedimiento se optimizan cuando se compila el procedimiento. Esto solo ocurre cuando se crea el procedimiento y se reinicia el servidor, no cuando se actualizan las estadísticas. Por tanto, las tablas deben contener un conjunto de datos representativo, y las estadísticas deben actualizarse antes de que se creen los procedimientos. (Los procedimientos almacenados compilados de forma nativa se vuelven a compilar si la base de datos se deja sin conexión y se vuelve a poner en línea o si se ha reiniciado el servidor).

Directrices para las estadísticas cuando se implementan tablas con optimización para memoria

Para asegurarse de que el optimizador de consultas dispone de estadísticas actualizadas al crear los planes de consulta, implemente las tablas optimizadas para memoria siguiendo estos cinco pasos:

  1. Cree tablas e índices. Los índices se especifican insertados en instrucciones CREATE TABLE.

  2. Cargue datos en las tablas.

  3. Actualice las estadísticas de las tablas.

  4. Cree procedimientos almacenados que tengan acceso a las tablas.

  5. Ejecute la carga de trabajo, que puede contener una combinación de procedimientos almacenados de Transact-SQL compilados e interpretados de forma nativa, así como lotes ad hoc.

El hecho de crear procedimientos almacenados compilados de forma nativa después de cargar los datos y actualizar las estadísticas asegura que el optimizador dispondrá de estadísticas para las tablas optimizadas para memoria. Esto garantizará planes de consulta eficaces cuando se compile el procedimiento.

Directrices para el mantenimiento de estadísticas en las tablas con optimización para memoria

Para mantener las estadísticas actualizadas, actualice periódicamente las estadísticas de las tablas optimizadas para memoria.

Si los datos cambian con frecuencia, deberá actualizar las estadísticas a menudo. Por ejemplo, actualice las estadísticas de las tablas después de cada actualización por lotes. Después de actualizar las estadísticas, quite y vuelva a crear los procedimientos almacenados compilados de forma nativa para que puedan beneficiarse de las estadísticas actualizadas.

.

No actualice las estadísticas durante un período de carga de trabajo máxima.

Para actualizar las estadísticas:

Para actualizar las estadísticas de una sola tabla optimizada para memoria (myschema). Mytable), ejecute el siguiente script:

UPDATE STATISTICS myschema.Mytable WITH FULLSCAN, NORECOMPUTE  

Para actualizar las estadísticas de todas las tablas optimizadas para memoria de la base de datos actual, ejecute el script siguiente:

DECLARE @sql NVARCHAR(MAX) = N''  
  
SELECT @sql += N'  
   UPDATE STATISTICS ' + quotename(schema_name(schema_id)) + N'.' + quotename(name) + N' WITH FULLSCAN, NORECOMPUTE'  
FROM sys.tables WHERE is_memory_optimized=1  
  
EXEC sp_executesql @sql  

Para actualizar las estadísticas de todas las tablas de la base de datos, ejecute sp_updatestats (Transact-SQL).

En el ejemplo siguiente se informa de cuándo se han actualizado por última vez las estadísticas de las tablas optimizadas para memoria. Esta información puede ayudarle a determinar si necesita actualizar las estadísticas.

select t.object_id, t.name, sp.last_updated as 'stats_last_updated'  
from sys.tables t join sys.stats s on t.object_id=s.object_id cross apply sys.dm_db_stats_properties(t.object_id, s.stats_id) sp  
where t.is_memory_optimized=1  

Consulte también

Tablas optimizadas para la memoria