SQL Server/SQL Server Tip

특정 테이블의 마지막 접근 시간 알아보기

SungWookKang 2015. 7. 20. 11:47
반응형

특정 테이블의 마지막 접근 시간 알아보기

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012

 

특정 테이블에 대하여 마지막 접근 시간 및 액세스 방법을 어떻게 알 수 있을까? 가장 좋은 솔루션은 데이터베이스 감사 작업을 생성하고 특정 테이블을 감사하는 것이다. 하지만 이와 같이 감사 작업을 생성하지 않고 간단히 정보를 보고 싶을 땐 어떻게 할까?

 

실습을 통해 알아 보자. 실습은 AdventureWorks2008R2 예제 데이터베이스를 이용 하였다.

 

다음과 같이 테이블을 스캔하는 쿼리와 인덱스를 탐색하는 2종류의 쿼리를 실행 하였다.

select * from person.Address

select * from person.Address where AddressID = 1

 

 

 

다음 스크립트를 이용하여 마지막 접근하였던 액세스 방법 및 시간을 알아 보자.

SELECT DB_NAME ( ius.[database_id] ) AS [Database] ,

OBJECT_NAME ( ius.[object_id] ) AS [TableName] ,

MAX ( ius.[last_user_lookup] ) AS [last_user_lookup] ,

MAX ( ius.[last_user_scan] ) AS [last_user_scan] ,

MAX ( ius.[last_user_seek] ) AS [last_user_seek]

FROM sys.dm_db_index_usage_stats AS ius

WHERE ius.[database_id] = DB_ID ()

AND ius.[object_id] = OBJECT_ID ( 'person.address' )

GROUP BY ius.[database_id] , ius.[object_id] ;

 

 

위의 스크립트를 실행하면 해당 테이블에 대한 마지막 Seek 시간, Scan 시간, LookUp 시간을 확인 할 수 있다. 이 정보로 마지막 테이블에 대한 접근 시간을 유추 할 수 있다.

 

사실 이 정보는 특정 테이블에 대한 접근 기록이 저장된 데이터를 읽어 들인 것이 아닌 인덱스 사용 통계를 기반으로 유추한 것이다. 다음 DMV를 통하여 인덱스 사용 기록을 확인 할 수 있다.

select * from sys.dm_db_index_usage_stats where database_id = DB_ID()

 

 

 

가장 정확한 방법은 처음에 언급하였듯이 감사를 생성하여 특정 테이블을 감사하는 것이다, 하지만 이와 같은 방법으로 응용하여 사용 할 수 있을 듯 하다.

 

한가지 단점이라면 서비스가 재시작 되었을 때 DMV 정보는 초기화 되므로 마지막 접근 시간을 알 수 없는 경우도 있다.

 

[참고자료]

http://blog.sqlauthority.com/2013/03/21/sql-server-identify-last-user-access-of-table-using-t-sql-script/

 

 

2013-03-22 / 강성욱 / http://sqlmvp.kr

 

반응형