본문 바로가기

SQL/친절한 sql 튜닝

(9)
[8주차] 번호 매기기 6.4.3 채번 방식에 따른 insert 성능 비교 채번: 번호를 새로 부여하다 insert, update, delete, merge 중에서 튜닝 요소가 많은 것은 insert이다 신규 데이터를 입력하려면, pk 중복 방지를 위한 번호를 새로 매기는 것이 선행되어야 한다. 가장 많이 사용 되는 번호 매기기 방식의 성능과 장단점을 비교한다. pk : primary 키. 테이블에 하나만 생성한다. unique, not null이다 복합 컬럼: pk가 상담원id+상담일자+번호매기기 => 컬럼이 여러개 => 복합 컬럼 구분 속성: 번호매기기 이외의 컬럼: 상담원id+상담일자 1) 테이블이라서 row Lock 발생 2) 시퀀스 자체를 새로 만들기때문에 시퀀스 경합 발생 3) MAX+1 은 테이블에서 값을 읽고 i..
[7주차] 6.2 Direction Path I/O 활용 6장. DML 튜닝 1 6.1.1 미존 6.1.2 ~ 6.1.4 민이 6.1.5 ~ 6.1.6 지표 6.2 워니 실행계획이란? https://coding-factory.tistory.com/744 [DB] 데이터베이스 실행 계획에 대하여 실행 계획이란? 실행계획이란 사용자가 SQL을 실행하여 데이터를 추출하려고 할 때 옵티마이저가 수립하는 작업 절차입니다. 이렇게 만들어진 실행 계획은 여러 가지 방법을 통해 확인할 수 있 coding-factory.tistory.com 6.2 Direction Path I/O 활용 온라인 Transaction 정보계 시스템 배치 프로그램 반복 읽기 대량 데이터 버퍼캐시가 도움을 준다 버퍼캐시 성능 떨어뜨림 다이렉트 I/O 사용해야한다 1. Direct Path I/O 오..
[6주차] 소트 튜닝 5.1 소트 연산에 대한 이해 1. 소트 수행 과정(=데이터 정렬 과정) 2. 소트 오퍼레이션 1) sort Aggregate 2) Sort Order By 3) Sort Group By 4) Hash group by 5) Sort Unique 6) Sort Join 7) Window sort 5.2 소트가 발생하지 않도록 SQL 작성 5.3 인덱스를 이용한 소트 연산 생략 5.4 Sort Area를 적게 사용하도록 SQL 작성 0. 이해하기 위한 지식 0.1 소트와 성능 가. 메모리 소트와 디스크 소트 SQL 수행 도중 소트(Sort) 오퍼레이션이 필요할 때마다 DBMS는 정해진 메모리 공간에 소트 영역(Sort Area)을 할당하고 정렬을 수행한다. Oracle은 소트 영역을 PGA(Private G..
[5주차] 소트 머지 조인 4.2 소트 머지 조인 1. SGA vs PGA 2. 기본 메커니즘 3. 소트 머지 조인이 빠른 이유 4. 소트 머지 조인의 주 용도 5. 소트 머지 조인 제어하기 6. 소트 머지 조인 특징 요약 4.2 소트 머지 조인 대량 데이터 조인에서 인덱스가 효과적이지 않을때 NL 조인 대신에 소트 머지 조인을 사용한다. 1. SGA vs PGA SGA System Global Area PGA Private Global Area 공유 메모리 영역 독립적인 메모리 공간 프로세스에 종속적인 고유 데이터를 저장하는 용도 PGA 공간이 부족하면 TEMP테이블 스페이스 사용 캐시된 데이터 공유 가능? 여러 프로세서가 캐시된 데이터를 공유 한다 동시 엑세스 가능? 프로세서가 동시에 엑세스 못한다. Lock 매커니즘 존재함?..
[4주차] 인덱스 튜닝 3.3.7 인덱스 스킵 스캔 활용 3.3.8 in 조건은 = 인가 3.3.9 BETWEEN 과 LIKE 스캔 범위 비교 3.3.10 범위 검색 조건을 남용할 때 생기는 비효율 3.3.11 다양한 옵션 조건 처리 방식의 장단점 비교 3.3.12 함수호출부하 해소를 위한 인덱스 구성 3.4 인덱스 설계 3.4.1 인덱스 설계가 어려운 이유 3.4.2 가장 중요한 두 가지 선택 기준 3.4.3 스캔 효율성 이외의 판단 기준 3.4.4 공식을 초월한 전략적 설계 3.4.5 소트 연산을 생략하기 위한 컬럼 추가 3.4.6 결합 인덱스 선택도 3.4.7 중복 인덱스 제거 3.4.8 인덱스 설계도 작성 3.3.7 인덱스 스킵 스캔 활용 3.3.8 in 조건은 = 인가 3.3.9 BETWEEN 과 LIKE 스캔 범위 ..
[3주차] 테이블 액세스 최소화 3.1 테이블 액세스 최소화 3.1.1 테이블 랜덤 액세스 인덱스를 스캔한 후 반드시 테이블을 액세스(접근)한다 인덱스를 스캔하는 이유는 1) 검색 조건을 만족하는 소량의 데이터를 인덱스에서 빨리 찾고, 2) 테이블 레코드를 찾아가기 위한 주소값(RowId)를 얻으려고 한다. RowId는 물리적 주소? 논리적 주소? 물리적 주소: 데이터 파일 번호, 오브젝트 번호, 블록 번호 논리적 주소: 테이블 레코드를 찾아가기 위한 위치 정보를 담은 주소 ex) 도서 색인 : 색인에 기록된 페이지 번호 : RowId 메인 메모리 DB와 비교 메인 메모리 DB 잘 튜닝된 데이터베이스 시스템 메모리에 데이터를 로드해 놓고 메모리를 통해서 I/O를 수행하는 DB 버퍼캐시 : 메모리에서 데이터 읽기 메인 메모리 DB 오라클..
인덱스
[2주차] 인덱스 2.1 2.1 인덱스 구조 및 탐색 데이터를 찾는 방법 초등학교에서 홍길동 찾기 1) 1학년 1반~ 6학년 마지막반 찾기 == 테이블 전체 스캔 2) 학생부 명부 조회 == 인덱스 이용 당연히 2번이 빠르지 홍길동이 많다면 1번 홍길동이 적다면 2번이 빠르다 2.1.1 미리보는 인덱스 튜닝 인덱스 튜닝의 두가지 핵심 요소 인덱스는 큰 테이블에서 소량 데이터를 검색할 때 사용한다 1) 인덱스 스캔 과정에서 발생하는 비효율을 줄인다. 2) 테이블 엑세스 횟수를 줄이는 것이다. == 랜덤 액세스 최소화 튜닝 인덱스 스캔 후, 테이블 레코드를 접근함 : 랜덤I/O를 사용함 시력이 1.0~1.5 50명 이름이 홍길동 5명 시력, 이름으로 정렬한 테이블이 각각 두개라면 이름으로 정렬한 학생명부를 사용하는게 DB에 5번 접..