본문 바로가기

SQL/SQL 교육

[교육] SQL초보에서실전전문가까지 ORACLE - 1

Oracle 


INDEX

HINT

nested loop  할 것을 HINT로 Hash Join 을 유도하면 빨라질 수 있음


9i 에서는 RAC 미지원 그때는 OS기반의 클러스터 사용

10g 부터 Oracle 에서 지원 - 호환성 ↑

RAC(Real Application Clusters)


비절차적 언어 : 0 ~ 100 순서대로 다 뒤지는게 아니라 30 ~ 40 번만 원하는데로 검색가능


DB의 구조

ㅁ메모리(SGA:System Global Area) - (※ PGA)

DB Cache  : 빈번하게 사용되는 데이터를 임시보관

+ Shared Pool : 실행계획 데이터를 보관, 통계도 포함 

+ Redo : 트랜잭션 로그

ㅁDBWR (DB Writer) : 스토리지 데이터를 메모리 DB Cache에 올려주는 역할

ㅁStorage


메모리 부족 경고, 오류 발생시에는 TempDB의 용량이 중요하다. 이것만 늘려줘도 문제 해결되는 경우가 많다.


DBA가 Table Space 를 체크하고 주기적으로 늘려주는 작업을 해준다. 왜 자동증가를 하지 않나? 그럴경우 물리적 Disk 상에 비효율적으로 비어있는 공간이 생길 수 있다. 비싼 HW를 낭비하는 원인이 된다.


Commit 을 처리하지 않으면 DBWR 이 물리 Storage에 기록하지 않는다. 

그리고 DML이 들어오면 DB Cache에 변경된 내용을 가지고 있고, 변경된 값은 참조 데이터로 이전 값을 가지고 있다.

그래서 현재 세션 사용자는 변경된 값을 보게되고, 다른 세션에서는 변경 이전 참조 데이터를 보게된다.


성능측정시 DISK IO를 보게되는데, 그럼 이것도 고려한다면 IO 캐쉬에 올린 상태로 측정해야 하나?


Hash Join의 경우 Nested Loop Join 과 크게 다른 점은 Hash는 memory에 Bulk 데이터를 올려놓고 Join 하기 때문에 성능이 좋다고 함 <- 이해 안됨. 이게 뭥미..


Inline View : FROM 절에 들어가있는 SubQuery임


샘플용 테이블 자료 링크

http://yjan.tistory.com/entry/SQL%EB%A7%88%EC%8A%A4%ED%84%B0-%EC%83%98%ED%94%8C-%EC%98%88%EC%A0%9C%ED%85%8C%EC%9D%B4%EB%B8%94-%EB%A7%8C%EB%93%A4%EA%B8%B0