내가 여기 (SQL Server 2008을 사용) 내 접근 방식, 지금 같은 상황에있어 :
샘플 수백만 개의 데이터 행과 별도의 "숫자"테이블을 만듭니다. 테이블에 임의의 문자열, GUID, 숫자 값 등이있을 수 있습니다. 스키마에 샘플 데이터를 삽입하는 절차를 작성하십시오. 다른 사용자 ID 등을 시뮬레이트하기 위해 숫자 열의 모듈러스 (%)를 사용하십시오.
첫 번째 표와 유사한 다른 "NewData"표를 작성하십시오. 이것은 추가되는 새로운 레코드를 시뮬레이트하는 데 사용될 수 있습니다.
테스트 쿼리의 행 개수, 시작 시간 및 종료 시간을 기록 할 수있는 "TestLog"테이블을 만듭니다.
새 레코드 또는 기존 레코드를 적절하게 사용하여 응용 프로그램이 수행 할 것으로 예상되는 워크 플로를 시뮬레이트하는 저장 프로 시저를 작성하십시오.
성능이 빠른 것처럼 보이는 경우 캐시가 누락 될 확률을 고려하십시오! 예를 들어 프로덕션 서버의 RAM이 32GB이고 테이블 크기가 128GB 일 것으로 예상되는 경우 임의의 행 조회는 버퍼 캐시에서 75 % 이상 찾을 수 없습니다.
하면이를 시뮬레이션하기 위해, 당신은 당신의 쿼리를 실행하기 전에 캐시를 지울 수 있습니다 :
DBCC DROPCLEANBUFFERS을; (Oracle : ALTER SYSTEM FLUSH SHARED POOL 인 경우)
인덱스 및 데이터 페이지가 디스크에서로드되어야하므로 성능이 100 배 저하 될 수 있습니다.
실행 SET STATISTICS IO ON; 쿼리 통계를 수집합니다. 쿼리의 논리적 읽기 수가 매우 높음 (> 1000) 경우를 찾습니다. 이것은 대개 전체 테이블 스캔의 표시입니다.
쿼리 접근 패턴 (검색 vs. 탐색)을 이해하고 성능을 조정하려면 표준 기술을 사용하십시오.
는 실제 실행 계획을 포함, SQL Server 프로파일 러
각 점에 관해서는 좀 더 구체적으로 할 수 있습니까? 예를 들어, Analyze the Database는 "스키마를 봐라."라는 의미 일 수 있습니다. –
귀하의 의견에 근거하여 더 많은 정보를 추가했습니다. – northpole