오라클/OWI 10

LRU 알고리즘

LRU(Least Recently Used) 알고리즘 가장 오래 전에 사용된 것은 디스크에 저장하고 메모리에는 가장 최근에 사용된 데이터를 저장 함으로써, 디스크 I/O를 줄이고, 데이터베이스 시스템의 성능은 증가하도록 하는 관리 기법이다. Working Set LRU 리스트 메인 리스트 : 사용된 버퍼들의 리스트가 hot, cold로 분류 보조 리스트 : 미사용된 버퍼나 DBWR에 의해 기록된 버퍼들의 리스트 LRUW 리스트 메인 리스트 : 변경된 버퍼들의 리스트 보조 리스트 : DBWR에 의해 기록중인 버퍼들의 리스트 LRU 보조 -> LRU 메인 -> LRUW 메인 -> LRUW 보조 순으로 순환하며 버퍼를 탐색한다. 1. Standard LRU 가장 최근에 사용한 버퍼는 LRU 리스트의 MRU e..

오라클/OWI 2010.08.09

다양한 wait가 발생하는 사례 연구 3

# 상황 : latch: library cache, latch: shard pool wait 상황 - bind 변수를 사용하지 않는 경우 - (1) SQL> conn / as sysdba startup force drop table mystat purge; create table mystat as select 0 as no, event, total_waits, time_waited from v$system_event where 1 = 2; insert into mystat select 1 as no, event, total_waits, time_waited from v$system_event; set lines 200 set pages 200 clear break col event format a30 s..

오라클/OWI 2010.08.05

다양한 wait가 발생하는 사례 연구 2

상황 : 넓은 범위에 대한 질의를 인덱스를 이용해서 처리하도록 유도하는 상황이다. (1) 서버 시작 SQL> conn / as sysdba SQL> startup force (2) wait의 변화를 확인하기 위해 테이블 생성 및 스냅샷 생성 SQL> drop table mystat purge; SQL> create table mystat as select 0 as no, event, total_waits, time_waited from v$system_event where 1 = 2; SQL> insert into mystat select 1 as no, event, total_waits, time_waited from v$system_event; SQL> set lines 200 SQL> set pag..

오라클/OWI 2010.08.05

다양한 wait가 발생하는 사례 연구 1

buffer busy waits, latch: cache buffers chains, enq: HW - contention, enq: TX - contention 등 다양한 Wait를 초래하는 작업을 생성하고, 해결 방법을 모색해 본다. 상황 : freelist로 관리되는 segment에 동시 insert를 수행하는 상황이다. (1) Startup 직후의 wait 상황 확인 SQL> conn / as sysdba SQL> startup force SQL> conn system/oracle SQL> ed system_event.sql set pages 60 set lines 120 col wait_class format a20 col event format a60 select * from ( select ..

오라클/OWI 2010.08.05

[Oracle Wait Event 모니터링] 6. Top SQL 튜닝하기

[6] Top SQL 튜닝하기 (맺음) ■ Top SQL 튜닝의 필요성 지난 회까지 실시간 Wait Event 모니터링과 이벤트별 원인분석에 대해서 간단히 살펴보았다. 일시적 성능장애 시 재빨리 원인을 찾아내는 것도 중요하지만 보다 바람직한 것은 이러한 성능문제를 사전에 최대한 예방하는 것임은 두말할 필요도 없다. 오라클 성능문제를 다루는데 있어 강조하고 싶은 한가지는 시스템 자원의 배분을 변경하거나 증가를 고려하기 전에, 불필요한 작업을 최소화함으로써 자원요구 횟수와 자원점유 시간을 줄여주는 노력이 선행되어야 한다는 점이다. Wait Event에 대한 모니터링과 분석이 DBMS의 자원에 대한 경합과 관련된 성능문제를 파악하는데 유용한 방법임에 틀림없지만, 이 같은 정보는 데이터베이스 혹은 그 하위 레벨..

오라클/OWI 2010.07.10

[Oracle Wait Event 모니터링] 5. Redo buffer 관련 Wait

[5] Redo buffer 관련 Wait ■ Redo buffer 구조 오라클 리두 구조의 핵심은 모든 트랜잭션 정보를 OS 파일에 기록해 둠으로써 시스템 장애가 발생해도 트랜잭션 단위의 일관성을 잃지 않고 데이터베이스를 복구할 수 있도록 하겠다는 것이다. 리두버퍼(redo buffer)는 이처럼 데이터베이스에 가해진 모든 변경내역을 파일에 기록 하기 위해 잠시 사용되는 메모리 영역이며 리두버퍼에 기록된 리두 정보는 다시 리두로그 파일에 기록되어짐으로써 향후 시스템 복구 작업이 필요할 때에 사용하게 된다. 오라클의 리두 구조를 이해하기 위한 핵심적인 개념을 간단히 정리해보면 다음과 같다. 데이터베이스에 대한 변경내역은 블록단위로 저장된다. 물론 변경되는 모든 블록의 복사본을 통째로 저장하는 것은 아니고..

오라클/OWI 2010.07.10

[Oracle Wait Event 모니터링] 4. Buffer Cache 관련 Wait

[4] Buffer Cache 관련 Wait ■ Buffer Cache 구조 Buffer Cache의 기본적인 기능은 여러 프로세스에 의해 공통으로 자주 액세스 되는 데이터베이스 블록을 메모리에 캐쉬하여 물리적인 디스크 IO를 최소화함으로써 더 빠른 액세스 속도를 제공하기 위한 것이다. 복잡한 설명은 생략하고, Buffer Cache 의 기본구조를 이해하기 위한 몇 가지 핵심 용어들을 간단히 정리해 보도록 하겠다. ▷ Buffer header 모든 버퍼 블록들은 각자의 buffer header를 통해 액세스되고 관리된다. 즉, 메모리에 캐쉬된 특정 데이터 블록에 대한 액세스는 먼저 해쉬 알고리즘을 통해 cache chain 상의 buffer header를 찾고 해당 buffer header에 기록된 데이..

오라클/OWI 2010.07.10

[Oracle Wait Event 모니터링] 3. Shared Pool 관련 Wait

[3] Shared Pool 관련 Wait ■ Share pool과 성능문제 오라클이 공유 메모리(SGA)를 사용하는 가장 큰 이유는 기본적으로 메모리 사용을 최소화하면서 처리성능은 최대화하기 위한 것이다. 한번 액세스된 블록을 Database buffer cache에 캐쉬 함으로써 비용이 큰 Disk I/O를 최소화하는 것처럼, 한번 처리된 SQL의 실행 정보를 Shared Pool에 공유함으로써 파싱 작업을 위한 CPU, 메모리 자원의 사용을 최소화하고 SQL 수행속도를 증가시킬 수 있다. Shared Pool에는 SQL이나 PL/SQL을 수행하기 위한 각종 정보 - SQL구문 및 실행계획, PL/SQL 소스, 테이블, 뷰 등의 각종 오브젝트와 오브젝트 상호간의 의존관계, 권한관계 등 - 가 저장되어..

오라클/OWI 2010.07.10

[Oracle Wait Event 모니터링] 2. Enqueue와 Latch 개념 이해하기

[2] Enqueue와 Latch 개념 이해하기 DBMS의 가장 주된 기능 중에 하나는 동일 자원에 대한 동시 액세스를 관리하는 것이며, 이를 위해 오라클이 사용하는 대표적인 제어 구조가 Enqueue와 Latch이다. Enqueue와 Latch는 모두 특정 자원에 대한 접근을 serialize하는 것이 목적이라는 점에서는 같은 Lock의 일종이지만 관리방식이나 용도에서 차이가 있다. Enqueue는 이름에서 보듯 Queue를 통해 관리된다. 대상 자원에 대한 Owner, Waiter, Converter Queue를 관리하면서 먼저 요청한 순서대로 Lock을 획득하도록 하는 구조이며, Exclusive 모드 뿐 아니라 다양한 수준의 공유를 허용한다. 대표적인 것이 테이블 데이터를 Update할 때 사용되..

오라클/OWI 2010.07.10

[Oracle Wait Event 모니터링] 1. Oracle Wait Event 모니터링

Oracle Wait Event 모니터링 글: 안진철 (jcahn@warevalley.com) 現 ㈜웨어밸리 책임 컨설턴트 前 LG-EDS 기술 연구부문 DB 팀 - 솔루션 컨설팅 경력 6년 연재 순서 [1] Oracle Wait Event 모니터링 (2003년 1월 28일) [2] Enqueue와 Latch (2003년 2월 12일) [3] Shared Pool 관련 Wait Event (2003년 2월 26일) [4] buffer cache 관련 Wait Event (2003년 3월 12일) [5] redo log 관련 Wait Event (2003년 3월 26일) [6] Top SQL 튜닝 (2003년 4월 9일) [1] Oracle Wait Event 모니터링 흔히 DBA를 3D업종이라고 부르는 ..

오라클/OWI 2010.07.10