분류 전체보기 94

오라클 성능고도화 원리와 해법 Ⅱ (5장)

5장 소트 튜닝1. 소트 수행 원리 - 메모리 소트 : 전체 데이터 정렬 작업을 메모리 내에서 완료 - 디스크 소트 : 할당받은 Sort Area 내에서 정렬 완료하지 못해 디스크 공간 사용 - Sort Run : Sort Area가 찰 때마다 Temp 영역에 저장해 둔 중간 단계의 집합 - 정렬된 결과를 Temp 영역에 임시 저장했다가 다시 읽어들이는 디스크 소트가 발생하는 순간 SQL 수행 성능은 크게 나빠진다 - Optimal 소트 : 메모리 내에서만 이루어짐 - Onepass 소트 : 정렬 대상 집합이 디스크에 한 번만 쓰임 - Multipass 소트 : 정렬 대상 집합이 디스크에 여러 번 쓰임 - PGA(Private Global Area) : 프로세스의 종속적인 고유 데이터 저장..

오라클 성능고도화 원리와 해법 Ⅰ (6장)

I/O 효율화 원리 - 데이터베이스 튜닝의 3대 핵심 요소 1) 라이브러리 캐시 최적화 2) 데이터베이스 Call 최소화 3) I/O 효율화 및 버퍼캐시 최적화 - I/O 효율화 튜닝을 잘하려면 인덱스 원리, 조인 원리, 옵티마이저 원리에 대한 이해가 필수적이다 블록 단위 I/O - 오라클을 포함한 모든 DBMS에서 I/O는 블록 단위로 이루어진다. 블록 단위로 I/O 한다는 것은, 하나의 레코드에서 하나의 컬럼만을 읽으려 할 때도 레코드가 속한 블록 전체를 읽게 됨을 뜻한다 - Sequential 액세스 : 하나의 블록을 액세스 해 그 안에 저장돼 있는 모든 레코드를 순차적으로 읽어들임 (디스크 I/O 수반하지만 비효율 없음) - Random 액세스 : 레코드 하나를 읽으려고 ..

오라클 성능고도화 원리와 해법 Ⅰ (4장)

라이브러리 캐시 최적화 원리SQL과 옵티마이저 - SQL 옵티마이저는 최소비용, 최적의 경로를 선택해서 사용자가 원하는 작업을 가장 효율적으로 수행할 수 있는 프로시저를 자동으로 생성해 주는 DBMS의 핵심 기능 - 옵티마이저 최적화 수행단계 1) 실행계획 찾기 2) 오브젝트 통계 및 시스템 통계정보를 이용해 각 실행계획 예상비용 산정 3) 최소비용 선택 SQL 처리 과정 - SQL Parsing → Optimization → Row-Source Generation → Execution - 파싱 단계에서 SQL 커서를 메모리에서 찾아 곧바로 실행단계로 넘어가는 것을 소프트 파싱이라 하고, 찾는데 실패해 최적화 및 Row-Source 생성 단계를 거치는 것을 하드 파싱이라고 한다 - SQL..

오라클 성능고도화 원리와 해법 Ⅰ (3장)

오라클 성능 관리Explain Plan - SQL 수행하기 전에 실행계획을 확인하고자 할 때, explain plan 명령을 사용한다 AutoTrace - 명령어 : set autotrace on - 출력결과 : 쿼리수행결과, 실행계획, 실행통계 - set autotrace traceonly explain : SQL을 실제 수행하지 않고 실행계획만을 출력한다 SQL 트레이스 - SQL 튜닝할 때 가장 많이 사용되는 강력한 도구는 뭐니 뭐니 해도 SQL 트레이스다 - AutoTrace 결과 일치 항목 db block gets = current, consistent gets = query, physical reads = disk, SQL*Net roundtrips to/from client = ..

오라클 성능고도화 원리와 해법 Ⅰ (2장)

트랜잭션과 LockDB2, SQL Server, Sybase 등은 Lock을 통해 읽기 일관성을 구현하지만, 오라클은 Undo 데이터를 이용해 읽기 일관성을 구현한다는 게 핵심이다. 즉, Undo에 저장된 정보를 이용해 쿼리가 시작된 시점을 기준으로 일관성 있는 결과집합을 생성해 낸다 트랜잭션 동시성 제어 - 동시성 제어란, 동시에 실행되는 트랜잭션 수를 최대화하면서도 입력, 수정, 삭제, 검색 시 데이터의 무결성이 유지될 수 있도록 노력하는 것을 말한다 - 동시성 제어가 어려운 이유는 동시성과 일관성이 트레이드 오프 관계에 있다는 데에 있다 - 트랜잭션의 특징 1) 원자성 2) 일관성 3) 격리성 4) 영속성 트랜잭성 수준 읽기 일관성 - 오라클은 완벽한 문장 수준의 읽기 일관성을 보장하지만, ..

오라클 성능고도화 원리와 해법 Ⅰ (1장)

오라클 아키텍처기본 아키텍처 - 주목할 점은 리스너에 연결 요청을 하는 순간 하나의 프로세스를 띄우고 PGA 메모리를 할당한다는 사실이다. - 소프트웨어 세계에서 가장 화두인 재사용성은 데이터베이스 성능 튜닝의 핵심 원리이기도 하다 DB 버퍼 캐시 - SQL 성능을 좌우하는 가장 중요한 성능지표는 액세스 하는 블록 개수이며, 옵티마이저의 판단에 가장 큰 영향을 미치는 것도 액세스해야 할 블록 개수다 - SGA 내에는 수없이 많은 자료구조가 사용되고 있으며 그 중 가장 많이 사용되는 것이 해시 테이블이고, DB 버퍼 캐시도 해시 테이블 구조로 관리된다 - DB 버퍼 캐시 내에서 데이터 블록을 해싱하기 위해 사용되는 키 값은 데이터 블록 주소(DBA)다 - 버퍼 헤더만 해시 체인에 연결되며, 실제..

친절한 SQL 튜닝 정리 (3장)

3장 인덱스 튜닝테이블 랜덤 액세스 - 인덱스를 스캔하는 이유는, 검색 조건을 만족하는 소량의 데이터를 인덱스에서 빨리 찾고 거기서 테이블 레코드를 찾아가기 위한 주소값, 즉 ROWID를 얻으려는 데 있다 - 하지만 인덱스 ROWID는 물리적 주소보다 논리적 주소에 가깝다 (테이블 레코드를 찾아가기 위한 논리적 주소 정보 담고 있다) - 메모리 주소 정보(포인터)가 아닌 디스크 주소 정보(DBA)를 이용해 해시 알고리즘으로 버퍼 블록을 찾아간다 - 모든 데이터가 캐싱돼 있더라도 테이블 레코드를 찾기 위해 매번 DBA 해싱과 래치 획득 과정을 반복해야 한다. 동시액세스가 심할 때는 캐시버퍼 체인 래치와 버퍼 Lock에 대한 경합까지 발생한다. 이처럼 인덱스 ROWID을 이용한 테이블 액세스는 생각보..

친절한 SQL 튜닝 정리 (2장)

2장 인덱스 기본인덱스 구조 및 탐색 - 인덱스 탐색 과정이 수직적 탐색과 수평적 탐색, 두 단계로 이루어진다는 사실이다. - 인덱스 튜닝의 두 가지 핵심 (인덱스 스캔 효율화 튜닝, 랜덤 액세스 최소화 튜닝) - 인덱스 스캔 효율화 튜닝 : 인덱스 스캔 과정에서 발생하는 비효율을 줄이는 것 - 랜덤 액세스 최소화 튜닝 : 테이블 액세스 횟수를 줄이는 것 → 성능에 미치는 영향이 크기 때문에 더 중요 - SQL 튜닝은 랜덤 I/O와의 전쟁 - IOT, 클러스터, 파티션에서부터 테이블 Prefetch, Batch I/O 기능의 본질은 랜덤 I/O 줄이는 것→ 랜덤 액세스와 테이블 Full Scan에 대한 개념이 명확히 잡히지 않았음 인덱스 구조 - 루트와 브랜치 블록에 있는 각 레코드는 하위 ..

친절한 SQL 튜닝 정리 (1장)

1장 SQL 처리 과정과 I/O구조적, 집합적, 선언적 질의 언어 - 오라클 PL/SQL, SQL Server T-SQL처럼 절차적 프로그래밍 기능을 구현할 수 있는 확장 언어도 제공하지만 구조적, 집합적, 선언적 질의 언어 SQL 최적화 - SQL 파싱(파싱 트리 생성, Syntax 체크, Semantic 체크) → SQL 최적화 → 로우 소스 생성 옵티마이저 힌트 - 힌트 안에 인자를 나열할 땐 '.'(콤마)를 사용할 수 있지만, 힌트와 힌트 사이에 사용하면 안 된다 - 테이블을 지정할 때 스키마명까지 명시하면 안 된다 (SELECT /*+ FULL(SCOTT.EMP) */ FROM EMP) - FROM 절 테이블 명 앞에 ALIAS를 지정했다면, 힌트에도 반드시 ALIAS를 사용해야 한다 ..