보고 있 는 ORACLE 튜 토리 얼 은 Oracle SQL 성능 최적화 시리즈 학습 1 입 니 다.1. 적합 한 ORACLE 최적화 기 선택 ORACLE 의 유 틸 리 티 는 모두 3 가지 가 있 습 니 다. a. RULE (규칙 에 기초 하 다 b. COST (원가 에 기초 하 다 c. CHOOSE (선택적으로 결 성 된 유 틸 리 티 를 설정 합 니 다.init.ora 파일 에서 OPTIMIZERMODE 매개 변수의 각종 성명,예 를 들 어 RULE,COST,CHOOSE,ALLROWS,FIRST_ROWS . 물론 SQL 문장 급 이나 세 션(session)급 에서 덮어 씁 니 다. 원가 기반 최적화 기(CBO, Cost-Based Optimizer) , 분석 을 자주 실행 해 야 합 니 다. 데이터베이스 에 있 는 대상 통계 정보 추가(object)명령 statistics)의 정확성. 데이터베이스 의 유 틸 리 티 모드 가 선택 적(CHOOSE)으로 설정 되면 실제 유 틸 리 티 모드 는 analysis 명령 을 실행 한 적 이 있 는 지 여부 와 관련 이 있 습 니 다. 만약 table 이 분석 되 었 다 면, 유 틸 리 티 모드 는 자동 으로 CBO 가 됩 니 다. , 반대로 데이터 베 이 스 는 RULE 형식의 최적화 기 를 사용 할 것 이다. 부족 한 상황 에서 ORACLE 는 CHOOSE 최적화 기 를 사용 합 니 다. 불필요 한 전체 스 캔 을 피하 기 위해 서(full table scan) , 너 는 가능 한 한 CHOOSE 최적화 기 를 사용 하 는 것 을 피해 야 하 며,규칙 에 기초 하거나 원가 에 기초 한 최적화 기 를 직접 사용 해 야 한다. 2. Table 접근 방식 ORACLE 두 가지 방문 표 에 기록 하 는 방식 을 사용 합 니 다. a. 전체 표 스 캔 전체 표 스 캔 은 표 의 모든 기록 에 순서대로 접근 하 는 것 이다. ORACLE 는 한 번 에 여러 개의 데이터 블록(database)을 읽 습 니 다. block)의 방식 은 전체 표 스 캔 을 최적화 합 니 다. b. ROWID 접근 표 통과 하기 ROWID 기반 접근 방식 을 사용 하여 방문 표 의 효율 을 높 일 수 있 습 니 다. , ROWID 는 표 에 기 록 된 물리 적 위치 정 보 를 포함 하고 있 습 니 다.ORACLE 은 색인(INDEX)을 사용 하여 데이터 와 데 이 터 를 저장 하 는 물리 적 위치(ROWID)간 의 관 계 를 실현 합 니 다. 보통 색인 은 ROWID 에 빠르게 접근 하 는 방법 을 제공 하기 때문에 색인 열 을 기반 으로 하 는 검색 은 성능 을 향상 시 킬 수 있다. 3. 공유 SQL 구문 같은 SQL 문 구 를 반복 적 으로 해석 하지 않 기 위해 첫 번 째 해석 후, ORACLE 는 SQL 문 구 를 메모리 에 저장 합 니 다.이 문 구 는 시스템 전역 SGA(system)에 있 습 니 다. global area)의 공유 풀(shared) buffer pool)의 메모 리 는 모든 데이터베이스 사용자 가 공유 할 수 있 습 니 다. 따라서 SQL 문 구 를 실행 할 때(때로는 커서 라 고도 함) 이전에 실 행 된 문구 와 완전히 같다. ORACLE 는 이미 해 석 된 문장 과 가장 좋 은 실행 경 로 를 빠르게 얻 을 수 있 습 니 다. ORACLE 의 이 기능 은 SQL 의 실행 성능 을 크게 향상 시 키 고 메모리 의 사용 을 절약 했다. 안 타 깝 게 도 ORACLE 는 간단 한 시계 에 만 고속 버퍼(cache)를 제공 합 니 다. buffering) ,이 기능 은 다 중 표 연결 조회 에 적용 되 지 않 습 니 다. 데이터베이스 관리 자 는 init.ora 에서 이 지역 에 적합 한 인 자 를 설정 해 야 합 니 다.이 메모리 영역 이 클 수록 더 많은 문 구 를 유지 할 수 있 습 니 다.물론 공 유 될 가능성 도 큽 니 다. 당신 이 ORACLE 에 게 SQL 문 구 를 제출 하면 ORACLE 는 먼저 이 메모리 에서 같은 문 구 를 찾 습 니 다. 여기 서 밝 혀 야 할 것 은 ORACLE 가 이들 에 대해 엄격 한 매 칭 을 취 하 는 것 이다.공 유 를 달성 하려 면 SQL 문 구 는 반드시 똑 같 아야 한다(빈 칸,줄 바 꾸 기 등 포함). 공 유 된 문 구 는 세 가지 조건 을 만족 시 켜 야 합 니 다. A. 문자 비교: 현재 실 행 된 문장 과 공유 탱크 의 문장 은 완전히 같 아야 합 니 다. 예 를 들 면: SELECT * FROM EMP; 아래 와 각각 다르다 SELECT * from EMP; Select * From Emp; SELECT * FROM EMP; B. 두 문장 이 가리 키 는 대상 은 반드시 완전히 같 아야 한다. 예 를 들 면: 사용자 대상 어떻게 방문 합 니까? Jack sal_limit private synonym Work_city public synonym Plant_detail public synonym Jill sal_limit private synonym Work_city public synonym Plant_detail table owner 다음 SQL 문 구 를 이 두 사용자 사이 에서 공유 할 수 있 는 지 고려 해 보 세 요. SQL 공유 가능 여부,이유 select max(sal_cap) from sal_limit; 안 돼.사용자 마다 private 가 있 습 니 다. synonym - sal_limit , 그것들 은 다른 대상 이다. select count(*0 from work_city where sdesc like 'NEW%'; 네.두 사용자 가 같은 대상 Public 에 접근 합 니 다. synonym - work_city select a.sdesc,b.location from work_city a , plant_detail b where a.city_id = b.city_id 안 돼.사용자 잭 private 를 통 해 synonym plant 방문detail 그러나 표 의 소유자 입 니 다.대상 이 다 릅 니 다. C. 두 SQL 문 구 는 같은 이름 의 바 인 딩 변 수 를 사용 해 야 합 니 다(bid). variables) 예 를 들 면: 첫 번 째 그룹의 두 SQL 문 구 는 같 습 니 다(공유 가능).두 번 째 그룹의 두 문 구 는 다 릅 니 다(실행 할 때 도 서로 다른 바 인 딩 변수 와 같은 값 을 부여 합 니 다).
[NextPage] a. select pin , name from people where pin = :blk1.pin; select pin , name from people where pin = :blk1.pin; b. select pin , name from people where pin = :blk1.ot_ind; select pin , name from people where pin = :blk1.ov_ind;
이전 페이지