2014-02-26 2 views
0

주로 sys.dm_db_index_usage_stats를 사용하여 다양한 인스턴스 및 데이터베이스에서 인덱스 사용을 수집하는 프로 시저가 있습니다. 그런 다음 USER_UPDATES 값이 높고 USER_SEEKS, USER_SCANS, USER_LOOKUPS 값이 0 인 인덱스를 사용하여 인덱스가 사용되고 있지 않음을 나타내며이를 삭제합니다.인덱스 사용, 모니터링 및 사용되지 않는 인덱스 삭제 SQL Server 2008 R2

문제는 다음 번에 프로 시저가 실행될 때 SQL Server 서비스가 다시 시작되거나 인덱스가 다시 작성 될 때만 sys.dm_db_index_usage_stats가 재설정되기 때문에 인덱스가 삭제되었음을 반영하지 않는다는 것입니다.

색인을 삭제하기 전에 다시 작성하지 않아도됩니다. 누구든지 더 좋은 제안이 있습니까?

+0

당신은'sys.indexes'에 참여하여 인덱스가 존재하는지 확인할 수 있습니다. –

+0

SP를 재 컴파일하려고하지 마십시오. 이전 실행 계획을 유지합니다. (적어도 인덱스가 떨어지면 처음 실행됩니다.) – jean

+0

sys.indexes에 가입하고'WHERE name IS NOT NULL'을 실제로 확인했는데 실제로 이미 구현했습니다. 다른 곳에서 저의 절차에있는 어리석은 실수였습니다. 감사합니다 모두와 미안 시간을 ​​낭비에 대한 –

답변

0

sys.indexes에 가입하고 WHERE name IS NOT NULL이 실제로 작동했는지 확인하고 실제로 이것을 이미 구현했지만 다른 곳에서 수행 한 작업에 어리석은 오류가있었습니다. 블라디미르와 그 밖의 모든 사람들에게 감사 드리며 시간을 낭비하게되어 죄송합니다.

0

DMV sys.dm_db_index_usage_stats를 재설정하는 방법이 없다고 생각합니다. BOL에 따르면

카운터는 SQL 서버 (MSSQLSERVER) 서비스가 시작 될 때마다 비워 초기화됩니다. 또한 데이터베이스가 분리되거나 종료 될 때마다 (예 : AUTO_CLOSE가 ON으로 설정 됨) 데이터베이스와 연관된 모든 행이 제거됩니다.

해결 방법은 색인을 삭제할 때 표시 할 플래그가있는 사용자 테이블의 정보를 유지하는 것입니다. SP가 실행될 다음 번에이 사용자 테이블을보고 인덱스가 이미 삭제되었는지 확인하십시오.

하지만이 모든 작업을 수행해야합니까, 동적 SQL을 사용하여 인덱스를 삭제하고 IF EXISTS 블록을 사용하여 랩핑하면 도움이 될 수 있습니까?

+0

감사 Satheesh. SQL을 사용하여 인덱스를 삭제했지만 예를 들어 모니터링을 위해 통계를 수집하기 위해 프로 시저가 실행 중일 때 오래된 정보가 나타납니다. –