sys.dm_db_stats_properties (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de données SQL dans Microsoft Fabric

La sys.dm_db_stats_properties fonction de gestion dynamique restitue des statistiques pour l’objet de base de données spécifié dans la base de données courante.

Pour les tables partitionnées, voir aussi le sys.dm_db_incremental_stats_properties similaire.

Syntaxe

sys.dm_db_stats_properties (object_id, stats_id)  

Arguments

object_id

L’ID de l’objet dans la base de données actuelle. object_id est int.

stats_id

L’ID des statistiques pour le spécifié object_id. Vous pouvez obtenir l’ID statistique depuis la vue de gestion dynamique sys.stats . stats_id est int.

Table retournée

Nom de la colonne Type de données Description
object_id int ID de l’objet (table ou vue indexée).
stats_id int ID de l'objet de statistiques. Unique dans la table ou la vue indexée. Pour plus d’informations, consultez sys.stats (Transact-SQL).
last_updated datetime2 Date et heure de la dernière mise à jour de l'objet de statistiques. Pour plus d’informations, consultez la section Remarques de cet article.
rows bigint Nombre total de lignes dans la table ou la vue indexée au moment de la dernière mise à jour des statistiques. Si les statistiques sont filtrées ou correspondent à un index filtré, le nombre de lignes peut être inférieur à celui de la table.
rows_sampled bigint Nombre total de lignes échantillonnées pour le calcul des statistiques.
steps int Nombre d'étapes dans l'histogramme. Pour plus d’informations, consultez DBCC SHOW_STATISTICS (Transact-SQL).
unfiltered_rows bigint Nombre total de lignes dans la table avant l'application de l'expression de filtre (pour les statistiques filtrées). Si les statistiques ne sont pas filtrées, unfiltered_rows est égale à la valeur retournée dans la rows colonne.
modification_counter bigint Nombre total de modifications de la première colonne de statistiques (la colonne sur laquelle l'histogramme est construit) depuis la dernière mise à jour des statistiques.

Tables optimisées en mémoire : démarrage de SQL Server 2016 (13.x) et dans Azure SQL Database, cette colonne contient le nombre total de modifications pour la table depuis la dernière mise à jour des statistiques ou le redémarrage de la base de données.
persisted_sample_percent float Pourcentage d’échantillon persistant utilisé pour les mises à jour des statistiques qui ne spécifient pas explicitement un pourcentage d’échantillonnage. Si la valeur est zéro, aucun pourcentage d’échantillon persistant n’est défini pour cette statistique.

S’applique à : SQL Server 2016 (13.x) SP1 CU4 et versions ultérieures

Notes

La sys.dm_db_stats_properties fonction retourne un ensemble de lignes vide sous l’une des conditions suivantes :

  • object_id ou stats_id est NULL.
  • L’objet spécifié n’est pas trouvé ou ne correspond pas à une table ou à une vue indexée.
  • L’ID statistique spécifié ne correspond pas aux statistiques existantes pour l’ID de l’objet spécifié.
  • L’utilisateur actuel n’a pas d’autorisations pour voir l’objet statistiques.

Ce comportement permet une utilisation sûre de sys.dm_db_stats_properties lorsqu’il est appliqué en croisement à des lignes dans des vues telles que sys.objects et sys.stats.

La date de mise à jour des statistiques est stockée dans l’objet blob de statistiques avec l’histogramme et le vecteur de densité, et non dans les métadonnées. Quand aucune donnée n’est lue pour générer des données de statistiques, l’objet blob de statistiques n’est pas créé, la date n’est pas disponible et la last_updated colonne est NULL. Cette condition s’applique aux statistiques filtrées pour lesquelles le prédicat ne renvoie aucune ligne, ou aux nouvelles tables vides.

autorisations

Vous avez besoin SELECT d’autorisations sur les colonnes de statistiques, ou vous devez posséder la table, ou être membre du sysadmin rôle serveur fixe, du db_owner rôle de base de données fixe, ou du db_ddladmin rôle de base de données fixe.

Exemples

R. Exemple simple

L’exemple suivant renvoie des informations sur les statistiques pour la Person.Person table dans la AdventureWorks base de données.

SELECT * FROM sys.dm_db_stats_properties (object_id('Person.Person'), 1);

B. Retourner toutes les propriétés statistiques pour une table

L’exemple suivant restitue les propriétés de toutes les statistiques existantes pour la table Sales.SalesOrderDetail.

SELECT 
    OBJECT_SCHEMA_NAME(stat.object_id) AS schema_name,
    OBJECT_NAME(stat.object_id)        AS table_name,
    sp.stats_id, 
    stat.[name], 
    stat.filter_definition, 
    sp.last_updated, 
    sp.[rows], 
    sp.rows_sampled, 
    sp.steps,
    sp.unfiltered_rows, 
    sp.modification_counter   
FROM sys.stats AS stat   
OUTER APPLY sys.dm_db_stats_properties(stat.object_id, stat.stats_id) AS sp  
WHERE stat.object_id = OBJECT_ID(N'Sales.SalesOrderDetail')

C. Propriétés de statistiques de retour pour les objets fréquemment modifiés

L’exemple suivant restitue toutes les tables, vues indexées et statistiques de la base de données actuelle pour lesquelles la colonne principale a été modifiée plus de 1 000 fois depuis la dernière mise à jour des statistiques.

SELECT 
    OBJECT_SCHEMA_NAME(obj.[object_id]) AS schema_name,
    obj.[name],
    stat.[name],
    stat.stats_id, 
    sp.last_updated, 
    sp.modification_counter  
FROM sys.objects AS obj   
INNER JOIN sys.stats AS stat ON stat.object_id = obj.object_id  
OUTER APPLY sys.dm_db_stats_properties(stat.object_id, stat.stats_id) AS sp  
WHERE sp.modification_counter > 1000;