Partekatu honen bidez:


Estadísticas para tablas Memory-Optimized

El optimizador de consultas usa estadísticas sobre columnas para crear planes de consulta que mejoran 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, las estadísticas se crean automáticamente para las columnas de clave de índice cuando se crea el índice. Para obtener más información sobre la creación de estadísticas, consulte Estadísticas.

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

Las estadísticas de las tablas optimizadas para memoria no se actualizan de forma predeterminada. En su lugar, debe actualizarlos 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 para deshabilitar la actualización automática de estadísticas para 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 la última 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 poder actualizar las estadísticas individualmente.

Las estadísticas se pueden generar mediante el muestreo de los datos o la realización de un examen completo. Las estadísticas muestreadas solo usan una muestra de los datos de la tabla para calcular la distribución de datos. Las estadísticas de análisis completo examinan toda la tabla para determinar la distribución de los datos. Las estadísticas de análisis completo suelen ser más precisas, pero requieren más tiempo para su cálculo. Las estadísticas muestreadas se pueden recopilar más rápido.

Las tablas basadas en disco usan estadísticas muestreadas de forma predeterminada. Las tablas optimizadas para la memoria solo admiten estadísticas de escaneo completo. 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 para las estadísticas de tablas optimizadas para memoria:

  • Los índices de las tablas optimizadas para memoria se crean junto con la creación de 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 deben actualizarse después de cargar los datos en la tabla.

  • En el caso de los procedimientos almacenados compilados de forma nativa, los planes de ejecución para las consultas del procedimiento se optimizan cuando se compila el procedimiento. Esto sucede solo cuando se crea el procedimiento y cuando se reinicia el servidor, no cuando se actualizan las estadísticas. Por lo tanto, las tablas deben contener un conjunto representativo de datos y estadísticas deben up-to-date antes de crear los procedimientos. (Los procedimientos almacenados compilados de forma nativa se vuelven a compilar si la base de datos se desconecta y vuelven a estar en línea, o si hay un reinicio del servidor).

Directrices para estadísticas al implementar tablas de Memory-Optimized

Para asegurarse de que el optimizador de consultas tiene up-toestadísticas de fecha al crear planes de consulta, implemente tablas optimizadas para memoria mediante estos cinco pasos:

  1. Cree tablas e índices. Los índices se especifican integradas en las CREATE TABLE declaraciones.

  2. Cargue los datos en las tablas.

  3. Actualice las estadísticas de las tablas.

  4. Cree procedimientos almacenados que accedan a las tablas.

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

La creación de procedimientos almacenados compilados de forma nativa después de cargar los datos y actualizar las estadísticas garantiza que el optimizador tenga estadísticas disponibles para las tablas optimizadas para memoria. Esto garantizará planes de consulta eficaces cuando se compile el procedimiento.

Directrices para mantener estadísticas en tablas de Memory-Optimized

Para mantener las estadísticas up-to-date, actualice periódicamente las estadísticas en tablas optimizadas para memoria.

Si los datos cambian con frecuencia, debe actualizar las estadísticas con frecuencia. Por ejemplo, actualice las estadísticas de tabla después de una actualización por lotes. Después de actualizar las estadísticas, elimine y vuelva a crear los procedimientos almacenados compilados de forma nativa para que se beneficien de las estadísticas actualizadas.

.

No actualice las estadísticas durante la 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 siguiente script:

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 actualizaron por última vez las estadísticas de las tablas optimizadas para memoria. Esta información puede ayudarle a decidir 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  

Véase también

Memory-Optimized Tablas