배경 :
많은 VIEW와 수많은 SYNONYM을 가진 수많은 데이터베이스가 있습니다. 예를 들어, 하나의 db는 10k 이상의 VIEW와 2 백만 이상의 SYNONYM을 가지고 있습니다.
일반적인 문제 : 일반적으로 시스템 테이블과
관련된 쿼리는 sys.objects
속도가 느립니다. 관련된 검색어 sys.synonyms
는 빙하입니다. 성능을 향상시키기 위해 무엇을 할 수 있는지 궁금합니다.
특정 예이
명령은 타사 도구에 의해 실행됩니다. 앱과 SSMS 모두에서 느립니다.
exec sp_tables_rowset;2 NULL,NULL
내 질문 :
어떻게하면 더 빨리 실행할 수 있습니까?
내가 시도한 것 : 이 출력을 얻는
다면 SET STATISTICS IO ON
:
(2201538 row (s) 영향을 받음)
테이블 'sysobjrdb'. 스캔 카운트 1, 논리적 읽기 28, 물리적 읽기 0, 미리 읽기 0, lob 논리적 읽기 0, lob 물리적 읽기 0, lob 미리 읽기 0.
테이블 'sysschobjs'. 스캔 카운트 1, 논리적 읽기 53926, 물리적 읽기 0, 미리 읽기 0, lob 논리적 읽기 0, lob 물리적 읽기 0, lob 미리 읽기 0.
기본 시스템 테이블에서 통계를 업데이트 할 수있었습니다. 이것은 내 SQL 2008 R2 이상 환경에서 작동했습니다.
UPDATE STATISTICS sys.sysobjrdb WITH FULLSCAN
UPDATE STATISTICS sys.sysschobjs WITH FULLSCAN
또한 인덱스 유지 관리를 수행 할 수있었습니다. 이것은 내 SQL 2012 또는 최신 환경에서 작동합니다. 예를 들어 running sp_help 'sys.sysschobjs'
은 테이블의 인덱스를 식별하고 거기에서 다음 명령을 만들고 실행합니다.
ALTER INDEX clst ON sys.sysschobjs REORGANIZE
ALTER INDEX nc1 ON sys.sysschobjs REORGANIZE
ALTER INDEX nc2 ON sys.sysschobjs REORGANIZE
ALTER INDEX nc3 ON sys.sysschobjs REORGANIZE
통계를 업데이트하고 인덱스를 재구성하면 도움이되지만 크게 도움이되지는 않습니다.