Hola, chicos,
¡Buenas noches!

En este post te mostraré cómo identificar la fecha del último acceso de una tabla o vista y la fecha de última ejecución de un procedimiento en SQL Server. Esto es especialmente útil para identificar tablas que no se utilizan o incluso para comprender cuánto se utilizan.

Para ello SQL Server nos proporciona el excelente DMV sys.dm_db_index_usage_stats, que a pesar de su nombre, funciona tanto para tablas con índices (agrupadas y no agrupadas) como para tablas HEAP (sin índices).

Un punto de atención para cualquiera que utilice esta vista es que cuando se reinicia la instancia los datos se restablecen.

Cómo saber la fecha y hora del último acceso a una tabla o vista

Con una consulta un tanto sencilla podemos observar fácilmente la fecha del último acceso del objeto, la fecha del último acceso por tipo de lectura y los tipos de lecturas que fueron identificadas por la vista.

Para identificar tablas o vistas que no se han leído desde que se reinició la instancia, simplemente verifique los registros donde la columna last_access está vacía (last_access IS NULL).

SELECT
    A.name AS [object_name],
    A.type_desc,
    B.database_id,
    C.name AS index_name,
    (
        SELECT MAX(Ultimo_Acesso)
        FROM (VALUES (B.last_user_seek),(B.last_user_scan),(B.last_user_lookup),(B.last_user_update)) AS DataAcesso(Ultimo_Acesso)
    ) AS last_access,
    B.last_user_seek,
    B.last_user_scan,
    B.last_user_lookup,
    B.last_user_update,
    NULLIF(
        (CASE WHEN B.last_user_seek IS NOT NULL THEN 'Seek, ' ELSE '' END) +
        (CASE WHEN B.last_user_scan IS NOT NULL THEN 'Scan, ' ELSE '' END) +
        (CASE WHEN B.last_user_lookup IS NOT NULL THEN 'Lookup, ' ELSE '' END) +
        (CASE WHEN B.last_user_update IS NOT NULL THEN 'Update, ' ELSE '' END)
    , '') AS operations
FROM
    sys.objects                                 A
    LEFT JOIN sys.dm_db_index_usage_stats       B	ON	B.[object_id] = A.[object_id] AND B.[database_id] = DB_ID()
    LEFT JOIN sys.indexes                       C	ON	C.index_id = B.index_id AND C.[object_id] = B.[object_id]
WHERE
    A.[type_desc] IN ('VIEW', 'USER_TABLE')
ORDER BY
    A.name,
    B.index_id

SQL Server - sys.dm_db_index_usage_stats last table view access date 1
SQL Server: sys.dm_db_index_usage_stats fecha de acceso a la última vista de tabla 1

Al probar el ejemplo anterior, recuerde cambiar la base de datos msdb por la que necesita o dejarla sin la base de datos especificada si usa la base de datos en su contexto de conexión.

Cómo saber la fecha y hora de la última ejecución de un procedimiento almacenado

Para obtener esta vista usamos el DMV sys.objects para obtener la lista de procedimientos y funciones de la base de datos msdb, hacemos un LEFT JOIN con el sys.dm_exec_query_stats, que es donde se almacenan los planes de ejecución en caché de la instancia, y realizamos un CROSS APPLY con el sys.dm_exec_sql_text DMV, que es el DMV responsable de almacenar los comandos ejecutados por los planes de ejecución. ejecución de caché.

SELECT
    A.name AS [object_name],
    A.type_desc,
    MAX(B.last_execution_time) AS last_execution_time
FROM
    sys.objects	A 
    LEFT JOIN (
        sys.dm_exec_query_stats B
        CROSS APPLY sys.dm_exec_sql_text(B.sql_handle) C 
    ) ON A.[object_id] = C.objectid
WHERE
    A.type_desc LIKE '%_PROCEDURE'
GROUP BY
    A.name,
    A.type_desc
ORDER BY
    3 DESC,
    1

SQL Server - dm_exec_query_stats last stored procedure execution date
SQL Server: dm_exec_query_stats fecha de ejecución del último procedimiento almacenado

¡Eso es todo, lectores!
Dos consultas sencillas, rápidas y útiles en el día a día.

¡Abrazo!

sql sql server cómo saber la fecha del último acceso, última lectura de la tabla de vista cómo saber la fecha de ejecución de un procedimiento almacenado

sql sql server cómo saber la fecha del último acceso, última lectura de la tabla de vista cómo saber la fecha de ejecución de un procedimiento almacenado

servidor SQL cómo descubrir tablas no leídas accedidas tablas no utilizadas no utilizadas fecha del último acceso procedimiento almacenado de la tabla no utilizado no utilizado

servidor SQL cómo descubrir tablas no leídas accedidas tablas no utilizadas no utilizadas fecha del último acceso procedimiento almacenado de la tabla no utilizado no utilizado