본문 바로가기

sql_tuning

6. 병렬처리

728x90
반응형

병렬처리가 무엇인가?

 SQL 문이 수행해야 작업범위를 여러개의 작은 단위로

 나누어 여러 프로세서가 동시에 처리하는 것을 말한다.

 

*병렬처리

 1. 하나의 서버내에서의 병렬처리 ----> 오라클

 2. 2~4 대의 서버에서의 병렬처리 ----> 오라클 RAC

     ***서버는 컴퓨터라고 생각하면 편함***

 3. 여러대의 서버에서 각각 병렬처리--> 하둡

 

 

하둡을 이용하게 되면 분산 컴퓨팅 방식을 사용해서

 기존 데이터 분석방식으로는 상상도 못했던 성과를 보여준다.

:

  2008 뉴욕 타임즈 130 분량의 신문기사 1100 페이지를

  아마존 하둡을 이용해서 하루만에 PDF 변환하는데

 성공했다. 소요된 비용이 200만원에 불과했다.

 하둡을 이용하지 않으면 14년이 소요되는 엄청난 작업량이다.

                         (POINT : )

 

 

 

 

 

 

병렬 DML 작업

 * insert 문의 성능을 높이기 위한 방법

  (high water mark 위로 data 입력하는 명령어)

*append 힌트 : high water mark 위로 데이터를 입력하겠다.

*parallel 힌트 : high water mark 위로 데이터를 입력하는데

                     병렬구조로 입력하겠다.

                  (짝꿍: alter session enable parallel dml;)

 

노란색 data 입력.

HWM = high water mark

 

create table emp302

 as

 select *

 from emp

 where 1=2;

 

insert into emp302

 select *

 from emp;

 

select * from emp302;

 

delete from emp302;

 

commit;

 

---------------------

여기까지가 일반적으로 데이터 넣는 방법.

이제 구조만 남기고 append insert 한다.

      

*high water mark 위로 데이터 입력하는 방법

 

 insert /*+ append */ into emp302

 select *

 from emp;

 

commit;

 

select * from emp302;

 

 

1. append 힌트: high water mark 위로 데이터를 입력하겠다.

 

 

설명: 저장 공간 낭비는 생기지만 빨리 insert 있다.

       빨리 insert 있는 방법

2.parallel 힌트: high water mark 위로 데이터를 입력하는데

                      병렬로 입력하겠다.

                  (짝꿍: alter session enable parallel dml;)

--------------------------------

다시 날리고

 

delete from emp302;

commit;

 

----------병렬로 입력하겠다.

 

alter session enable parallel dml;

 

insert /*+ parallel(e3, 4) */ into emp302 e3

 select * from emp;

**parallel 안에 컴마는 써도되고

     안써도 되고 상관없음.

 

commit;

 

select * from emp302;

 

 

 

문제99. (오늘의 마지막 문제)

sales테이블의 데이터를 sales 테이블의 구조만 가지고 있는

slaes500 테이블에 입력할

병렬로 입력했을 (parallel)

병렬이 아닌 serial 입력했을 (append) 속도 차이를 확인하시오

 

create table sales

 as

 select * from sh.sales;

 

select count(*) from sales;

-----------------------------------------------------

create table sales500

 as

  select *

 from sales

 where 1=2;

 

append

  

 

insert /*+ append */ into sales500

select * from sales;

 

commit;

 

set timing on

 

select * from sales500;

 

다시 지우고

 

delete from table sales500;

안먹히면

truncate table sales500;

 

commit;

 

 

parallel

   

 

alter session enable parallel dml;  <<병렬로 insert 한다.

 

insert /*+ parallel(s5, 4) */ into sales500 s5

 select * from sales;

**parallel 안에 컴마는 써도되고

     안써도 되고 상관없음.

 

commit;

******commit 안하면 되질 않는다오오오******

 

set timing on

 

select * from sales500;

 

 

 

 

728x90
반응형

'sql_tuning' 카테고리의 다른 글

Section2. 오라클 아키텍처 개요  (0) 2023.10.29
7. 기타 튜닝 방법들  (0) 2019.04.02
5. 파티셔닝  (0) 2019.04.02
4. 서브쿼리 튜닝  (0) 2019.04.02
3. 조인 튜닝  (0) 2019.04.02