sys.dm_db_stats_properties (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseInstancia administrada de Azure SQLBase de datos SQL en Microsoft Fabric

La sys.dm_db_stats_properties función de gestión dinámica devuelve estadísticas para el objeto de base de datos especificado en la base de datos actual.

Para tablas particionadas, véase también el sys.dm_db_incremental_stats_properties similar.

Sintaxis

sys.dm_db_stats_properties (object_id, stats_id)  

Argumentos

object_id

El ID del objeto en la base de datos actual. object_id es int.

stats_id

El ID de estadísticas para el especificado object_id. Puedes obtener el ID de estadísticas desde la vista de gestión dinámica de sys.stats . stats_id es int.

Tabla devuelta

Nombre de la columna Tipo de datos Descripción
object_id int ID del objeto (vista de tabla o indexada).
stats_id int Identificador del objeto de estadísticas. Es único dentro de la vista indizada o la tabla. Para obtener más información, vea sys.stats (Transact-SQL).
last_updated datetime2 Fecha y hora de la última actualización del objeto de estadísticas. Para obtener más información, vea la sección Comentarios de este artículo.
rows bigint Número total de filas que tenía la tabla o la vista indizada la última vez que se actualizaron las estadísticas. Si las estadísticas se filtran o corresponden a un índice filtrado, el número de filas puede ser inferior al número de filas de la tabla.
rows_sampled bigint Número total de filas muestreadas para cálculos de estadísticas.
steps int Número de pasos del histograma. Para obtener más información, vea DBCC SHOW_STATISTICS (Transact-SQL).
unfiltered_rows bigint Número total de filas de la tabla antes de aplicar la expresión de filtro (para estadísticas filtradas). Si las estadísticas no se filtran, unfiltered_rows es igual al valor devuelto en la rows columna.
modification_counter bigint Número total de modificaciones para la columna de estadísticas iniciales (la columna en la que se ha generado el histograma) desde la última vez que se actualizaron las estadísticas.

Tablas optimizadas para memoria: a partir de SQL Server 2016 (13.x) y en Azure SQL Database, esta columna contiene: número total de modificaciones para la tabla desde la última vez que se actualizaron las estadísticas o se reinició la base de datos.
persisted_sample_percent float Porcentaje de ejemplo persistente empleado en las actualizaciones de estadísticas en las que no se especifica explícitamente un porcentaje de muestreo. Si el valor es cero, significa que no hay establecido ningún porcentaje de ejemplo persistente para esta estadística.

Aplica a: SQL Server 2016 (13.x) SP1 CU4 y versiones posteriores

Comentarios

La sys.dm_db_stats_properties función devuelve un conjunto de filas vacío bajo cualquiera de las siguientes condiciones:

  • object_id o stats_id es NULL.
  • El objeto especificado no se encuentra ni corresponde a una tabla o vista indexada.
  • El ID de estadísticas especificado no corresponde a las estadísticas existentes para el ID del objeto especificado.
  • El usuario actual no tiene permisos para ver el objeto estadísticas.

Este comportamiento permite el uso seguro de sys.dm_db_stats_properties cuando se aplica cruzado a filas en vistas como sys.objects y sys.stats.

La fecha de actualización de estadísticas se almacena en el objeto BLOB de estadísticas junto con el histograma y el vector de densidad, pero no en los metadatos. Cuando no se lee ningún dato para generar datos de estadísticas, el blob de estadísticas no se crea, la fecha no está disponible y la last_updated columna es NULL. Esta condición se aplica a estadísticas filtradas para las que el predicado no devuelve filas, o a nuevas tablas vacías.

Permisos

Necesitas SELECT permisos en las columnas de estadísticas, o debes ser dueño de la tabla, o ser miembro del sysadmin rol fijo de servidor, del db_owner rol fijo de base de datos o del db_ddladmin rol fijo de base de datos.

Ejemplos

A. Ejemplo sencillo

El siguiente ejemplo devuelve información sobre las estadísticas de la Person.Person tabla en la AdventureWorks base de datos.

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

B. Devuelve todas las propiedades estadísticas de una tabla

El siguiente ejemplo devuelve propiedades de todas las estadísticas que existen para la tabla 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. Propiedades de estadísticas de retorno para objetos modificados frecuentemente

El siguiente ejemplo devuelve todas las tablas, vistas indexadas y estadísticas de la base de datos actual para las cuales la columna inicial fue modificada más de 1.000 veces desde la última actualización estadística.

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;