태그 보관물: dbcc

dbcc

SQL Server 기준 테스트를위한 결정적인 단계 목록? Server를 “깨끗한”상태로 설정합니까? 순서가

SQL Server를 사용하는 앱에 대한 성능 테스트 / 기준을 실행하기 전에 인스턴스를 다시 시작하지 않고도 인스턴스를 “깨끗한”상태로 설정할 수 있기를 원합니다. 따라야하는 단계가 있지만 올바른 순서이며 중복 단계가없는 결정적인 목록을 작성하려고합니다.

이 단계 목록이 SQL Server를 “깨끗한”상태로 설정합니까?

순서가 논리적 / 정확합니까?

중복 단계가 있습니까?

CHECKPOINT              -- Write all dirty pages

DBCC DROPCLEANBUFFERS   -- All should be clean after checkpoint?

DBCC FREEPROCCACHE      -- Clear the plan cache

DBCC FREESYSTEMCACHE    -- Is this necessary after FREEPROCCACHE?

DBCC FREESESSIONCACHE   -- May not be necessary if distributed queries aren't used, but want to catch all scenarios

EXEC SP_UPDATESTATS     -- Refresh stats

'BEGIN TESTING!'


답변

먼저, 물러서서 테스트 중에 수집 할 측정 값을 묻습니다. 예를 들어 쿼리별로 논리적 읽기를 계산하는 경우 캐시를 비울 필요가 없습니다. 논리 읽기를 사용하는 데는 열렬한 팬입니다. 데이터가 캐시되는지 디스크에 있는지 여부와 무관하며 프로덕션 환경에서는 쿼리의 데이터가 캐시되는지 여부를 추측하기가 어렵습니다 (전체 데이터베이스를 메모리에 캐시하지 않는 한) . 논리적 읽기를 최소화하도록 조정하면 데이터가 캐시에 있는지 여부에 관계없이 앱이 더 빨라집니다.

다음으로 달리기 사이에 어떤 변화가 있는지에 대해 질문했습니다. 예를 들어, 제안한대로 각 데이터베이스에서 EXEC SP_UPDATESTATS를 실행하면 업데이트 된 테이블에 대한 통계를 다시 샘플링합니다. 그러나 fullscan으로 통계를 업데이트하지 않는 한 테이블에서 임의의 행을 가져옵니다. 이는 반복 할 수 없으며 실제로 그렇게하고 싶지는 않습니다. 대신, 항상 동일한 데이터를 테스트하기 위해 각 실행간에 데이터베이스를 복원 할 수 있습니다. 테스트에서 삽입 / 업데이트 / 삭제를 수행하는 경우 데이터베이스를 복원하지 않으면 (데이터 추가 / 변경, 데이터 통계 변경으로 인해) 각 실행마다 다른 성능 프로파일이있을 수 있습니다.


답변