728x90
반응형
SMALL

분류 전체보기 342

row chaining, row migration

■ ROW chaining 1) 정의: 한 블록에 저장할 수 있는 한 행의 크기가 블록 크기를 초과하여 해당 행이 여러 블록에 걸쳐 저장되는 현상. 2) 원인: 모델링 오류 또는 블록 크기를 작게 설정한 경우. 3) 문제점: 성능 저하 및 i/o 비용 증가. 4) 해결 방법: 모델링을 재고, 블록 크기를 조절하여 적절한 크기로 설정. # 테이블 row, block, 평균 바이트값 조회 select num_rows, blocks, avg_row_len from dba_tables where owner='HR' and table_name='EMP'; -- num_rows : row의 수 -- blocks : block의 수 -- avg_row_len : 한 행에 평균 바이트값 (체인화를 예방하기위해 확인해볼..

CLUSTERING FACTOR

■ CLUSTERING FACTOR 1) 정의: 특정 컬럼을 기준으로 한 인덱스의 클러스터링 정도를 나타내는 지표. 서로 다른 행들의 데이터가 같은 블록에 모여 있는 정도를 나타난다. 2) 좋은 CLUSTERING_FACTO - 해당 컬럼에 인덱스를 사용할 때 I/O를 최소화할 수 있다. Range Scan 등의 작업에서 성능 향상이 기대됨. (해당 컬럼에 대한 인덱스를 사용할 때 성능이 향상되는 효과를 기대할 수 있다.) - Buffer Pinning이 수행되기 때문에 Latch를 점유하는 시간이 감소할 수 있다. 따라서 블록에 대한 접근이 더 효율적으로 이루어질 수 있다. 3) 예시 상황 - 파티션 분리: 데이터가 특정 범위 또는 순서에 따라 파티션으로 나뉘어 있거나, ORDER BY에서 사용되는 정..

Serial direct read

#) 한번에 읽을 수 있는 블록의 개수 확인 show parameter db_file_multiblock_read_count - direct path read: 병렬처리할 경우 발생하는 대기 이벤트, 22 번 올렸다. ■ Serial direct read 1. full scan 및 multi block i/o : 데이터베이스에서 전체 테이블 또는 인덱스를 스캔할 때, 여러 블록을 한 번에 읽는 Multi Block I/O가 발생. 2. Data buffer cache 부담 : 데이터 버퍼 캐시에 부하 가능성 3. Latch: cache buffers lru chain 이벤트 : 데이터 파일의 블록을 메모리로 읽어올 때 `cache buffers lru chain` 이벤트에 따른 Latch를 사용 4. L..

v$sql_plan

■ v$sql_plan library cache(shared pool) 에 있는 실행계획을 표시. select s.prev_sql_id, s.prev_child_number, v.sql_text from v$session s, v$sql v where s.prev_sql_id = v.sql_id and s.prev_child_number = v.child_number and s.username = 'HR'; #) 실제 실행계획 select * from table(dbms_xplan.display_cursor('2sgjc8u8ha0m4', 0, 'typical')); #) 바로 직전의 SQL문장 실행계획을 보여준다. select * from hr.employees where employee_id = 110..

auto trace _ set autotrace on, set autotrace on explain, set autotrace on statistics, set autotrace traceonly, set autotrace traceonly explain, set autotrace traceonly statistics

■ autotrace 1) 정의 - SQL*PLUS나 SQL DEVELOPER 등에서 사용할 수 있는 도구로, SQL문 실행 후 실행계획, 실행 결과, 그리고 실행 통계 정보를 출력하는 기능. 2) 사용 가능 도구 - SQL*PLUS, SQL DEVELOPER 가능 3) 사용 방법 - SQL*PLUS나 SQL DEVELOPER에서 `AUTOTRACE`를 활성화하여 SQL문을 실행하면 실행계획, 실행 결과, 통계 정보를 자동으로 출력함. - 특정 세션에 대한 실행 통계 정보를 확인하기 위해서는 `PLAN_TABLE`이라는 테이블이 필요하며, `PLUSTRACE` 롤(role)에 접근 권한이 있어야 함. 4) 장점 - SQL문의 성능을 빠르게 분석하고 최적화할 수 있는 편리한 도구. - 실행계획, 결과, 통..

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';..

728x90
반응형
LIST