728x90
반응형
SMALL

Data Base/SQL 튜닝 50

buffer pinning, SQL TRACE

■ Buffer Pinning 1) 정의: 버퍼를 읽은 후에 해당 버퍼의 pin을 해제하지 않고 유지하는 기능으로, 동일한 블록을 반복적으로 읽어갈 때 성능을 향상시키는 메커니즘. 2) 정점 - Latch의 점유 시간 감소: 버퍼를 pinning하여 여러 트랜잭션이 동시에 동일한 버퍼를 접근할 때 발생하는 경합(latch contention)을 감소시킴. - Block I/O 감소: 동일한 블록을 반복적으로 읽을 때, 버퍼를 유지하면 추가적인 디스크 I/O를 발생시키지 않고 메모리 상에서 작업을 수행할 수 있어 I/O 비용을 줄일 수 있음. 3) Index Range Scan: 인덱스의 범위 스캔 시 leaf block을 다시 접근하는 I/O를 감소시킴. Index에서 찾은 RowID를 사용하여 동일한 ..

Explain Plan, 실행계획

■ Explain Plan - Oracle Optimizer가 SQL 문을 실행하는 데 사용하는 실행 계획을 생성하는 도구. - SQL 문을 실행하지 않고, 단순히 어떤 방식으로 실행할지에 대한 계획을 생성하여 확인 가능하다. - 실행 계획은 `PLAN_TABLE` 또는 `sys.plan_table$`에 저장되며, `utlxplan.sql` 스크립트를 사용하여 생성된 계획을 조회할 수 있다. 1. 실행 계획 저장 - `EXPLAIN PLAN` 결과는 `PLAN_TABLE` 또는 `sys.plan_table$`에 저장된다. - 기본적으로 10g 버전부터는 DB 설치시 `sys.plan_table$` 테이블이 만들어진다. 2. 사용방법 - `EXPLAIN PLAN` 문을 사용하여 SQL 문의 실행 계획을 확..

index scan

■ index scan 1. index range scan (index 범위 스캔) - 인덱스 root block -> branch block -> leaf block (tree 구조)까지 수직으로 탐색한 후 leaf block 에서 필요한 범위만 scan하는 방식 (one plus one scan) select ix.index_name, ix.uniqueness, ic.column_name from user_indexes ix, user_ind_columns ic where ix.index_name = ic.index_name and ix.table_name = 'EMP'; #) index 생성 create index hr.emp_idx on hr.emp(employee_id); #) 생성 확인 sel..

full table scan, rowid scan

■ full table scan - 많은 양의 데이터 검색 시 유용함. -> 기준 : 첫번째 블록부터 마지막 사용한 블록 (High Water Mark, 5배수단위로 조정) 까지 읽어오는 방식 - Multi Block I/O 발생한다.(여러 블록을 읽어 들인다) --> 기준 : show parameter db_file_multiblock_read_count 으로 확인 show parameter db_file_multiblock_read_count => VALUE의 갯수만큼 block이 한꺼번에 움직임. - 한번에 i/o call 방식할 때,db_file_multiblock_read_count 설정되어 있는 블록 수 만큼 읽어 들이기 위해서는 extent 안에 db_file_multiblock_read_c..

TX LOCK ⓒ 변경하고자 하는 블록의 ITL에 트랜잭션 엔트리를 등록하고자 하는 경우

■ TX LOCK 3. 변경하고자 하는 블록의 ITL에 (자신에 해당하는) 트랜잭션 엔트리(=: TX)를 등록하고자 하는 경우 --> 트랜잭션 슬랏 생각하자! enq : TX - allocate ITL entry | 트랜잭션 슬랏을 잡지 못해서 생기는 대기 이벤트 #) 테이블 생성 시, maxtrans 설정. create table hr.itl_table(id number, l_name varchar2(1000), f_name varchar2(1000)) initrans 1 maxtrans 2 pctfree 0; #) maxtrans 설정의 무의미 확인 select ini_trans, max_trans, pct_free from dba_tables where table_name = 'ITL_TABLE';..

TX LOCK ⓑ 특정 행에 unique key, primary key 에 해당하는 데이터를 입력, 수정하는 경우

■ TX LOCK 2. 특정 행에 unique key, primary key 에 해당하는 데이터를 입력, 수정하는 경우 enq : TX - row lock contention / lock mode가 풀린다. create table hr.unique_test(id number); create unique index hr.unique_test_idx on hr.unique_test(id); if) create index hr.unique_test_idx on hr.unique_test(id); -> 수행했다면 no-unique 로 등록된다. insert into hr.unique_test(id) values (1); insert into hr.unique_test(id) values (1); --> wait..

TX LOCK ⓐ 특정 행을 변경하고자 하는 경우

■ TX LOCK 1. 특정 행을 변경하고자 하는 경우 enq : TX - row lock contention create table hr.emp as select * from hr.employees; update hr.emp set salary = 2000 where employee_id = 200; delete from hr.emp where employee_id = 200; -- waiting 단계 모니터링 select sid, serial#, username, blocking_session, event, sql_id, prev_sql_id from v$session where event like '%TX%'; #) 현재 sql_id 확인해야 한다. => enq: TX - row lock conte..

Redo 기능, logging mode & nologging mode

■ Redo 기능 - Database '복구'를 목적으로 설계 - Database에 적용된 모든 변경 사항에 대한 이력 저장 - DML/DDL/Recursive SQL(select .. from .. for update : lock)에 의해 변경된 모든 Data 이력 (nologging 제외) - DDL Text 저장 (DML Text 제외) ■ LGWR에 의한 Redo 기록 - Redo Buffer 내용을 Redo Log File 에 기록하는 시점 - 매 3초 마다 - Log Buffer의 1/3 또는 1MB 가 저장될 때 - User Process가 Commit 또는 Rollback으로 Transaction을 종료할 때 (Log Force at Commit) - DBWR Process(발생하기 전)에..

Transaction 처리 순서

■ Transaction 처리 순서 1. Undo Segment 할당 - 트랜잭션이 시작되면 undo segment를 할당받는다. - 만약 할당받지 못한다면 "enq: US - contention" 대기 이벤트가 발생한다. 2. Undo Segment Header에 Transaction Table Slot 생성 - Undo segment header에 트랜잭션 테이블 슬롯(Transaction Table Slot)을 생성. - 트랜잭션 정보, 즉 TXID(Transaction ID)를 생성. 3. Data Buffer Cache에서 대상 블록 찾기 - 트랜잭션의 대상이 되는 블록을 실행 계획을 통해 data buffer cache에서 찾는다. - 블록 헤더에 ITL(Interested Transactio..

FLM(FreeList Management) & ASSM(Auto Segment Space Management)

[FLM(FreeList Management)] : 테이블 및 인덱스의 블록 내에서 여유 공간을 관리하는 기술 1. Free List 2. 리스트 형태의 공간 관리 3. Hot 및 Cold Region #) tablespace 생성 , management manual 로 생성 create tablespace flm_tbs datafile '/u01/app/oracle/oradata/ora11g/flm_tbs01.dbf' size 100m autoextend on extent management local uniform size 1m segment space management manual; ---------------- HR sess_1 ---------------- => storage..

728x90
반응형
LIST