전체보기
-
친절한 SQL 튜닝_5장.소트 튜닝_1친절한 SQL 튜닝 2020. 9. 18. 12:05
소트 튜닝 5.1. 소트 연사에 대한 이해 5.1.1 소트 수행 과정 소트는 기본적으로 PGA에 할당한 Sort Area에서 이루어진다. 메모리 공간인 Sort Area가 다 차면, 디스크 Temp 테이블스페이스를 활용한다. Sort Area에서 작업을 완료할 수 있는지에 따라 소트를 두 가지 유형으로 나눈다. 메모리 소트(In-Memory Sort) : 전체 데이터의 정렬 작업을 메모리 내에서 완료하는 것을 말하며, ‘Internal Sort’라고도 한다. 디스크 소트(To-Disk Sort) : 할당받은 Sort Area 내에서 정렬을 완료하지 못해 디스크 공간까지 사용하는 경우를 말하며, ‘External Sort’라고도 한다. 소트 연산은 메모리 집약적(Memory-intesive)일 뿐만 아니라..
-
친절한 SQL 튜닝_4장.조인 튜닝_4친절한 SQL 튜닝 2020. 9. 13. 13:19
조인 튜닝 4.4 서브쿼리 조인 4.4.1 서브쿼리 변환이 필요한 이유 서브쿼리(Subquery)는 하나의 SQL문 안에 괄호로 묶은 별도의 쿼리 블록(Query Block)을 말한다. 쿼리에 내장된 또 다른 쿼리다. 서브쿼리를 DBMS마다 조금씩 다르게 분류하는데, 오라클은 아래 세 가지로 분류한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 SELECT c.고객번호, c.고객명, t.평균거래, t.최소거래, t.최대거래 , (SELECT 고객분류명 FROM 고객분류 WHERE 고객분류코드 = c.고객분류코드) -> 스칼라 서브쿼리 FROM 고객 c , (SELECT 고객번호, AVG(거래금액) 평균거래 , MIN(거래금액) 최소금액, MAX(거래금액) 최대거래 FROM 거래 WH..
-
친절한 SQL 튜닝_4장.조인 튜닝_3친절한 SQL 튜닝 2020. 9. 13. 10:48
조인 튜닝 4.3. 해시 조인 4.3.1 기본 메커니즘 해시 조인(Hash Join)도 소트 머지 조인처럼 두 단계로 진행된다. 1. Build 단계 : 작은 쪽 테이블(Build Input)을 읽어 해시 테이블(해시 맵)을 생성한다. 2. Probe 단계 : 큰 쪽 테이블(Probe Input)을 읽어 해시 테이블을 탐색하면서 조인한다. NL 조인과 소트 머지 조인에서 사용했던 아래 SQL로 해시 조인 과정을 설명해 보자. 해시 조인은 use_hash 힌트로 유도한다. 아래 SQL에 사용한 힌트는, 사원 테이블 기준으로 (ordered) 고객 테이블과 조인할 때 해시 조인 방식을 사용하라(use_hash)고 지시하고 있다. 1 2 3 4 5 6 7 8 SELECT /*+ ordered use_hash(..
-
[Oracle] WINDOWNING 절RDS/Oracle 2020. 9. 12. 12:33
윈도우 함수 종류1.그룹 내 순위(RANK) 관련 함수 - RANK, DENSE_RANK, ROW_NUMBER 함수2.그룹 내 집계(AGGREGATE) 관련 함수 - SUM, MAX, MIN, AVG, COUNT 함수 3.그룹 내 행 순서 관련 함수 - FIRST_VALUE, LAST_VALUE, LAG, LEAD 함수 4.그룹 내 비율 관련 함수 - CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT 함수 윈도우 함수 문법1234SELECT WINDOW_FUNCTION(ARGUMENTS) OVER ([PARTITION BY 컬럼] [ORDER BY 절] [WINDOWING 절]) FROM 테이블명;Colored by Color Scriptercs WINDONWING 절..
-
친절한 SQL 튜닝_4장.조인 튜닝_2친절한 SQL 튜닝 2020. 9. 12. 10:41
조인 튜닝 4.2 소트 머지 조인 4.2.1 SGA vs. PGA 오라클 서버 프로세스는 SGA에 공유된 데이터를 읽고 쓰면서, 동시에 자시만의 고유 메모리 영역을 갖는다. 각 오라클 서버 프로세스에 할당된 메모리 영역을 PGA(Process/Program/Private Global Area)라고 부르며, 프로세스에 종속적인 고유 데이터를 저장하는 용도로 사용한다. 할당받은 PGA 공간이 작아 데이터를 모두 저장할 수 없을 때는 Temp 테이블스페이스를 이용한다. PGA는 다른 프로세스와 공유하지 않은 독립적인 메모리 공간이므로 래치 메커니즘이 불필요하다. 따라서 같은 양의 데이터를 읽더라도 SGA 버퍼캐시에서 읽을 때보다 휠씬 빠르다. 4.2.2 기본 메커니즘 소트 머지 조인(Sort Merge Joi..
-
친절한 SQL 튜닝_4장.조인 튜닝_1친절한 SQL 튜닝 2020. 9. 12. 10:37
조인 튜닝 4.1. NL 조인 4.1.1 기본 메커니즘 1 2 3 4 5 6 7 for(int i=0; i= ‘19960101’ AND c.관리사원번호 = e.사원번호 cs ordered 힌트는 FROM 절에 기술한 순서대로 조인하라고 옵티마이저에 지시할 때 사용한다. use_nl 힌트는 NL 방식으로 조인하라고 지시할 때 사용한다. 위에서는 ordered와 use_nl(c) 힌트를 같이 사용했으므로 사원 테이블(-> Driving 또는 Outer Table) 기준으로 고객 테이블(-> Inner 테이블)과 NL 방식으로 조인하라는 뜻이다. 세 개 이상 테이블을 조인할 때는 힌트를 아래처럼 사용한다. 1 2 3 SELECT /*+ ordered use_nl(B) use_nl(C) use_hsah(D) *..
-
[SQL 문제] 분석함수의 이해RDS/SQL 문제 2020. 9. 6. 13:47
[문제]이 문제는 연도와 월별로 특정 금액을 가진 집합에서 해당 연월을 기준으로 이전 3개월간의 금액 합계와 이후 3개월간의 금액 합계를 구하는 문제입니다.[결과 데이터]를 보면 첫 번째 달인 1월에는 직전 3개월에 해당하는 자료가 없으므로 Null 값이 나오고, 이후 3개월에 속하는 2, 3, 4월의 합계는 200, 300, 400을 더한 900이 나왔습니다.이처럼 2월에는 1월 합계와 3, 4, 5월 합계, 3월에는 1, 2월 합계와 4, 5, 6월 합계를 보여주면 됩니다. [원본 데이터]1234567891011121314151617CREATE TABLE TEMPAS SELECT '202001' YYYYMM, 100 AMT FROM DUALUNION ALL SELECT '202002', 200 FRO..
-
친절한 SQL 튜닝_3장.인덱스 튜닝_4친절한 SQL 튜닝 2020. 9. 6. 12:44
인덱스 튜닝 3.4 인덱스 설계 3.4.1 인덱스 설계가 어려운 이유 인덱스가 많으면 구첵적으로 아래와 같은 문제가 생긴다. - DML 성능 저하(-> TPS 저하) - 데이터베이스 사이즈 증가(-> 디스크 공간 낭비) - 데이터베이스 관리 및 운영 비용 상승 테이블에 인덱스가 여섯 개 달려 있으면, 신규 데이터를 입력할 때마다 여섯 개 인덱스에도 데이터를 입력해야 한다. 테이블과 달리 인덱스는 정렬 상태를 유지해야 하므로 수직적 탐색을 통해 입력할 블록부터 찾는다, 찾은 블록에 여유 공간이 없으면 인덱스 분할(Index Split)도 발생한다. 데이터를 지울 때도 마찬가지다. 여섯 개 인덱스에서 레코드를 일일이 찾아 지워줘야 한다. 핵심 트랜잭션이 참조하는 테이블에 대한 DML 성능 저하는 TPS 저하..
-
[Oracle] COUNT 함수RDS/Oracle 2020. 9. 5. 13:14
COUNT 함수란? - 데이터 건수를 반환하는 함수입니다. - 윈도우 함수(Window Funtion)로 그룹 내 집계 함수입니다. COUNT 사용법12345SELECT COUNT(*) AS TOTAL_COUNT , COUNT(MGR) AS MGR_COUNT , COUNT(NVL(MGR, 0)) AS MGR_COUNT_NVL , COUNT(DISTINCT DEPTNO) AS DEPTNO_COUNT FROM EMP;Colored by Color Scriptercs COUNT(*) - 전체 데이터 건수를 반환합니다. COUNT(컬럼) - 컬럼의 값이 NULL인 행을 제외한 데이터의 건수를 반환합니다. - NULL인 행을 포함하기 위해서는 NVL, DECODE 등을 통해 값을 COUNT(DISTINCT 컬럼)..
-
[SQL 문제] 일별 누적 접속자 통계 구하기RDS/SQL 문제 2020. 9. 5. 12:00
[문제]사용자 접속기록을 관리하는 테이블입니다. 사용자가 접속할 때 마다 기록이 되기 때문에 동일 사용자가 하루에 여러번 기록될 수 있습니다. 이 기록을 토대로 일별 접속 현황 통계자료를 작성해야 합니다. 접속일자 기준으로 다음 네 가지 통계를 한 화면에 보여줘야 합니다. 1. 접속건수 : 접속 기록을 일별로 카운트합니다.2. 접속자수 : 동일 유저는 한번만 카운트 합니다.3. 누적접속건수 : 현재일자까지의 누적 건수입니다.4. 누적접속자수 : 현재일자까지의 누적 접속자수입니다. [원본 데이터]123456789101112131415CREATE TABLE TEMPASSELECT '20200901' DT, 1 ID FROM DUALUNION ALL SELECT '20200901', 2 FROM DUALUNI..