'대용량 대이터베이스 솔루션'에 해당되는 글 1건

  1. 2014.10.15 1-4강

 

  • 병렬 처리
  1. 병렬 처리는 1개의 SQL Task가 무거울 때, 사용함.
  2. 병렬 조회, 병렬 데이터 로딩, 병렬 인덱스 생성, 병렬 복구

       

  • 병렬 처리 실행 구조

Select sum(revenue), store from line_items profit(price, cost, units) > 0.2 group by store

  1. 동적 데이터 파티션
  2. Profit 함수 병렬 실행하며, line_items 스캔
  3. Store 별로 sum revenues Sorting
  4. Query coordination

       

  • 병렬 처리 분할 구조

동적 분할

정적 분할

모든 CPU에 부하가 균등히 분배되어 수행

임의의 위치에 데이터 분산 저장

데이터 파일별 독립적인 관리 불가능

불규칙한 분포도를 가진 처리 범위 작업시 유리

다량의 데이터 처리에 부담

정해진 CPU를 바꾸지 못함

원하는 위치에 데이터를 저장

독립적인 INDEX 재생성 가능

데이터 파일 별 독립적인 ONLINE, OFFLINE

전략 적인 분할대책 수립

다량의 데이터 관리에 유리(IO가 나눠져 있음)

   

  • 병렬처리 사용방법
  1. 생성시 같이 정의: 테이블, 인덱스 생성시 뒤에 parallel N;
  2. 이미 작성된 오브젝트에 대한 병렬처리: 테이블, 인덱스 변경시 뒤에 parallel N;
  3. 해당 SQL만 병렬로 처리(Hint 기능 사용): Select /*+ parallel(line_item,20)*/ …. From line_item…

   

 

  • PCTFREE, PCTUSED, row chaining, row migration
  1. PCTFREE: row chaining 현상을 막기 위해, Block의 일부분을 update를 위한 공간으로 남겨 두는 것(기본값 10%)
  2. PCTUSED: PCTFREE 지점까지 데이터가 들어왔다가 삭제 되어도, 바로 데이터를 받지 않고 일정 수준까지 데이터 양이 줄었을 경우 데이터가 입력 되는 것(기본값 40%)
  3. Row Chaining: 기존의 데이터가 DB_BLOCK_SIZE보다 큰 데이터로 UPDATE 되었을 경우 인접한 다른 블록에 데이터를 기록하고, 원래 BLOCK에는 포인터를 두는 기법
  4. Row Migration: 기존의 데이터가 DB_BLOCK_SIZE보다 큰 데이터로 UPDATE 되었을 경우 새로운 Block으로 데이터를 완전히 옮기는 기법

   

 

  • 병렬처리 적용범위
  1. Table Access(FULL)
  2. MERGE JOIN
  3. NESTED LOOPS
  4. HASH JOIN
  5. SORT (GROUP BY)
  6. SORT (JOIN)
  7. SORT (ORDER BY)
  8. SORT (UNIQUE)
  9. AGGREGATE (GROUP BY)
  10. CREATE TABLE AS SELECT .. FROM ..
  11. UNION, UNION ALL
  12. ALTER INDEX .. REBUILD ..

   

 

  • 병렬데이타 로딩
  1. SQL*Loader를 여러 개의 세션에서 동시 수행
  2. 동일한 테이블에 동시에 Fast Bulk Load
  3. CPU 개수에 따라 선형적인 수행성능 증가
  4. 병렬 인덱스 생성

   

 

  • 병렬인덱스 생성
  1. CREATE INDEX 명령어 수행시
  2. 인덱스 생성에 필요한 테이블 Scan, Sort 기능을 병렬로 수행
  3. 초기 DB 데이터 적재(LOAD) 시
  4. 인덱스 재 구성시
  5. BITMAP INDEX 생성

   

 

  • Client/Server
  1. 처리 작업은 서버에서 처리를 하고, 결과만 Client에게 알려주는 방식으로 구성한다.
  2. DB Call역시 퍼포먼스에 영향을 미친다.

   

 

  • 내부구조  

  • 동작 순서
  1. Listener: 사용자의 요청이 오면 Dispatcer와 연결 시켜준다.
  2. Dispatcher: 요청된 SQL문을 Request Queue에 저장한다.
  3. Multi-Threaded Server: Shared Server에서 Request Queue에 저장된 SQL문을 실행하고, 결과를 Response Queue 에 저장한다.
  4. Dispatcher는 Response Queue에서 결과를 가져다 사용자에게 전달한다.

 

 

  • SGA 영역(메인 메모리에 상주함)
  1. Database Buffer: 디스크에서 읽은 데이터가 올라가는 영역
  2. Shared SQL Pool: 라이브러리 캐쉬 영역과 데이터 딕셔너리 캐쉬 영역으로 구성되어 있다. 라이브 캐쉬영역은 실행 코드(SQL, SP, Function)와 실행 계획이 저장되고, 딕셔너리 캐쉬 영역은 사용자가 읽게 되는 자료 사전 테이블과 뷰 정보가 저장된다.
  3. Redo Log Buffer: 데이터의 변경사항(DML)을 저장한다.

 

 

  • 프로세스 영역
  1. PMON: 사용자 Process 관장하는 역할
  2. LCKn: Oracle Parallel Server 환경에서 Lock과 관련된 프로세스(데이터의 Ownership 등을 관리)
  3. RECO: 분산 시스템에서 공유되는 객체 간의 동기화를 설정할 때 사용하는 프로세스(2 Page Commit)
  4. SMON: 백그라운드 프로세스와 데이터베이스 메모리 영역의 상태를 감시
  5. DBWR: 사용자가 입력한 SQL문에 의해 데이터를 DB Buffer로 올리거나, 디스크에 저장하는 작업을 수행
  6. CKPT: 몇 초마다 DISK에 작성하라는 체크포인트 프로세스(DBWR, LGWR 동작 시킴)
  7. LGWR: SQL문을 커밋하면 모든 작업 내용을 리두 로그 파일에 백업하는 작업 수행
  8. ARCH: 아카이브 모드로 운영할 떄 사용되는 프로세스로 Redo Switch 발생시 작업을 수행한다.

 

 

 

신고

'대용량 데이터베이스 솔루션' 카테고리의 다른 글

2-2강  (0) 2014.10.20
2-1강  (0) 2014.10.17
1-4강  (0) 2014.10.15
1-3강  (0) 2014.10.15
1-2강  (0) 2014.10.14
1-1강  (0) 2014.10.07
Posted by TM ~ing