sqlp 11

Lock

오라클 LockDML Lock - 다중 트랜잭션이 동시에 액세스하는 사용자 데이터의 무결성을 보호해 준다. 테이블 Lock과 로우 Lock이 있다. DLL Lock - 래치 - SGA에 공유된 각종 자료구조를 보호하기 위해 사용한다.버퍼 Lock - 버퍼 블록에 대한 액세스를 직렬화하기 위해 사용한다.라이브러리 캐시 Lock/Pin - 라이브러리 캐시에 공유된 SQL 커서와 PL/SQL 프로그램을 보호하기 위해 사용한다. DML 로우 Lock두 개의 동시 트랜잭션이 같은 로우를 변경하는 것을 방지한다. update, delete와는 다르게 insert에 대한 로우 lock 경합은 unique 인덱스가 있을 때만 발생한다. 블로킹이 발생하면, 후행 트랜잭션은 기다렸다가 선행 트랜잭션이 커밋하면 insert..

IT 기술/DB 개념 2025.04.16

파티션을 활용한 대량 INSERT 튜닝

비파티션 테이블대량 데이터를 INSERT 하려면, 인덱스를 Unusable 시켰다가 재생성하는 방식이 더 빠를 수 있다.1. nologging 모드 변환alter table t1 nologging; 2. 인덱스 unusable 상태 변경alter index t1_x01 unusable; 3. (할 수 있다면 direct path insert) 방식으로 대량 데이터를 입력한다. insert /*+ append */ into t1select * from s1; 4. (할 수 있다면 nologging 모드로) 인덱스를 재생성한다.alter index t1_x01 rebuild nologging; 5. logging 모드로 전환한다. alter table t1 logging;alter index t1_x01 l..

IT 기술/DB 개념 2025.04.15

파티션, 대량 UPDATE 튜닝

입력/수정/삭제하는 데이터 비중이 5%를 넘는다면, 인덱스를 그대로 둔 상태에서 작업하기보다 인덱스 없이 작업한 후에 재생성하는 게 더 빠르다.  파티션 exchange를 이용한 대량 데이터 변경1. 임시 테이블 생성한다. create table 거래_tnologging asselect * from 거래 where 1=2; 2. 거래 데이터를 읽어 임시 테이블에 입력하면서 상태코드 값을 수정한다. insert /*+ append */ into 거래_tselect 고객번호, 거래일자, 거래순번, ...            , (case when 상태코드 'ZZZ' then 'ZZZ' else 상태코드 end) 상태코드from 거래where 거래일자  3. 임시 테이블에 원본 테이블과 같은 구조로 인덱스를..

IT 기술/DB 개념 2025.04.07

튜닝 - exists, NL semi join

[데이터]상품 : 1,000건계약 : 5,000만 건 - 1년 간 계약 건수는 500만 건 계약 row가 만 건으로 10년 치 데이터가 쌓여 있음을 알 수 있다. - 상품유형코드를 '=' 조건으로 검색할 때의 평균 카디널리티는 100Cardinality 란 중복도가 낮으면 높고, 중복도가 높으면 낮다. (여자, 남자 Car-di- 는 2이다.)즉, 100이란 숫자는 상품유형코드에 대한 중복도가 매우 낮음을 의미한다. 카디널리티로 선택도(Selectivity)를 구할 수 있다. (Selectivity : 전체 레코드 중에서 조건절에 의해 선택될 것으로 예상되는 레코드의 비율% 이다.)선택도 = 카디널리디 / 총 레코드 수, 100/1000 = 10%500만 건의 10%, 50만 건 중 100(카디널리티)개..

IT 기술/DB 실습 2025.04.07

파티션을 활용한 DML 튜닝

Range 파티션create table 주문 ( 주문번호 number, 주문일자 varchar2(8), 고객 ID varchar2(5)...)partition by range(주문일자) (partition P2025_Q1 values less than ('20250401'), partition P2025_Q2 values less than ('20250701')..., partition P9999_MX values less than (MAXVALUE) );  해시 파티션 파티션 키 값을 해시 함수에 입력해서 반환받은 값이 같은 데이터를 같은 세그먼트에 저장하는 방식이다. 해시 파티션은 고객 ID처럼 변별력이 좋고 데이터 분포가 고른 컬럼을 파티션 기준으로 선정해야 효과적이다. create table 고객..

IT 기술/DB 개념 2025.04.03

Direct Path I/O

정보계 시스템(DW/OLAP등)이 배치 프로그램에서 사용하는 SQL은 주로 대량 데이터를 처리하기 때문에 버퍼캐시를 경유하는 I/O 메커니즘이 오히려 성능을 떨어뜨릴 수 있다. 그래서 오라클은 버퍼캐시를 경유하지 않고 곧바로 데이터 블록을 읽고 쓸 수 있는 Direct Path I/O 기능을 제공한다. 1. 병령 쿼리로 Full Scan을 수행할 때 2. 병렬 DML을 수행할 때3. Direct Path Insert를 수행할 때4. Temp 세그먼트 블록들을 읽고 쓸 때5. direct 옵션을 지정하고 export를 수행할 때6. nocahe 옵션을 지정한 LOB 컬럼을 읽을 때 select /*+ full(t) parallel(t 4) */ * from big_table t;  Direct Path I..

IT 기술/DB 개념 2025.03.29

쿼리 튜닝 실습(partiton, use_hash 힌트, like/between, 윈도우 함수)

※ 문제CREATE TABLE DEV.T_ORDER61   (CUST_NO     VARCHAR2(6)   ,    ORDER_DT    VARCHAR2(8)   ,    ORDER_SN    NUMBER        ,    ORDER_AMT   NUMBER DEFAULT 0,    CONSTRAINT PK_T_ORDER61 PRIMARY KEY(CUST_NO, ORDER_DT, ORDER_SN)   ); CREATE TABLE DEV.T_ORDER_PROD61   (CUST_NO     VARCHAR2(6)   ,    ORDER_DT    VARCHAR2(8)   ,    ORDER_SN    NUMBER        ,    PROD_NO     VARCHAR2(5)   ,    AMT      ..

IT 기술/DB 실습 2024.10.22

쿼리 튜닝 실습(stopkey, paging, 게시판 쿼리)

※ 문제/*페이징 처리 SQL을 튜닝하시오. (인덱스 생성 가능/불필요한 인덱스는 감점요소임) 1) T_USR60 (사용자)    - 1만건 2) T_BBM60 (게시판)    - 100만건    - BBM_TYPE = 'KOR' AND REG_DTM BETWEEN ~~~ 결과 600건    - 동일 사용자가 게시한 글이 거의 없다는 전제*/SELECT BBM_NO, BBM_TITL, BBM_CONT, REG_NM, PYMT_YN, REG_DTMFROM  (SELECT BBM_NO, BBM_TITL, BBM_CONT, REG_NM, PYMT_YN, REG_DTM, ROWNUM RNUM       FROM (SELECT BBM_NO, BBM_TITL, BBM_CONT, FN_GETREGNM(REG_NO) ..

IT 기술/DB 실습 2024.10.18

쿼리 튜닝 실습(partition, pruning)

※ 문제/* 테이블 CONSULT_NO NUMBER -- 상담번호 CONSULTANT_ID VARCHAR2(4) -- 상담자 아이디 con_dt VARCHAR2(8) -- 상담일자 CON_TM VARCHAR2(4) -- 상담시간 RSLT_CD VARCHAR2(4) -- 상담처리 결과 0800(진행), 0900(완료) AFTRSLT VARCHAR2(2) -- 사후처리 결과 11(보류), 21(부서이관) CUST_ID -- 고객ID 1) 아래 요건에 맞는 쿼리를 작성하세요. - 조건 : 상담자 아이디가 바인드변수로 제공 - 상담자가 당월 1일 00시부터 현재일자 12시까지 상담한 정보를 조회하고자 한다. 예) 오늘이 9월22일 일경우 => 2014.09.01 00:00 ~ 2014.09.22 12:00 -..

IT 기술/DB 실습 2024.10.16