오라클 성능 고도화 원리와 해법 II (2016년)
병렬 조인 0 0 3,254

by 구루비 병렬처리 Partition Wise 병렬조 PQ_DISTRIBUTE [2017.05.28]


706~717

병렬 조인

emp와 dept 테이블을 조인할 때
파티션 여부에따라
둘다 되어있는경우 (full partition wise join)
한쪽만 파티셔닝 되있는 경우 (partial partion wise join)

한쪽만 파티셔닝 되있다면 파티셔닝이 되있는 테이블은 큰 테이블일 테고 다른쪽은 비교적 작은 테이블일테니 작은 테이블을 먼저 읽는다.

둘다 안되어 있는 경우로 나뉜다.(동적 파티셔닝 or 브로드캐스트)

temp 테이블 스페이스 공간이 부족 할 경우 테스트

■템프테이블 스페이스 파일 확인
set linesize 180
set pagesize 3000
col file_name for a40
select file_name,tablespace_name, autoextensible, maxbytes, maxblocks from dba_temp_files;

■템프 테이블 스페이스 값 조정
alter database tempfile 'C:\oracle\oradata\orcl\TEMP01.DBF' autoextend on maxsize 20m;
alter database tempfile 'C:\oracle\oradata\orcl\TEMP01.DBF' autoextend on maxsize unlimited;
alter database tempfile 'C:\oracle\oradata\orcl\TEMP01.DBF' autoextend off;

■ 실제 TEMPFILE SIZE 조회:

      SQL> select tablespace_name, sum(bytes)/1024/1024 mb
           from dba_temp_files
           group by tablespace_name;

■ 실제 현재 사용량 조회(수시로 변함):
 
      SQL> select ss.tablespace_name,sum((ss.used_blocks*ts.blocksize))/1024/1024 mb
           from gv$sort_segment ss, sys.ts$ ts 
           where ss.tablespace_name = ts.name
           group by ss.tablespace_name;

■ 백만건 랜덤 테이블 작성 (필요시 숫자 증가)

create table x1
as
select
  cast(dbms_random.string('A',50) as varchar2(50)) col01
, cast(dbms_random.string('A',50) as varchar2(50)) col02
, cast(dbms_random.string('A',50) as varchar2(50)) col03
, cast(dbms_random.string('A',50) as varchar2(50)) col04
, cast(dbms_random.string('A',50) as varchar2(50)) col05
, cast(dbms_random.string('A',50) as varchar2(50)) col06
, cast(dbms_random.string('A',50) as varchar2(50)) col07
, cast(dbms_random.string('A',50) as varchar2(50)) col08
, cast(dbms_random.string('A',50) as varchar2(50)) col09
, cast(dbms_random.string('A',50) as varchar2(50)) col10
from dual
connect by level < 1000001

■ 소트작업 테스트

select * from x2 order by 1;

■결과

join 시 temp 스페이스 부족시 나는 ORA 에러

//템프 테이블 스페이스 꽉 찻을 떄 (정렬 작업중, hash join 테이블 스페이스 부족)
ORA-1652: unable to extend temp segment by 128 in tablespace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TEMP

//비교용 insert 시 테이블 스페이스 부족 시
ORA-1652: unable to extend temp segment by 1024 in tablespace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TS1

//비교용 사용자 생성 temp 테이블 스페이스 부족 (정렬작업)
ORA-1652: unable to extend temp segment by 128 in tablespace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TEST_TEMP

세그먼트 숫자 128과 1024의 의미?

"구루비 주주클럽 스터디모임" 에서 2016년에 "오라클 성능 고도화 원리와 해법 II " 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3384

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입