Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
Se aplica a: SQL Server 2025 (17.x)
Azure SQL Database
El Almacén de consultas para secundarias legibles está disponible en SQL Server 2025 (17.x) y Azure SQL Database, y las estadísticas persistentes para las secundarias legibles usan la infraestructura que el Almacén de consultas tiene en vigor para las secundarias legibles.
El Query Store para secundarias legibles está activado de forma predeterminada en SQL Server 2025 (17.x) y Azure SQL Database.
Background
En las réplicas secundarias legibles, las estadísticas también se pueden crear automáticamente cuando se habilita la opción de estadísticas de creación automática, pero esas estadísticas son temporales y desaparecen cuando se reinicia una instancia. Cuando faltan estadísticas en una base de datos de solo lectura o una instantánea de solo lectura o están obsoletas, el motor de base de datos crea y mantiene estadísticas temporales en tempdb.
Cuando el motor de base de datos crea estadísticas temporales, el nombre de las estadísticas se anexa con el sufijo _readonly_database_statistic para diferenciar las estadísticas temporales de las estadísticas permanentes. El sufijo _readonly_database_statistic está reservado para las estadísticas generadas por SQL Server. La razón por la que se tomó este enfoque era abordar las cargas de trabajo que se ejecutan en réplicas secundarias legibles que podrían requerir estadísticas distintas que no existen en la réplica principal.
Las estadísticas temporales creadas en las réplicas secundarias solo son visibles para la réplica que las generó. La réplica principal nunca accede directamente a estos objetos de estadísticas temporales y solo es consciente del objeto de estadísticas permanente después de la persistencia. Cuando las estadísticas temporales se conservan en la réplica principal, están disponibles para todas las réplicas del grupo de disponibilidad a través del mecanismo de sincronización.
El mecanismo de persistencia usa el Almacén de consultas para la infraestructura secundaria legible introducida en SQL Server 2022 (16.x). La información de estadísticas se envía a la réplica principal donde se conserva como estadísticas permanentes y, a continuación, se sincroniza con todas las réplicas secundarias. Este proceso se produce automáticamente sin necesidad de intervención manual.
Soporte para vistas de catálogo
Para admitir la comparación de la creación o actualización de estadísticas entre el secundario y el principal, y para ayudar a comprender dónde se crearon las estadísticas, se han agregado tres columnas nuevas a la vista de catálogo sys.stats.
| Nombre de la columna | Tipo de datos | Description |
|---|---|---|
replica_role_id |
tinyint |
1 = Primario, 2 = Secundario, 3 = Secundario Geográfico, 4 = Secundario HA Geográfico |
replica_role_desc |
nvarchar(60) | Primaria, Secundaria, Geográfica Secundaria, Geográfica HA Secundaria |
replica_name |
sysname | Nombre de la instancia de réplica en el grupo de disponibilidad.
NULL para la réplica principal |
Estas columnas realizan un seguimiento de la propiedad y el origen de las estadísticas a lo largo del ciclo de vida de persistencia. Cuando una réplica secundaria crea estadísticas temporales y se conservan en la réplica principal, las columnas replica_role_id y replica_name identifican la réplica de origen. Si estas estadísticas permanentes se actualizan posteriormente en la réplica principal, la propiedad se transfiere a la réplica principal, lo que queda reflejado en estas columnas.
Comportamiento de retención de estadísticas
Cuando las estadísticas temporales se conservan de una réplica secundaria a la principal, se producen varios comportamientos importantes: las estadísticas temporales de la réplica secundaria no se quitan automáticamente después de la persistencia. Las consultas que desencadenaron originalmente la creación de estas estadísticas temporales continúan utilizándolas hasta que la consulta se somete a la recompilación o se reinicie la réplica. Esto significa que las versiones temporales y permanentes de las mismas estadísticas pueden coexistir temporalmente.
El optimizador no tiene en cuenta la propiedad de la réplica al determinar si se deben usar estadísticas. Evalúa todas las estadísticas disponibles en función de la cobertura de columnas y las estimaciones de selectividad. La información de réplica se mantiene principalmente con fines de seguimiento y solución de problemas.
Un escenario notable se produce cuando las estadísticas permanentes creadas a partir de estadísticas temporales se vuelven obsoletas. Si se producen modificaciones significativas en los datos principales que afectan a las columnas de esas estadísticas, es posible que las estadísticas permanentes se consideren obsoletas. Cuando las consultas en las réplicas secundarias hacen referencia a estas columnas, la secundaria actualiza las estadísticas basándose en su visión de los datos, lo que refleja las modificaciones que se han aplicado a través del proceso de reproceso.
En resumen, la persistencia no elimina la capacidad de la secundaria para actualizar las estadísticas obsoletas; simplemente agrega un mecanismo para compartir estadísticas entre réplicas.
Observability
Eventos extendidos
persisted_stats_operation (Canal operativo) se activa para los eventos enqueued, dequeued, processed y failed. Esto puede ser útil para supervisar si un mensaje de estadísticas no se puede almacenar en el servidor principal o si está interesado en ver la plataforma de procesamiento de mensajes. Las estadísticas temporales permanecen en tempdb en las réplicas secundarias mientras un proceso en segundo plano vuelve a intentar enviar el mensaje si hay un problema de comunicación entre las réplicas primarias y secundarias.
Ejemplos de mensajes de error relacionados que se pueden registrar en errorLOG
- 9131: Característica deshabilitada durante el inicio de SQL.
- 9136: Tabla o índice eliminado/modificado.
- 9137: Esquema cambiado desde que se inició la transacción de instantáneas; reintentar.
- 9139: Estadísticas demasiado grandes para enviar al servidor principal.
La consulta siguiente puede proporcionar cierta visibilidad de las estadísticas de una tabla, incluidas las estadísticas persistentes de las réplicas secundarias:
SELECT sch.[name] AS SchemaName,
obj.[name] AS TableName,
s.[name] AS StatsName,
CASE WHEN s.stats_id >= 2 AND s.auto_created = 1 THEN 'AUTO_STATS'
WHEN s.stats_id >= 2 AND s.auto_created = 0 THEN 'USER_CREATED_STATS'
ELSE 'INDEX_STATS'
END AS type,
s.is_temporary,
CASE WHEN s.replica_name IS NULL
AND s.replica_role_desc = 'PRIMARY'
AND s.stats_id >= 2
AND s.auto_created = 1
THEN 'PRIMARY'
ELSE s.replica_name
END AS replica_name,
s.replica_role_id,
s.replica_role_desc
FROM sys.schemas AS sch
INNER JOIN sys.objects AS obj
ON sch.schema_id = obj.schema_id
INNER JOIN sys.stats AS s
ON obj.object_id = s.object_id
WHERE sch.[name] <> 'sys'
ORDER BY sch.[name], obj.[name], s.stats_id;
Consideraciones
Las estadísticas persistentes para la característica secundaria legible se habilitan de forma predeterminada siempre que la opción de creación automática de estadísticas esté habilitada y las READABLE_SECONDARY_TEMPORARY_STATS_AUTO_CREATE opciones de configuración con ámbito de base de datos y READABLE_SECONDARY_TEMPORARY_STATS_AUTO_UPDATE estén habilitadas, que es la configuración predeterminada. No hay ninguna configuración con ámbito de base de datos para activar y desactivar la característica.