데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

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

 

  • 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
1753 SQL Server 페이지 및 익스텐트 아키텍처(1/4) – 페이지 및 익스텐트 이해 jevida(강성욱) 2016.09.27 3812
1752 SQL Server Error Log 보관 주기 설정 jevida(강성욱) 2016.09.15 2209
1751 SQL Server 네트워크 백업 트러블슈팅(UNC 설정) jevida(강성욱) 2016.09.15 5279
1750 SQL Server 인증 실패시 반환되는 클라이언트 메시지 정보 jevida(강성욱) 2016.09.15 4056
1749 SQL Server에 할당된 메모리 개체 확인 jevida(강성욱) 2016.09.15 1593
1748 SQL Server 비동기 업데이트 활성 / 비활성에 따른 특성 jevida(강성욱) 2016.09.15 1757
1747 DBCC CHECKDB와 Compute Column 인덱스의 성능 관계 jevida(강성욱) 2016.09.15 1446
1746 Collation에 따른 DMV 실행 오류 jevida(강성욱) 2016.09.15 1326
1745 참조 개체 확인 (sys.sql_expression_dependencies) jevida(강성욱) 2016.09.15 1602
» 특정 테이블의 마지막 접근 시간 알아보기 jevida(강성욱) 2016.09.15 1249
1743 SQL Server Fill Factor (채우기 비율)에 관한 오해와 진실 jevida(강성욱) 2016.09.15 4061
1742 LOB 데이터와 Shrink 작업 jevida(강성욱) 2016.09.15 1256
1741 데이터베이스 함수 검색 하기 jevida(강성욱) 2016.09.15 1072
1740 필터 통계 사용과 파리미터 사용 jevida(강성욱) 2016.09.15 1196
1739 유지관리 계획과 병렬처리 – Index Rebuild jevida(강성욱) 2016.09.15 1084
1738 유지관리 계획과 병렬 처리 – CHECKDB jevida(강성욱) 2016.09.15 1146
1737 쿼리 사이즈(길이) 에 따른 CPU 사용량 증가 jevida(강성욱) 2016.09.14 1315
1736 Ad-hoc 쿼리를 매개변수화 하여 성능 높이기 jevida(강성욱) 2016.09.14 1691
1735 통계 업데이트 옵션(ROWCOUNT and PAGECOUNT) jevida(강성욱) 2016.09.14 1245
1734 SQL Server Plan Guide 생성 및 사용 jevida(강성욱) 2016.09.14 1453





XE Login