cd database/대용량데이터베이스

대용량 DB 4강 정리(병렬처리, DB내부구조)

성덕 2014. 4. 15. 22:49

1. parallel 프로세싱

 

l  Parallel 프로세싱을 왜 사용하는가?

-       복잡한 쿼리의 수행속도의 개선

-       배치작업(다량의 데이터)

-       저렴한 cost의 투자로 퍼포먼스를 발휘할 수 있음.

 

l  예제

SELECT  sum(revenue), store

FROM   line_items

WHERE  profit(price, cost, units) > 0.2

GROUP BY store

 

 

이와 같은 작업을 parallel로 처리하면,

1. 각각의 데이터를 CPU별로 쪼개서 range 스캔을 함.

2. profit 함수 연산을 함.

3. group by를 위해 상점별로 range 별로 sort

(** 10g이전에는 자동 sort, 이후에는 order by 따로 적용 필요)

4. 결과를 query coordination 에 의해서 결과를 모아서(grouping) 실행결과를 출력함.

 

2. parallel 쿼리의 실행구조

-       Static partition

n  정적으로 물리적으로 분할되어 있음

n  관리가 편함

n  퍼포먼스 면에서도 좋음

n  이마트에서 계산하려고 줄 서있는 것과 같음

 

-       Dynamic partition

n  가변성이 있는 구조에서 사용.

n  물리적인 I/O 가 다량 분산되어 있기 때문에 다량의 데이터 처리에 부담.

 

3. parallel 사용방법

-        table creation(create index) 하면서 full scan 시 무조건 parallel로 처리하도록 할 때  parallel degree 를 설정.

n  Ex) parallel 20; 로 설정 시 20개의 cpu bound job으로 돌아감.

( ** degree 4이상 주지 말 것!)

n  최소 CPU 3개 이상은 되어야 parallel 처리의 의미가 있음

 

-        Alter Table (alter Index ) parallel 설정

n  오라클 block 4k짜리가 있다. 데이터를 집어넣기 시작해서 데이터 양이 full로 찼을 때, 특정데이터의 값을 update 하고자 할 때 빈공간이 없기 때문에 다른 block에서 사용하고, 그 정보를 링크 시켜놓음

è Block chain 현상 (오라클 6)

n   현상을 보완하기 위해 데이터 full일 때 하나의 데이터가 수정되어 row piece 가 쪼개질 것 같으면(1과 같은경우) row전체가 다른 block으로 이동함

è row migration (오라클 7)

n  그리고 이 chaning 현상을 막기 위해서 pctfree 가 등장.

Pctfree 10 설정 시 10%만 남으면 다른 block을 사용. 사용 하고 있는 Block 안에 있는 데이터 수정 시에는 그 설정한 10%안의 공간으로 사용한다. 그러나 10%경계선에서 데이터를 추가로 삭제 하여도 다시 insert 될 때는 그 빈 block을 사용할 수 없는데,

n   남은 90%에서 데이터를 계속 삭제 후 일정 수준 이하로 떨어질 경우 빈공간을 사용할 수 있도록 설정 할 수 있음.

è pctused

n  인덱스에는 pctused와 같은것이 없기 때문에 데이터가 삭제되도 빈 공간이 계속 할당되어 있을 뿐 재사용이 불가하다. 그래서 Balance-tree à skew 현상이 발생하게 됨.

è  rebuild 작업을 필요!. (오라클 7.3)

 

4. Client vs Server 처리의 주체?

-       작업에 따라 클라이언트 or 서버에 맞게 개발해야 함.(R&R에 맞게?-_-)

-       DBMS call 횟수를 줄여야 한다.

n  DB에서 세션 물릴 때 DB서버에서는 PGA(resource)가 할당되어 커넥션이 되고, Disconnect 시 할당된 resource를 반납 하는데 이 횟수가 잦으면 시스템에 부하가 발생함.

è  그래서, DB호출이 잦은 경우 API 방식으로 프로그래밍 하여 Connection 세션을 유지하도록 함

 

5. DBMS 내부구조

-       DB StartUp이 되면 인스턴스가 start 되고 메인 메모리에 SGA할당되어 상주하게 된다. SGA의 영역에 가장 큰 영역이 DB Block Buffer phycal I/O를 줄이기 위해 Block Buffer 캐시를 만들어서 자주쓰는 Block은 메모리에서 I/O하도록 함.

(도서관의 최근 대여 목록과 같음ㅋㅋ)

n  쿼리는 바인딩쿼리로 짜야 변수가 변경되어도 같은 쿼리로 인식하여 결과가 빠르게 도출됨.

-       Redo 로그 버퍼 데이터의 모든 변경사항 before after 이미지를 리두로그 버퍼에 쌓임.