Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à : SQL Server 2025 (17.x)
Azure SQL Database
Le Magasin des requêtes pour les secondaires lisibles est disponible dans SQL Server 2025 (17.x) et Azure SQL Database, et les statistiques persistantes pour les fichiers secondaires lisibles utilisent l’infrastructure que le Magasin des requêtes a en place pour les secondaires lisibles.
Le Magasin des requêtes pour les secondaires lisibles est activé par défaut dans SQL Server 2025 (17.x) et Azure SQL Database.
Background
Sur les réplicas secondaires lisibles, les statistiques peuvent également être créées automatiquement lorsque l’option de création automatique de statistiques est activée, mais ces statistiques sont temporaires et disparaissent lorsqu’une instance est redémarrée. Lorsque des statistiques sur une base de données en lecture seule ou un instantané en lecture seule sont manquantes ou obsolètes, le moteur de base de données crée et gère des statistiques temporaires dans tempdb.
Lorsque le moteur de base de données crée des statistiques temporaires, le nom des statistiques est ajouté avec le suffixe _readonly_database_statistic pour différencier les statistiques temporaires des statistiques permanentes. Le suffixe _readonly_database_statistic est réservé aux statistiques générées par SQL Server. Cette approche a été adoptée pour traiter les charges de travail qui s'exécutent sur des répliques secondaires lisibles et qui peuvent nécessiter des statistiques distinctes inexistantes sur la réplique principale.
Les statistiques temporaires créées sur les réplicas secondaires restent visibles uniquement pour le réplica qui les a générés. Le réplica principal n’accède jamais directement à ces objets de statistiques temporaires et n’est conscient que de l’objet de statistiques permanent après la persistance. Lorsque les statistiques temporaires sont conservées sur le réplica principal, elles deviennent disponibles pour tous les réplicas du groupe de disponibilité via le mécanisme de synchronisation.
Le mécanisme de persistance utilise le Magasin des requêtes pour l’infrastructure secondaire lisible introduite dans SQL Server 2022 (16.x). Les informations sur les statistiques sont envoyées au réplica principal où elles sont conservées en tant que statistiques permanentes, puis synchronisées avec tous les réplicas secondaires. Ce processus se produit automatiquement sans nécessiter d’intervention manuelle.
Prise en charge des affichages catalogues
Pour prendre en charge la comparaison de la création ou de la mise à jour des statistiques entre secondaire et principal et pour vous aider à comprendre où les statistiques ont été créées, trois nouvelles colonnes ont été ajoutées à l’affichage sys.stats catalogue :
| Nom de colonne | Type de données | Description |
|---|---|---|
replica_role_id |
tinyint |
1 = Primaire, 2 = Secondaire, 3 = Secondaire Géographique, 4 = Secondaire HA Géographique |
replica_role_desc |
nvarchar(60) | Primaire, Secondaire, Secondaire Géographique, Secondaire HA Géographique |
replica_name |
sysname | Nom de l’instance de la réplique dans le groupe de disponibilité.
NULL pour le réplica principal |
Ces colonnes suivent la propriété et l’origine des statistiques tout au long du cycle de vie de persistance. Lorsqu’un réplica secondaire crée des statistiques temporaires et qu’ils sont conservés dans le réplica principal, les colonnes replica_role_id et replica_name identifient le réplica d’origine. Si ces statistiques permanentes sont ultérieurement mises à jour sur le réplica principal, la propriété est transférée au principal, ce qui est reflété dans ces colonnes.
Comportement de persistance des statistiques
Lorsque les statistiques temporaires sont conservées d’un réplica secondaire vers le réplica principal, plusieurs comportements importants se produisent : les statistiques temporaires sur le réplica secondaire ne sont pas automatiquement supprimées après la persistance. Les requêtes qui ont déclenché la création de ces statistiques temporaires continuent de les utiliser jusqu’à ce que la requête soit recompilée ou que le réplica soit redémarré. Cela signifie que les versions temporaires et permanentes des mêmes statistiques peuvent coexister temporairement.
L’optimiseur ne prend pas en compte la propriété du réplica lorsque vous déterminez s’il faut utiliser des statistiques. Elle évalue toutes les statistiques disponibles en fonction de la couverture des colonnes et des estimations de sélectivité. Les informations de réplica sont conservées principalement à des fins de suivi et de résolution des problèmes.
Un scénario notable se produit lorsque les statistiques permanentes créées à partir de statistiques temporaires deviennent obsolètes. Si des modifications significatives des données se produisent sur les principales colonnes affectées par ces statistiques, les statistiques permanentes pourraient être considérées comme périmées. Lorsque des requêtes sur des réplicas secondaires font référence à ces colonnes, le secondaire met à jour les statistiques en fonction de sa vue des données, reflétant les modifications qui ont été appliquées via le processus de restauration automatique.
En bref, la persistance ne supprime pas la capacité du secondaire à actualiser les statistiques obsolètes ; il ajoute simplement un mécanisme pour partager des statistiques entre les réplicas.
Observability
Événements étendus
persisted_stats_operation (Canal opérationnel) est déclenché pour enqueued, dequeued, processed et failed événements. Cela peut être utile pour surveiller si un message de statistiques ne peut pas être conservé sur le serveur principal, ou s'il y a un intérêt pour la surveillance de l'installation de traitement des messages. Les statistiques temporaires restent dans tempdb sur les réplicas secondaires, tandis qu’un processus en arrière-plan réessaye d’envoyer le message en cas de problème de communication entre les réplicas principal et secondaire.
Exemples de messages d’erreur connexes qui peuvent être enregistrés dans le ERRORLOG
- 9131 : Fonctionnalité désactivée au démarrage de SQL.
- 9136 : Table ou index supprimé/modifié.
- 9137 : Schéma modifié depuis le démarrage de la transaction d’instantané ; réessayer.
- 9139 : Statistiques trop volumineuses pour envoyer au principal.
La requête suivante peut fournir une visibilité sur les statistiques d’une table, y compris les statistiques conservées à partir de réplicas secondaires :
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;
Considérations
Les statistiques persistantes pour les fonctionnalités secondaires lisibles sont activées par défaut tant que l’option de création automatique des statistiques est activée et que les READABLE_SECONDARY_TEMPORARY_STATS_AUTO_CREATEREADABLE_SECONDARY_TEMPORARY_STATS_AUTO_UPDATE options de configuration délimitées à la base de données sont activées, c’est-à-dire la configuration par défaut. Il n’existe aucune configuration délimitée à la base de données pour activer et désactiver la fonctionnalité.