특정 테이블의 마지막 접근 시간 알아보기
- 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 정보는 초기화 되므로 마지막 접근 시간을 알 수 없는 경우도 있다.
[참고자료]
2013-03-22 / 강성욱 / http://sqlmvp.kr
'SQL Server > SQL Server Tip' 카테고리의 다른 글
Collation에 따른 DMV 실행 오류 (0) | 2015.07.20 |
---|---|
참조 개체 확인 (sys.sql_expression_dependencies) (0) | 2015.07.20 |
SQL Server Fill Factor (채우기 비율)에 관한 오해와 진실 (0) | 2015.07.20 |
LOB 데이터와 Shrink 작업 (0) | 2015.07.20 |
데이터베이스 함수 검색 하기 (0) | 2015.07.20 |