Bloated 시스템 테이블의 성능을 향상시킬 수 있습니까?


12

배경 :
많은 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

통계를 업데이트하고 인덱스를 재구성하면 도움이되지만 크게 도움이되지는 않습니다.


아야. 나는 당신이 엉망인 멀티 테넌트 유형을하고 있다고 생각하고 있습니다. 모든 사람의 데이터를 동일한 테이블에 유지하고 뷰로 필터링하고 동의어를 사용하여 기본 개체의 이름을 대규모로 지정합니까? 어느 쪽이든, 나는 당신을 위해 느낀다
Philᵀᴹ

2
멀티 테넌트? 사실은 아닙니다. 그렇지 않습니다. 꽤 엉망 이지요? FWIW, 모든 응용 프로그램 사용자에 대해 모든 테이블에 대해 5 개의 SYNONYM이 생성된다는 것을 이해하고 있습니다. 운이 좋은 날.
Dave Mason

이러한 개체 중 일부에 대한 권한을 제거하면 성능이 향상되어 잠재적으로 사용할 수있는 개체가 줄어 듭니다. 사용자 수준의 옵션인지 여부는 알 수 없습니다.
ConstantineK

이것에 대한 실행 계획을 보는 것이 흥미로울 것입니다. 어쩌면 여기에 포함시킬 방법이 없다면 SQL 센트리 계획 탐색기에서 answers.sqlperformance.com에 게시 하고 링크 할 수 있습니다. 나는 그것을보고
흥미로울

답변:


1

아직 수행하지 않은 경우 기본 데이터 파일을 나머지 데이터 별도의 스핀들 세트로 이동하여 성능을 얻을 수 있습니다 ( 파일 및 파일 그룹 아키텍처SQL Server : 시스템 테이블의 파일 그룹 만 해당? ).


필자는 이것이 좋은 조언이라고 생각하지만 IO 설정이 디스크가 연결된 표준 물리적 서버가 아닌 경우 (예 : SAN이있는 가상 인스턴스) SSD 드라이브가 기본 데이터 파일을 분리 할 때 눈에 띄는 영향을 최소화하는 경우 영향을 크게 줄이지는 않습니다. 다른 위치로?
SheldonH

1
하드웨어를 제어 할 수있는 경우 (예 : 타사에서 호스팅하지 않는 경우) SAN에 서로 다른 스핀들 세트가있을 수 있습니다 (예 : 둘 이상의 개별 RAID-10 볼륨). SSD와 함께 사용하거나 호스팅하는 경우 스핀들이 없으며 IO는 주로 드라이브와 마더 보드 간의 병목 현상 (예 : SATA, RAID 또는 NIC 카드, 케이블 연결, 라우터 / 스위치)에 의해 제한됩니다. , SAN, SSD 속도) 때문에 파일을 분리해도 아무런 효과가 없습니다.
Ziggy Crueltyfree Zeitgeister 23시 55 분
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.