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의 의미?