일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 친절한 sql튜닝
- 메소드
- Spring
- 상속
- SQL
- 서버
- 컬렉션프레임워크
- 카카오코딩테스트
- 자바
- DBA
- socket
- 인덱스
- 클래스
- Undo
- db버퍼캐시
- java
- springboot
- 오라클
- 멀티쓰레드
- 인덱스 튜닝
- 백준
- Swing
- Oracle
- 친절한 SQL 튜닝
- 클라이언트
- 깃허브
- SQLP
- DB
- 생성자
- 인스턴스
- Today
- Total
목록SQLP/친절한 SQL 튜닝 (9)
프리 정보 컨텐츠

7장 SQL 옵티마이저7.1.1 선택도와 카디널리티선택도선택도란 전체 레코드 중에서 조건절에 의해 선택되는 레코드 비율이며 가장 단순한 '=' 조건으로 검색할 때의 선택도를 보면 컬럼 값 종류 개수(NDV) 를 이용해 아래와 같이 구한다.선택도 = 1 / NDV 카디널리티카디널리티란, 전체 레코드 중에서 조건절에 의해 선택되는 레코드 개수이며 아래와 같이 구한다.카디널리티 = 총 로우수 * 선택도 = 총 로우 수 / NDV-- 예를 들어 상품분류 컬럼에 가전, 의류, 식음료, 생활용품 네 개의 값이 존재-- 조건절에 대한 선택도는 25%이며, 전체 레코드가 10만건이면 카디널리티는 2만 5천이다.옵티마이저는 이렇게 카디널리티를 구하고, 그만큼의 데이터를 액세스하는데 드는 비용을 계산해서 테이블 액세스 방..

6장 DML 튜닝6.1.1 DML 성능에 영향을 미치는 요소인덱스무결성 제약조건절서브쿼리Redo 로깅Undo 로깅Lock커밋인덱스와 DML성능테이블에 레코드를 입력하면 인덱스에도 입력해야 한다.인덱스는 정렬된 자료구조이므로 수직적 탐색을 통해 입력할 블록을 찾아야하므로 DML 성능에 미치는 영향도 더 크다.INSERT, DELETE는 테이블에서 레코드를 모두 찾아 삽입, 삭제해 줘야 한다. UPDATE할 때는 변경된 컬럼을 참조하는 인덱스만 찾아서 변경해 주면 된다.간단한 100만개 레코드를 만든 테이블에서 인덱스를 1개 추가 할 때마다 8배가 느려진다. 이를 통해 인덱스 하나라도 줄이면 TPS(Transaction Per Second)는 그만큼 향상된다는 것을 의미한다.무결성 제약과 DML 성능PK, ..

5장 소트 튜닝소트할 대상 집합을 SGA 버퍼캐시를 통해 읽어 Sort Area에서 정렬을 시도한다.Sort Area안에서 정렬을 마무리하는 것이 최적이지만, 양이 많을 때는 Temp 테이블 스페이스에 임시 세그먼트를 만들어 저장한다. Sort Area가 찰 때마다 Temp 영역에 저장해 둔 중간 단계의 집합을 Sort Run 이라고 부르며 정렬된 최종 결과집합을 얻으려면 다시 Merge 해야 한다.소트 연산은 메모리 집약적일 뿐 아니라 CPU 집약적이기도 하여 데이터량이 많으면 I/O 까지 발생하여 쿼리 성능을 좌우하는 중요한 요소이다.부분범위 처리를 불가능하게 함으로써 OLTP 환경에서 애플리케이션 성능을 저하시키는 주요인이 되기도 한다.5.1.2 소트 오퍼레이션Sort AggregateSort Ag..

4장 조인 튜닝4.1.1 NL 조인 기본 메커니즘SELECT E.사원명, C.고객명, C.전화번호FROM 사원 E, 고객 CWHERE E.입사일자 >= '19960101'AND C.관리사원번호 = E.사원번호위 테이블에서 1996년 1월 1일 이후 입사한 사원이 관리하는 고객 데이터를 추출하는 데이터를 만들어 보자.가장 쉽게 생각하는 방법은 사원 테이블로부터 1996년 1월 1일 이후 입사한 사원을 찾은 후, 고객 테이블에서 사원번호가 일치하는 레코드를 찾는 것 이것이 Nested Loop 조인이 사용하는 알고리즘이다.아래 수행 구조를 통해 쉽게 이해할 수 있다.for(i=0; ifor outer in 1..100 loop for inner in 1..100 loop dbms_outpu..
3.4 인덱스 설계온라인 트랜잭션을 처리하는 시스템에서 인덱스 설계의 중요성은 인덱스 튜닝, 더 나아가 SQL 튜닝의 하이라이트라고도 할 수 있다.3.4.1 인덱스 설계가 어려운 이유SQL에 각각 최적화된 인덱스를 마음껏 생성할 수 있다면 인덱스 설계만큼 쉬운 일도 없다. 하지만 인덱스를 많으면 아래와 같은 문제가 발생한다.DML 성능 저하 (TPS 저하)데이터베이스 사이즈 증가데이터베이스 관리 및 운영 비용 상승예를 들어 한 테이블에 인덱스가 여섯 개 달려 있으면, 신규 데이터를 입력할 때마다 여섯 개 인덱스에도 데이터를 입력해야 한다.테이블과 달리 인덱스는 정렬 상태를 유지해야 하므로 수직적 탐색을 통해 입력할 블록부터 찾는다.데이터를 지울 때도 마찬가지이다. 여섯 개 인덱스에서 레코드를 일일이 찾아..

3장 인덱스 튜닝SQL 튜닝은 랜덤 I/O와의 전쟁임을 거듭 강요한다.3장에서는 테이블 랜덤 액세스를 최소화하는 구체적인 방법에 대해 소개한다.3.1.1 테이블 랜덤 액세스인덱스를 이용해도 조건절에 해당하는 데이터만 골라서 읽는데 파티션 Pruning은 왜 필요할까 굳이 파티션이 필요할까? 에 대한 질문에 대한 답을 소개한다.인덱스로 검색해도 빠른데 왜 굳이 파티셔닝을 할까?인덱스로 검색하는데 왜 느릴까?데용량 데이터를 인덱스 사용하면 데이터가 금방 조회된다는 사실, 대량 데이터를 조회할 때 인덱스를 사용하니 테이블 전체를 스캔할 때보다 훨씬 느리다는 사실은 SQL 튜닝 핵심을 이해하면 이해할 수 있다.인덱스 ROWID 는 물리적 주소? 논리적 주소?SELECT * FROM 고객 WHERE 지역 = '서..

2.3 인덱스 확장 기능 사용법인덱스 스캔 방식은 Index Range Scan 뿐만 아니라 Index Full Scan, Index Unique Scan, Index Skip Scan, Index Fast Full Scan 등이 존재한다. 각 스캔 방식의 주요 특징에 대해서 알아보자.2.3.1 Index Range ScanIndex Range Scan은 B+Tree 인덱스의 가장 일반적이고 정상적인 형태의 액세스 방식이다.인덱스 루트에서 리프 블록까지 수직적으로 탐색한 후에 필요한 범위만 스캔한다.SELECT * FROM EMP WHERE DEPNO = 20;앞서 강조한 그대로 인덱스를 Range Scan 하려면 선두 컬럼을 가공하지 않은 상태로 조건절에 사용해야 한다. (선두 컬럼을 가공하지 않은 상..

2장 인덱스 기본인덱스에 대한 개념만 알고있을 뿐 명확한 그림이 없는 상태에서 설계하고 개발하니 성능이 좋을 리 없다.인덱스 탐색 과정이 수직적 탐색과 수평적 탐색 두 단계로 이루어진다는 사실에 대해 유념하며 알아보자.2.1 인덱스 구조 및 탐색데이터를 찾는 두 가지 방법어떤 초등학교를 방문해 '홍길동' 학생을 찾는 방법은 두 가지다.첫째는, 1학년 1반부터 6학년 맨 마지막 반까지 모든 교실을 돌며 홍길동 학생을 찾는 것이다.둘째는, 교무실에서 학생 명부를 조회해 홍길동 학생이 있는 교실만 찾아가는 것이다.결과는 홍길동 학생이 많으면 첫째, 몇 안 되면 후자가 빠르다.데이터베이스 테이블에서 데이터를 찾는 방법도 크게 아래 두 가지에 해당한다.테이블 전체를 스캔한다.인덱스를 이용한다.모든 교실을 돌며 학..