IT기술/Oracle 119

성능 고도화 1 - 부록

01 라이브러리 캐시 Lock & Pin (1) 라이브러리 캐시 Lock LCO에 대한 핸들을 보호하며 아래 세가지 모드를 사용 - Shared 모드 : 읽기 작업 시 - Exclusive 모드 : 생성 또는 변경 작업 시 - Null 모드 : Lock 을 장시간 유지하려 할 때 사용, 실제 대기를 발생시키지는 않으며, 오브젝트간 의존성을 관리하는데 사용 (2) 라이브러리 캐시 Pin LCO에 실제 내용이 담긴 힙을 보호한다. (3) 라이브러리 캐시 Lock과 Pin, 두개의 직렬화 장치를 따로 두는 이유 LCO 핸들은 영구적인 Fixed Array 영역에 할당되는 반면 LCO 자체는 동적으로 관리되는 힙 영역에 할당되는데, 힙에 할당된 전체 또는 일부 청크가 언제든 유실될 가능성이 있기 때문이다. 실제..

IT기술/Oracle 2017.03.24

SQL 실무 기초

DDL (Data Definition Language) CREATE, ALTER, DROP 1. TABLESPACE 관리 1) TABLESPACE 생성 CREATE TABLESPACE tablespace_name DATAFILE '경로' SIZE 100M AUTOEXTEND ON EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2M -- 유니폼 사이즈를 주면 STORAGE 옵션은 의미없다 SEGMENT SPACE MANAGEMENT AUTO; 2) DATAFILE 추가 ALTER TABLESPACE tablespace_name ADD DATAFILE '경로' ; 3) DATAFILE 삭제 ALTER TABLESPACE tablespace_name DROP DATAFILE '경로' ; 4..

IT기술/Oracle 2014.04.28

DDL, DML, DCL, DQL, TCL 이란?

DDL(Data Definition Language) - 데이터 정의 언어 -객체의 생성,변경,삭제,명령어 - 대상 : 필드, 레코드 -CREATE, ALTER, DROP, RENAME, COMMENT(주석달기), TRUNCATE(테이블 모든 행 삭제) -SCHEMA,DOMAIN,TABLE,VIEW,INDEX를 정의하거나 변경 또는 삭제할때 사용 -AUTO COMMIT => ROLLBACK 불가능 DML(Data Manipulation Language) -데이터 조작 언어 -레코드 제어 명령어 -대상 : 필드,레코드,테이블,뷰,인덱스 -INSERT, UPDATE, DELETE, MARGE(병합) -저장된 데이터를 실질적으로 처리하는데 사용 -ROLLBACK 가능 DCL(Data Control Langua..

IT기술/Oracle 2014.04.28

11 네트웍 (Network) 에서의 대기이벤트들

1. Network 관련 대기이벤트들- SQL*Net message from/to client- SQL*Net more data from/to client- SQL*Net message from/to dblink- SQL*Net more data from/to dblink 이들 이벤트가 성능문제와 연관되는 경우는 보통 다음과 같다.- 네트웍 (Network) 속도가 느린 경우- SQL 실행회수 (Execute count) 가 불필요하게 높은 경우- 어플리케이션의 구현방식에 문제가 있는 경우

IT기술/Oracle 2014.02.03

10 리두 (Redo) 에서의 대기이벤트들

1. latch: redo writing, latch: redo allocation, latch: redo copy 1) redo writing 래치: Redo Buffer 내의 공간을 확보하기 위해 LGWR 에게 쓰기 요청을 하려는 프로세스는 redo writing 래치를 획득해야 한다.Willing-to-wait 모드로 획득2) redo copy 래치: PGA 내의 Change Vector 를 Redo Buffer 로 복사하려는 프로세스는 작업의 전체 과정 동안 redo copy 래치를 보유해야 한다.No-wait 모드로 획득3) redo allocation 래치: Change Vector 를 Redo Buffer 에 복사하기 위해 Redo Buffer 내에 공간을 확보하고자 하는 과정에서 획득해야 ..

IT기술/Oracle 2014.02.03

09 I/O 에서의 대기이벤트들

1. db file scatterd read오라클은 풀테이블스캔 (Full Table Scan. FTS) 이나 인덱스풀스캔 (Index Full Scan) 을 수행하는 경우 성능보장을 위해서 가능한 여러 개의 블록을 한꺼번에 읽는다. 이것을 멀티 블록 IO (Multi Block I/O) 라고 부른다.FTS 에서 싱글 블록 IO 를 사용하거나 MBRC 보다 작은 수의 블록을 읽어들이는 경우는 다음과 같다.- 익스텐트 경계에 도달한 경우- 스캔 도중에 캐시된 블록이 있을 경우- Chaind Row 가 있는 경우 1) 어플리케이션 레이어db file scattered read 대기가 주로 발생하는 SQL 문을 추출해야한다. 2) 오라클 메모리 레이어 버퍼 캐시의 크기가 지나치게 작다면 그만큼 물리적 I/O ..

IT기술/Oracle 2014.02.03

08 세그먼트 (Segment) 에서의 대기 이벤트들

1. enq: HW -contentionHW 락 경합은 대부분 대량 Insert 에 의해 발생하며, 간혹 대량 Update 에 의해 언두 세그먼트에서 HW 락 경합현상이 발생하는 경우도 있다.In-memory Undo (IMU) HWMBump Up 이 자주 발생하지 않게 하려면 Extent 값을 크게 주면 된다. (미리 쓸 자리를 할당한다.) 9i 때 Extent 사이즈를 고정해 두는 파라미터tablespace 만들 때 uniform size extent management local uniform size 1M10g 부터는 기본 64k 로 고정 FLM 을 사용하는 경우, HW 락의 경합을 줄이는 방법은 다음과 같다.첫째, FREELISTS 값을 동시 트랜잭션의 수를 고려해서 충분히 크게 잡아준다.둘째,..

IT기술/Oracle 2014.02.03

07 트랜잭션 (Transaction) 에서의 대기이벤트들

1. enq: TM - contentionDML 이 수행되는 동안, DML 과 관련된 객체에 대한 변경을 방지하기 위해 DML 을 수행하는 프로세스는 반드시 해당 테이블에 대해 TM 락을 획득해야 한다.TM 락을 획득하는 과정에서 경합이 발생하면 enq: TM - contention 이벤트를 대기하게 된다. - DML 락 : Data lock, DML 수행시 데이터를 보호하기 위한 락. 로우 락 (TX) 은 특정 로우를 보호하고,테이블 락 (TM) 은 전체 테이블을 보호한다. DBA_DML_LOCKS 를 통해 관찰 가능하다.- DDL 락 : Data Dictionary lock. User/Table/View/Procedure 등의 정의를 보호한다.DBA_DDL_LOCKS 를 통해 관찰가능하다.- Inte..

IT기술/Oracle 2014.01.29

06 Row Cache 에서의 대기 이벤트들

1. row cache lock오라클은 딕셔너리의 정보를 SGA 내의 Row Cache (혹은 Dictionary Cache) 영역에 저장하고 있다.Row Cache 는 Shared Pool 영역에 존재하며 다음과 같은 쿼리로 확인할 수 있다.SQL> select pool, name, bytes from v$sgastat 2 where name = 'row cache' ; 딕셔너리의 내용을 변경하고자 하는 프로세스는 그에 해당하는 row cache object 에 대해서 row cache lock 을 획득해야 한다.대표적인 경우가 시퀀스 (Sequence) 인데, 시퀀스의 nextval 을 획득하는 과정에서 딕셔너리 정보의 변경이 필요한 경우에시퀀스에 해당하는 row cache object 에 대해서 r..

IT기술/Oracle 2014.01.29

05 Library Cache 에서의 대기이벤트들

1. latch: shared poolshared pool 래치는 shared pool 의 기본 메모리 구조인 힙을 보호하는 역할을 한다.프리 청크를 찾기 위해 프리리스트를 탐색하고, 적절한 청크를 할당하고, 필요한 경우에 프리 청크를 분할(Split) 하는 일련의 작업들은모두 shared pool 래치를 획득한 후에만 가능하다.shared pool 래치를 획득하는 과정에서 경합이 발생하면 latch: shared pool 이벤트를 대기한다. - 동시에 여러 세션이 청크를 할당받아야 하는 경우 하나의 shared pool 래치를 획득하기 위해 경쟁하기 때문에 경합이 발생하게 된다.- 하드 파싱이 심한 경우 청크를 쪼개는 (Split) 현상이 자주 발생하고 이로 인해 프리리스트에 수많은 작은 크기의 프리 ..

IT기술/Oracle 2014.01.29