본문 바로가기

Oracle Database SQL Tuning Guide 12c Release 2 (12.2)

Chapter17.Transporting Optimizer Statistics

17.Transporting Optimizer Statistics
옵티 마이저 통계를 데이터 딕셔너리에서 사용자 정의 통계 테이블로 내보내고 가져올 수 있습니다.
한 데이터베이스의 통계를 다른 데이터베이스로 복사 할 수도 있습니다.
 
17.1 About Transporting Optimizer Statistics
데이터베이스간에 옵티 마이저 통계를 전송할 때 DBMS_STATS를 사용하여 스테이징 테이블과 통계를 복사하고 
도구를 사용하여 대상 데이터베이스에서 테이블 내용에 액세스 할 수있게해야합니다.
가져 오기 및 내보내기는 프로덕션 통계를 사용하여 응용 프로그램을 테스트 할 때 특히 유용합니다.
DBMS_STATS.EXPORT_SCHEMA_STATS를 사용하여 프로덕션 데이터베이스의 스키마 통계를 테스트 데이터베이스로 
내보내어 개발자가 응용 프로그램을 배포하기 전에 현실적인 환경에서 실행 계획을 조정할 수 있습니다.
다음 그림은 Oracle Data Pump 및 ftp를 사용하는 프로세스를 보여줍니다.
 
Figure 17-1 Transporting Optimizer Statistics
그림 17-1에 표시된 것처럼 기본 단계는 다음과 같습니다.
1. 프로덕션 데이터베이스에서 DBMS_STATS.EXPORT_SCHEMA_STATS를 사용하여 데이터 사전의 통계를 스테이징 테이블로 복사하십시오.
2. Oracle Data Pump를 사용하여 스테이징 테이블에서 .dmp 파일로 통계를 내 보냅니다.
3. ftp와 같은 전송 도구를 사용하여 .dmp 파일을 프로덕션 호스트에서 테스트 호스트로 전송합니다.
4. 테스트 데이터베이스에서 Oracle Data Pump를 사용하여 .dmp 파일에서 스테이징 테이블로 통계를 가져옵니다.
5. DBMS_STATS.IMPORT_SCHEMA_STATS를 사용하여 스테이징 테이블의 통계를 데이터 사전에 복사하십시오.
 
17.2 Transporting Optimizer Statistics to a Test Database: Tutorial
이 절에서는 프로덕션 데이터베이스에서 테스트 데이터베이스로 스키마 통계를 전송하는 방법에 대해 설명합니다.
 
Prerequisites and Restrictions
옵티 마이저 통계를 내보낼 준비를 할 때 다음을 참고하십시오.
• 통계를 내보내기 전에 통계를 보관할 테이블을 만들어야합니다.
프로 시저 DBMS_STATS.CREATE_STAT_TABLE은 통계 테이블을 생성합니다.
• 옵티마이 저는 사용자 소유의 테이블에 저장된 통계를 사용하지 않습니다.
최적화 프로그램이 사용하는 유일한 통계는 데이터 사전에 저장된 통계입니다.
옵티마이 저가 사용자 정의 테이블에서 통계를 사용하게하려면 DBMS_STATS 임포트 프로 시저를 사용하여 이러한 통계를 데이터 사전으로 임포트하십시오.
• 데이터 펌프 내보내기 및 가져 오기 유틸리티는 테이블과 함께 데이터베이스에서 옵티 마이저 통계를 내보내고 가져옵니다.
열에 시스템 생성 이름이 있으면 Original Export (exp)는 데이터와 함께 통계를 내보내지 않지만 Data Pump Export에는이 제한이 적용되지 않습니다.
 
Note:
DBMS_STATS를 사용하여 통계를 내보내고 가져 오는 것은 데이터 펌프 내보내기 및 가져 오기를 사용하는 것과 별개의 작업입니다.
가정
이 자습서에서는 다음을 가정합니다.
• 프로덕션 데이터베이스에서 대표적인 sh 스키마 통계를 생성하고 DBMS_STATS를 사용하여이를 테스트 데이터베이스로 가져 오려고합니다.
• 관리 사용자 dba1은 프로덕션 및 테스트 데이터베이스 모두에 존재합니다.
• 스키마 통계를 저장하기 위해 opt_stats 테이블을 생성하려고합니다.
• Oracle Data Pump를 사용하여 opt_stats 테이블을 내보내고 가져 오려합니다.
스키마 통계를 생성하고이를 별도의 데이터베이스로 가져 오려면 다음을 수행하십시오.
1. 프로덕션 호스트에서 SQL * Plus를 시작하고 프로덕션 데이터베이스에 관리자 dba1로 연결합니다.
2. 프로덕션 통계를 보유 할 테이블을 작성하십시오.
 
최적화 데이터베이스 통계를 테스트 데이터베이스로 전송 : 자습서
예를 들어, 다음 PL/SQL 프로그램을 실행하여 사용자 통계 테이블 opt_stats를 작성하십시오.
BEGIN
DBMS_STATS.CREATE_STAT_TABLE (
ownname => 'dba1',
stattab => 'opt_stats'
);
END;
/
 
3. 스키마 통계를 수집하십시오.
예를 들어 다음과 같이 스키마 통계를 수동으로 수집합니다.
-- generate representative workload
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SH');
 
4. DBMS_STATS를 사용하여 통계를 내 보냅니다.
예를 들어, 스키마 통계를 검색하여 이전에 작성한 opt_stats 테이블에 저장하십시오.
BEGIN
DBMS_STATS.EXPORT_SCHEMA_STATS (
ownname => 'dba1',
stattab => 'opt_stats'
);
END;
/
 
5. Oracle Data Pump를 사용하여 통계 테이블의 내용을 내 보냅니다.
예를 들어, 운영중인 스키마 프롬프트에서 expdp 명령을 실행하십시오.
expdp dba1 DIRECTORY=dpump_dir1 DUMPFILE=stat.dmp TABLES=opt_stats
 
6. 덤프 파일을 테스트 데이터베이스 호스트로 전송하십시오.
 
7. 테스트 호스트에 로그인 한 다음 Oracle Data Pump를 사용하여 통계 테이블의 내용을 가져옵니다.
예를 들어 운영 스키마 프롬프트에서 impdp 명령을 실행하십시오.
impdp dba1 DIRECTORY=dpump_dir1 DUMPFILE=stat.dmp TABLES=opt_stats
 
8. 테스트 호스트에서 SQL*Plus를 시작하고 테스트 데이터베이스에 관리자 dba1로 연결합니다.
9. DBMS_STATS를 사용하여 사용자 통계 테이블에서 통계를 가져 와서 데이터 사전에 저장하십시오.
다음 PL/SQL 프로그램은 테이블 opt_stats의 스키마 통계를 데이터 사전으로 가져옵니다.
BEGIN
DBMS_STATS.IMPORT_SCHEMA_STATS(
ownname => 'dba1',
stattab => 'opt_stats'
);
END;
/
cs