SQL 12

[SQLP] 소트 튜닝

소트 작업 순서1) SGA의 버퍼캐시에서 소트 대사 데이터를 읽어 들인다2) PGA의 Sort area 에서 정렬을 한다.3) Sort 대상의 양이 많을 때에는 정렬 중간의 집합을 Temp 에서 임시 세그먼트(disk)로 저장한다.이를 Sort run 이라고 한다. Sort run 이 발생하면 disk에 내려쓰는 작업이기 때문에 속도가 느려진다. >> 이를 위해 소트 튜닝이라는 개념이 나타난다. 대부분은 인덱스로 처리를 한다. 소트 튜닝의 종류1) Optimal sort: 정렬 대상이 적어서, sort area에서 작업을 마무리 한다.2) Onpass sort: 하나의 소트 작업에 대해서 정렬 대상의 집합을 디스크에 한 번만 기록한다.  >> sort run 발생3) Multipass sort: 하나의 ..

SQLP 2024.08.21

[SQLP] 서브쿼리와 성능

서브쿼리 동작 수행 방식1. Filter 동작 방식-메인 쿼리에서 추출되는 데이터의 수 만큼 서브쿼리가 반복적으로 수행되어 처리-메인 쿼리의 추출 건수가 100건이면, 서브쿼리는 최대 100번 수행한다.-서브 쿼리에 입력되는 메인 쿼리의 input 값의 number of distinct value 가 작다면 조인 수행 방식보다 더 효율적일 수 있다. (스칼라 서브쿼리 캐싱) 예시)사원 정보 테이블(emp)에서 자신이 속한 부서의 평균 급여보다 많은 급여를 받는 사원들의 직원 이름, 급여, 부서번호를 출력한다.select a.ename, a.sal, a.deptnofrom emp a where a.sal>(select avg(b.sal) from emp b ..

SQLP 2024.08.21

[SQLP] 데이터베이스 call 과 네트워크 부하 ★★★★★

Call의 발생 위치에 따른 구분- User call: DBMS 외부에서 요청되는 call 을 의미한다. DBMS성능과 확장성을 높이려면 user call을 최소화하려는 노력이 중요하다.- Recursive call: DBMS 내부에서 요청되는 Call을 의미한다. 데이터 딕셔너리 조회, 사용자 정의 함수/  프로시저 내의 SQL 수행 등이 해당된다. 바인드 변수를 적극적으로 활용하여 하드 파싱의 발생횟수를 줄이면 최소화 된다.커서의 종류1)공유 커서SQL을 하드 파싱한 결과를 저장하고 있다. 라이브러리 캐시에 저장되어 있는 커서이며, 여러 세션간의 공유 가 가능하다.데이터를 저장하고 있는 공간으로 SQL 수행 시에는 커서를 읽은 다음 PGA 에 올려야 한다. 2)세선 커서다른 세션과 공유하지 않는다. ..

SQLP 2024.08.17

[SQLP] 테이블 스페이스

테이블스페이스테이블스페이스는 데이터베이스 오브젝트 내 실제 데이터를 저장하는 공간이다.이것은 데이터베이스의 물리적인 부분이며, 세크먼드로 관리되는 모든 DBMS 에 대해 저장소를 할당예)- 테이블 스페이스 공간 생성##테이블스페이스 생성하기create tablespace ts_t1 datafile 'C:\oracle\oradata\orcl\ts_t101.dbf' size 10m autoextend on;create tablespace ts_t2 datafile 'C:\oracle\oradata\orcl\ts_t102.dbf' size 10m autoextend on;create tablespace ts_t3 datafile 'C:\oracle\oradata\orcl\ts_t103.dbf' size 10m..

SQLP 2024.08.15

[SQLP] 커서 공유

바인딩 변수 사용은 파싱의 횟수를 감소시키기 때문에 성능 개선이 된다.이렇게 다른 쿼리들을 같은 실행계획으로 실행시키는 것을 '커서 공유' 라고 한다.커서를 사용하는 순서는1) 커서를 위한 메모리 공간 할당(PGA에 할당)2) syntax, semantic check, privilege check 등3) 바인드 변수 할당4) 데이터를 어떻게 출력할 것인지 정의5) 실행6) 출력--> 다른 사용자가 사용할 때도 동일한 실행 계획을 사용하겠다  - 커서가 공유되어 사용되는 경우부모 커서: SQL 명령문 그 자체를 보관한다.자식 커서: 차이를 보관한다.커서는 일반적으로 라이브러리 캐시에 저장되어 있는 SQL 명령문을 지칭한다.   히스토그램Table 형태의 값의 빈도를 그래픽으로 표현한 것 -종류1) Freq..

SQLP 2024.08.15

[SQLP]바인딩 변수

바인딩 변수 사용은 "파싱" 의 횟수를 감소시킨다. 이 때문에 성능을 개선시킬 수 있다바인드변수 최소 실행 시에는 "하드 파싱"이다. 그 이후로는 "소프트 파싱"으로 들어간다. 바인딩 변수의 peeking 은 Hard parsing 시 한번의 바인드 변수의 peeking 을 하여 SQL 실행 계획이 고정되도록 하는 것  소프트 파싱이 일어나기 위한 SQL 명령문 조건 ★★★★★- 실행 계획을 공유하지 못하는 경우1. 공백 문자 또는 줄바꿈select * from employees;select * from  employess; 2. 대소문자의 구분select * from CUstomers;select * from customers; 3. 주석select * from customers;select /*주석*..

SQLP 2024.08.14

[SQLP] 조인 수행 원리2

Semi join조인이 아니지만, 조인과 유사한 데이터 연결 방법이다.세미조인에는 in 사용법과 exists 사용법이 있다.조건에 맞는 행을 찾으면 더이상 다른 행을 찾지 않는다. Anti join 안티 조인은 not in 사용법과 not exist 사용법이 있다.조건에 맞는 행을 찾지 못하면 모든 행을 출력한다.  추가: from 절에 나열한 테이블 순서대로 조인하는 방법힌트 종류설명예시orderedFrom 절에 나열한 순서대로 조인할 때ordered usenl(e) use_hash(d) 힌트 종류설명예시Force orderFrom 절에 나열한 순서대로 조인할 때option(Force order)

SQLP 2024.08.13

[SQLP] 조인 수행 원리

대표적 네가지 조인 수행 원리1. Nested Loop Join 2. Hash Join3. Sort Merge Join4. Cartesian Join- 조인 수행 원리는 outer join, inner join 등의 개념과는 관계 없다.  Nested Loop Join 특징:  - 랜덤 액세스, 랜덤 스캔  사용- 인덱스를 사용할 수 있는 조인① 인덱스 사용② 조인키를 이용하여 원하는 테이블을 random access 방식으로 찾음③ 후행 테이블의 인덱스를 사용- Random access 선행테이블의 조인키를 이용해 후행 테이블을 하나하나 대조해서 찾아간다.선행 테이블의 인덱스로 인해 Random access 를 줄여야 한다. >> random access 로 인해 disk i/o가 증가하는 현상 발생 ..

SQLP 2024.08.12

[SQLP] 인덱스 성능 저하 요인2 ★★★★★

인덱스: 연산자 의 사용 (부정형)Q. orders 테이블에서 SHIP_MODE 가 'first class' 가 아닌 행들의 SHIP_MODE 를 출력한다.실행 계획도 같이 출력한다. (힌트로 인덱스의 사용을 강제한다.)explain plan forselect ship_mode from orderswhere ship_mode 'first class';select * from table(dbms_xplan.display);Plan hash value: 1789227693 ---------------------------------------------------------------------------------------------| Id | Operation | Name ..

SQLP 2024.08.09

[SQLP] 인덱스 성능 저하 요인 ★★★★★

인덱스 사용 시 SQL 명령문은 성능을 저하시킬 수 있다.1) 인덱스 컬럼에 연산자의 사용(부정형 조건)2) 인덱스 컬럼에 SUBSTR 연산자의 사용3)인덱스 컬럼에 산술 연산자(+,-,/,*) 사용4)인덱스 컬럼에 TRUNC 연산자의 사용5) 인덱스 컬럼에 || 연산자의 사용6) 인덱스 컬럼에 데이터 타입의 변환7) 인덱스 컬럼에 is null /is not null 연산자의 사용==> 인덱스 컬럼의 가공할 경우에 성능 저하 요인이 된다. * 인덱스 구성 컬럼 : 어디에 써야지 인덱스를 사용이 가능한가??   : where 절에 들어가야 사용이 가능하다.단일 컬럼 인덱스 : 해당 단일 컬럼이 WHERE 절에서 사용결합 인덱스: 결합 인덱스의 선두 컬림이 WHERE 절에서 사용   실습) 인덱스 생성O..

SQLP 2024.08.06