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

 

  • 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/

 



강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 38111
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 20672
1754 SQL Server 페이지 및 익스텐트 아키텍처(2/4) – 익스텐트 할당 및 빈공간 관리 jevida(강성욱) 2016.09.27 1644
1753 SQL Server 페이지 및 익스텐트 아키텍처(1/4) – 페이지 및 익스텐트 이해 jevida(강성욱) 2016.09.27 4037
1752 SQL Server Error Log 보관 주기 설정 jevida(강성욱) 2016.09.15 2331
1751 SQL Server 네트워크 백업 트러블슈팅(UNC 설정) jevida(강성욱) 2016.09.15 5473
1750 SQL Server 인증 실패시 반환되는 클라이언트 메시지 정보 jevida(강성욱) 2016.09.15 4278
1749 SQL Server에 할당된 메모리 개체 확인 jevida(강성욱) 2016.09.15 1649
1748 SQL Server 비동기 업데이트 활성 / 비활성에 따른 특성 jevida(강성욱) 2016.09.15 2037
1747 DBCC CHECKDB와 Compute Column 인덱스의 성능 관계 jevida(강성욱) 2016.09.15 1544
1746 Collation에 따른 DMV 실행 오류 jevida(강성욱) 2016.09.15 1369
1745 참조 개체 확인 (sys.sql_expression_dependencies) jevida(강성욱) 2016.09.15 1724
» 특정 테이블의 마지막 접근 시간 알아보기 jevida(강성욱) 2016.09.15 1304
1743 SQL Server Fill Factor (채우기 비율)에 관한 오해와 진실 jevida(강성욱) 2016.09.15 4933
1742 LOB 데이터와 Shrink 작업 jevida(강성욱) 2016.09.15 1303
1741 데이터베이스 함수 검색 하기 jevida(강성욱) 2016.09.15 1125
1740 필터 통계 사용과 파리미터 사용 jevida(강성욱) 2016.09.15 1258
1739 유지관리 계획과 병렬처리 – Index Rebuild jevida(강성욱) 2016.09.15 1137
1738 유지관리 계획과 병렬 처리 – CHECKDB jevida(강성욱) 2016.09.15 1218
1737 쿼리 사이즈(길이) 에 따른 CPU 사용량 증가 jevida(강성욱) 2016.09.14 1367
1736 Ad-hoc 쿼리를 매개변수화 하여 성능 높이기 jevida(강성욱) 2016.09.14 1760
1735 통계 업데이트 옵션(ROWCOUNT and PAGECOUNT) jevida(강성욱) 2016.09.14 1308





XE Login