문제

객체가 다른 것에 의해 참조되는지 여부를 찾는 것은 사소한 일입니다. 내가하고 싶은 것은 그것이 의지 여부를 식별하는 것입니다. 실제로 사용됩니다.

내 솔루션에는 원래 데이터베이스에 객체 목록을 보유한 테이블의 조합과 시간당 작업이 포함되었습니다.

그 일은 두 가지 일을했다. 먼저, 마지막 실행 이후 데이터베이스에 추가 된 새 개체를 찾았습니다. 둘째, SQL의 객체 캐시를 보았습니다. 테이블의 객체가 캐시에 나열된 경우, 최근에 사용중인 "본"것으로 테이블에 표시되었습니다.

6 개월이 끝나면 테이블의 내용이 검사되었습니다. 모니터링을 시작한 이후로 언급되지 않은 테이블에 나열된 내용은 아마도 백업하고 제거하기에 안전했습니다.

물론, 1 년에 한 번만 사용되는 물체의 가능성이 있지만 대부분은 작동하는 것처럼 보였습니다.

그래도 함께 일하는 것은 일종의 고통이었습니다.

함께 일하고있는 약 6 개의 데이터베이스가 있으며, 대부분은 수많은 레거시 테이블을 가지고 있으며, 원래 제작자가 다른 회사로 이동 한 지 오래 남았습니다.

내가 찾고있는 것은 객체 (테이블, 뷰, 저장 프로 시저 또는 기능)가 호출 될 때를 추적하는 상당히 신뢰할 수있는 방법입니다.

현재 이런 종류의 것을 모니터링하는 사람들을 위해 어떤 방법/코드를 사용하고 있으며 추천 하시겠습니까?

도움이 되었습니까?

해결책

SQL Server 2005를 사용하면 동적 관리보기 SYS.DM_DB_INDEX_USAGE_STATS를 사용할 수 있습니다. 이름은 "색인"이라고 말하지만 약간 오해의 소지가 있습니다. 모든 테이블에는 인덱스가 없더라도 여기에 항목이 있습니다. SQL Magazine의 유용한 쿼리는 다음과 같습니다.

SELECT 
  t.name AS 'Table', 
  SUM(i.user_seeks + i.user_scans + i.user_lookups) 
    AS 'Total accesses',
  SUM(i.user_seeks) AS 'Seeks',
  SUM(i.user_scans) AS 'Scans',
  SUM(i.user_lookups) AS 'Lookups'
FROM 
  sys.dm_db_index_usage_stats i RIGHT OUTER JOIN 
    sys.tables t ON (t.object_id = i.object_id)
GROUP BY 
  i.object_id, 
  t.name
ORDER BY [Total accesses] DESC

원래 기사는 다음과 같습니다.

http://www.sqlmag.com/article/articleid/53878/sql_server_53878.html

SQL Server가 다시 시작될 때 이러한 사용 통계가 재설정됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top