본문 바로가기

전체 글

(88)
윈도우 함수 함수 구분 함수 설명 비고 순위 RANK 순위 1,2,2,4,5 DENSE_RANK 동일 순위를 1건으로 1,2,2,3,4 ROW_NUMBER 동일 순위 미 인정 1,2,3,4,5 집계 SUM, MAX, MIN, AVG, COUNT 합계, 최대, 최소, 평균, 건수 행 순서 FIRST_VALUE, LAST_VALUE 파티션 내 첫 번쨰, 최종 값 LAG, LEAD 이전 레코드, 이후 레코드 값 비율 CUME_DIST 파티션 내 데이터 값에 대한 누적 비율 결과 값 0~1 사이 PERCENT_RANK 파티션 내의 row 개수에 대한 누적 비율 RATIO_TO_REPORT 파티션 내의 비율 NTILE 인자 값으로 전체 로우 개수를 나누고, 인자 값의 순서를 결정 ntile(4) over(order by sa..
조인의 원리 및 활용 1. Nested Loop 조인 - Random Access 위주의 조인방식 -> Index 필수! - 조인을 한 레코드씩 순차적으로 진행 - 대용량 처리시 치명적 한계점 발생 -> 좁은 범위에서만 쓰임 -> OLTP 환경에 적합 - 인덱스 구성 전략이 매우 중요! 2. Sort merge 조인 - 소트 단계 : 양쪽 집합을 조인 컬럼 기준으로 정렬 - 머지 단계 : 정렬된 양쪽 집합을 merge - 조인을 위해 실시간으로 인덱스를 생성하는 것과 같은 효과 - 양쪽 집합을 정렬 후 NL조인과 같은 방식으로 진행하지만, PGA 영역에서 처리 -> 빠름! - 소트 부하만 감수한다면 버퍼 캐시에서 조인하는 NL조인 보다 유리 - 조인 컬럼에 인덱스 유무와 상관없이 조인 - 사용하는 경우 : Firtst 테이블..
인덱스 구조 및 이해(2) 4. 테이블 Random Access 부하 - Row ID의 구조 1) 확장적구조 (8i 부터) - 데이터 오브젝트(Index, Table 등) 번호 (6자리) - 데이터 파일 번호 (3자리) - 블록번호 (6자리) - 로우번호 (3자리) 2) Restricted 구조 (8i 이전) - 블록번호, 파일번호, 로우번호 Sequential Access Random Access - 하나의 블록에서 순차적으로 읽는다. - 알차게 빼 먹는다 - Index Leaf Block에서 Read / Full Scan - 적은 비용 - Full Scan일 경우 Multi Block I/O 가능 - 주로 하나의 블록에서 하나의 레코드만 - 높은 비용 . 낮은 효율 - Rowid 이용 테이블 Access - DBA를 이용한 인..
인덱스 구조 및 종류의 이해(1) 1. 인덱스의 구조 - 인덱스 탐색 순서 1) 수직적 탐색 : Root - Branch - Leaf. 읽고자 하는 시작점 검색. Random I/O 2) 수평적 탐색 : Leaf Block의 시작점부터 종료점 까지. Sequential I/O 3) 테이블 Random Access : Data 블록을 읽는 경우 * 비용 : 테이블 Radom Access >수직적 탐색 > 수평적 탐색 - 기본 구조 : Root Node, Branch Node, Leaf Node - Root Node : 가장 상위노드로 하위 Branch Node 수만큼의 Row - Branch Node : Root와 Leaf의 연결고리로 자기 하위 Leaf Node 수만큼의 Row - Leaf Node : Key + Row ID로 구성. 2..
SQL 파싱 부하 1. 사용자가 SQL을 실행시 SQL PARSE - SYNTAX, SEMANTIC검사, LIBRARY CACHE에 실행계획 있는지 점검 - SOFT / HARD PARSING : SOFT는 LIBRARY CACHE에 찾아서 실행. HARD는 최적화 과정을 거치고 실행. (실행계획을 찾지 못했으므로) -> 최적화 과정은 엄청난 비용이 듦. 2. 캐싱된 SQL 공유 1) 실행계획 공유 조건 - 문법, 의미 오류 없는지 찾은 후 해쉬 함수로부터 반환된 해쉬 값으로 LIBRARY CACHE 내 HASH BUCKET 검색 후 HASH CAHIN 엔트리를 차례로 SCAN. 찾으면 저장된 계획으로 실행하고 없으면 최적화 수행 후 방금 탐색한 버켓의 체인에 연결 후 SQL 실행 2) 실행계획을 공유하지 못하는 경우 -..
옵티마이저 원리 1) 옵티마이저 소개 (가) 옵티마이저란? - 쿼리 실행을 위해 후보군이 될 실행 계획을 찾는다 - 오브젝트 통계 및 시스템 통계 정보를 이용해 실행 계획의 예상비용 산정 - 각 실행 계획을 비교하여 최저 비용의 실행 계획 선택 (나) 옵티마이저 종류 - 옵티마이저 종류로는 규칙 / 비용 기반 옵티마이저가 있다 - 규칙기반 옵티마이저 : 미리 정해 높은 규칙에 따라 액세스 경로 평가 및 실행계획 선택 - 비용기반 옵티마이저 : 쿼리를 수행하는데 소요되는 일량 또는 시간을 비용으로 산정 -> 비용은 테이블, 인덱스에 대한 통계 정보를 기초하여 산정 (다) SQL 최적화 과정 PARSER(문법, 의미 오류 체크) -> OPTIMIZER (QUERY TRANSFORMER-표준 형태로, ESTIMATOR –통계..
튜닝 기본 원칙 튜닝을 위한 3가지 기본 원칙 1. Library Cache 최적화 - Application 커서 캐싱 - Bind 변수 활용 2. DBMS Call 최소화 - Parse Call : Application 커서 캐싱 - Execute Call - Fetch Call ㅡ Array Processing 3. I/O 성능 효율화 - 수직적 탐색 효율화 -> Random I/O -> Index Rebuild - 수평적 탐색 선택율 ↑ -> Sequential I/O -> Index Matching degree Up! - 테이블 랜덤 I/O 최소화 -> Random I/O -> Where절 Column이 모두 Index에 있는지 실행계획 읽는 법 1) 위에서 아래로 2) 안에서 밖으로 읽기 옵티마이저 힌트 - 조..
아키텍처 기반 튜닝 원리 1. 데이터베이스 아키텍처 Oracle Database Instance SGA Data Buffer Cache, Redo Log Buffer Shared Area Library Cache Dictionary Cache Java Pool, Large Pool Background Process PMON(프로세스), SMON(Ins 리커버리) DBWR, LGWR CKPT(체크포인트) Database Data Files Control Files Redo Log Files 1. 프로세스 – 백그라운드 프로세서 ORACLE SQL SERVER SMON DATABASE CLEAN UP/ SHRINKING THREAD PMON OPEN DATA SERVICE DBWR LAZYWRITER THREAD LGWR LOG W..