데이터베이스 개발자 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
1750 SQL Server 인증 실패시 반환되는 클라이언트 메시지 정보 jevida(강성욱) 2016.09.15 3621
1749 SQL Server에 할당된 메모리 개체 확인 jevida(강성욱) 2016.09.15 1582
1748 SQL Server 비동기 업데이트 활성 / 비활성에 따른 특성 jevida(강성욱) 2016.09.15 1693
1747 DBCC CHECKDB와 Compute Column 인덱스의 성능 관계 jevida(강성욱) 2016.09.15 1432
1746 Collation에 따른 DMV 실행 오류 jevida(강성욱) 2016.09.15 1308
1745 참조 개체 확인 (sys.sql_expression_dependencies) jevida(강성욱) 2016.09.15 1559
» 특정 테이블의 마지막 접근 시간 알아보기 jevida(강성욱) 2016.09.15 1237
1743 SQL Server Fill Factor (채우기 비율)에 관한 오해와 진실 jevida(강성욱) 2016.09.15 3588
1742 LOB 데이터와 Shrink 작업 jevida(강성욱) 2016.09.15 1238
1741 데이터베이스 함수 검색 하기 jevida(강성욱) 2016.09.15 1063
1740 필터 통계 사용과 파리미터 사용 jevida(강성욱) 2016.09.15 1179
1739 유지관리 계획과 병렬처리 – Index Rebuild jevida(강성욱) 2016.09.15 1064
1738 유지관리 계획과 병렬 처리 – CHECKDB jevida(강성욱) 2016.09.15 1128
1737 쿼리 사이즈(길이) 에 따른 CPU 사용량 증가 jevida(강성욱) 2016.09.14 1300
1736 Ad-hoc 쿼리를 매개변수화 하여 성능 높이기 jevida(강성욱) 2016.09.14 1652
1735 통계 업데이트 옵션(ROWCOUNT and PAGECOUNT) jevida(강성욱) 2016.09.14 1228
1734 SQL Server Plan Guide 생성 및 사용 jevida(강성욱) 2016.09.14 1418
1733 SQL Server 그래픽 실행 계획 노드 정보 jevida(강성욱) 2016.09.14 1065
1732 프로파일러를 이용한 실행계획 캡처하기 jevida(강성욱) 2016.09.14 958
1731 SQL Server 그래픽 실행 계획 및 텍스트 실행 계획 jevida(강성욱) 2016.09.14 3099





XE Login