SQL Server: Últimos accesos a una tabla

Es muy posible que en algún momento hayas pensado en que estaría bien saber cuándo ha sido el último acceso a una determinada tabla de tu base de datos SQL Server, ¿no se os ocurre ningún caso? Imaginemos que hemos modificado cierto código provocando que una tabla deje de utilizarse y pueda ser eliminada , ¿estamos seguros que ningún otro código o aplicación acceden a esa tabla? A continuación os explicaré cómo podemos saber la última vez que una tabla ha sido accedida en SQL Server.

Mediante el uso de la DMV (Dynamic Management View) sys.dm_db_index_usage_stats podemos obtener información sobre los últimos accesos a una tabla en SQL Server, para ello ejecutaremos la consulta:

-- Lanzamos una consulta sobre la tabla Employee de la BD AdventureWorks
SELECT * FROM HumanResources.Employee

-- Comprobamos los accesos
SELECT tab.name AS Tablename,
       user_seeks, user_scans, user_lookups, user_updates,
       last_user_seek, last_user_scan, last_user_lookup, last_user_update
FROM sys.dm_db_index_usage_stats ius 
INNER JOIN sys.tables tab ON (tab.object_id = ius.object_id)
WHERE database_id = DB_ID(N'AdventureWorks')
  AND tab.name = 'Employee'

Y obtendremos el siguiente resultado:

En cuanto al significado de las distintas columnas del resultado de la consulta:

  • Tablename, nombre de la tabla por la que estamos filtrando en el WHERE; si no filtramos obtendremos los últimos accesos a todas las tablas de la base de datos.
  • user_seeks, número de consultas de usuario que han utilizado un índice para la búsqueda.
  • user_scans, número de consultas de usuario que han recorrido toda la tabla.
  • user_lookups, número de consultas de usuario en las que se ha producido un salto del índice a la tabla para recuperar los datos.
  • user_updates, número de actualizaciones (INSERT / DELETE / UPDATE) que ha realizado un usuario sobre la tabla.
  • last_user_seek, fecha de la última consulta de usuario que ha utilizado un índice para la búsqueda.
  • last_user_scan, fecha de la última consulta de usuario que ha recorrido toda la tabla.
  • last_user_lookup, fecha de la última consulta de usuario en la que se ha producido un salto del índice a la tabla para recuperar los datos.
  • last_user_update, fecha de la última actualización (INSERT / DELETE / UPDATE) que ha realizado un usuario sobre la tabla.

En el ejemplo anterior, al hacer un SELECT sobre la tabla Employee se ha sumado 1 en la columna user_scans y se ha actualizado el valor de la columna last_user_scan con la fecha y hora en la que he ejecutado el SELECT. Si queréis más información sobre la DMV sys.dm_db_index_usage_stats podéis hacerlo a través de la página correspondiente del MSDN.

Un tema importante a tener en cuenta, los contadores se inicializan a 0 (para las columnas user_xxx) y NULL (para las columnas last_xxx) cada vez que se inicia el servicio SQL Server (MSSQLSERVER). Además, cada vez que una base de datos se pone fuera de conexión o se apaga (por ejemplo, porque se establece AUTO_CLOSE en ON), se eliminan todas las filas asociadas a la base de datos. Y hasta aquí el artículo de hoy, espero que os pueda ser útil en algún momento. Recordad también que dentro de areaTIC podéis encontrar otros artículos interesantes, no dudéis en consultar nuestro archivo, también podéis seguirnos por RSS o las principales redes sociales (twitter, facebook, linkedin…)

Repost de areatic.net


Posted

in

,

by

Tags: