database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Tutorials 11296 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 11296
Oracle 기초강좌 (1)
작성자
정재익(advance)
작성일
2002-07-11 10:24
조회수
25,139

원본출처 : http://www.oraclejava.co.kr

 

-------------------------------

Oracle Instance란...

-------------------------------

 

DataBase가 시작될때 Oracle은 시스템글로벌영역(SGA)

이라는 메모리 영역을 할당하여 하나 이상의 Oracle Process를 시작합니다.

SGA와 Process를 합쳐 DataBase Instance라고 합니다.

Instance의 memory와 process들은 database의 data를 효율적으로 관리하기 위해서 사용되며 관련 database에 대하여 하나의 user 또는 여러 user들에 의해서 이용된다.

 

[SGA ---> DataBase Buffer Cache, Redo Log Buffer, Share Pool등으로 구성]

자세한 부분별 설명은 다은 강좌에 이어 집니다.

 

Instance를 시작한다음 인스턴스에 DataBase를 Mount합니다.

다중 인스턴스가 동시에 자신의 물리적 DataBase를 Access하면서

동일한 Computer에서 실행될수 있습니다.

Oracle병렬서버를 사용하면 다중인스턴스에 단일 데이터베이스를

마운트할수있습니다.

 

[메모리와 Process]Oracle 프로세스?(1)

 

Oracle 프로세스 구조는 다중 작업이 발생하는 방법과 다중 작업이 수행되는 방식을 정의 하므로 매우 중요합니다.

A.단일 프로세스 Oracle Instance :단일 사용자 Oracle은 하나의 프로세스가 모든 Oracle Code를 실행하는 시스템입니다. Oracle의 일부분과 Client응용프로그램을 분리하여 실행하는데 다른 프로세스를사용하지 않습니다.대신 Oracle의 모든 코드와 단일사용자의 데이터베이스 응용 프로그램은 단일 프로세스에 의해 실행됩니다.

 

B.다중 프로세스 Oracle Instance : 다중사용자 Oracle은 여러 개의 프로세스가 Oracle의 각기 다른 부분을 실행하고 접속한 각사용자들은 개별 프로세스를 실행합니다.

 

C.다중 사용자 환경에서의 Oracle 프로세스

1. 데이터베이스 기록자(DBWR)

- DataBase Buffer의 내용을 데이터 파일에 기록하는 역할을 하며 DataBase Buffer Cache를 관리하는 Oracle BackGround 프로세스임

- DataBase Buffer Cache에 있는 내용이 수정되면 해당 버퍼는 'Dirty'로 표시되는데 이 Dirty Buffer를 Disk에 기록하여 Buffer Cache를 깨끗한 상태로 유지하는 역할을 함

- LRU 알고리즘에 의해 최근에 사용된 데이터블록을 메모리에 유지합니다.

- Buffer Cache는 Multi Latch를 자지는데 래치는 공유 데이터구조를 보호하는 자동내부 잠금입니다. DB_BLOCK_LRU_LATCHES라는 Parameter는 시스템에 구성되는 래치수

와 기본적으로 CPU에 설정되는 Latch 수를 제어합니다.

- 서버프로세스가 Buffer를 Dirty목록으로 이동시킨후 Dirty목록이 임계길이에 도달했음을 발견하면 Server 프로세스는 DBWR에 신호를 보냅니다.

- 체크포인트가 발생하면 LGWR(로그기록자)는 DBWR에 신호를 보냅니다. 즉 Check Point가 발생하면 LGWR는 디스크에 기록되어야 하는 수정된 Buffer 목록을 지정합니다. DBWR는 디스크에 지정된 Buffer의 내용을 기록합니다.

 

2. 로그기록자(LGWR)

- Redo Log Buffer를 디스크에 있는 Redo Log File에 등록합니다.

- 사용자 프로세스가 Transaction을 Commit할때의 Commit Record및 매3초 마다의 Redo Log buffer, DBWR가 수정된 버퍼를 디스크에 기록할때의 Redo Buffer의 내용등을 기록합니다.

 

- 사용자가 Commit명령을 발생시키면 LGWR는 Commit Record를 즉시 Redo Log Buffer에 넣지만 해당 데이터 버퍼의 변경은 변경사항을 데이터 파일에 기록하는 것이 더 효율적일때까지 지연됩니다.

 

3 체크포인트(CKPT)

- Check Point가 발생하면 Oracle은 모든 DataFile의 Header를 갱신하여 체크포인트임을 나타내야 합니다. 보통 LGWR가 이러한 작업을 수행하지만 체크포인트가 시스템 Performance를 저하 시킨다면 CKPT를 활성화하여 체크포인트 수행작업을 LGWR가 수행하는 다른 작업과 분리할

수 있습니다.

- 체크포인트가 모든 응용프로그램에 꼭 필요한 것은 아니며 DataFile의 수가 많아 Check Point중에 LGWR프로세스 성능이 저하되면 CKPT프로세스를 활성화 할수있다.

- 초기화 Parameter CHECK_POINT_PROCESS는 CKPT프로세스를 활성화 하거나 비활성화 합니다.

 

4. 시스템모니터(SMON)

- 인스턴스 시작시에 인스턴스의 복구를 수행, 더 이상 사용하지 않는 임시 Segment를 삭제하며 사용 가능한 빈영역을 더 큰 블록으로 만들기위해 인법한 빈 확장영역을 하나로 통합합니다.

 

5. 프로세스모니터(PMON)

- 사용자 프로세스에 장애가 발생하면 프로세스 복구를 수행,Cache를 비우고 해당 프로세스가 사용한 자원을 해제하며,활성 Transaction의 Table상태를 재설정하고 Lock을 해제하며 Active Process목록에서 ID를 제거한다.

- 주기적으로 Dispatch와 서버 프로세스의 상태를 점검하고 활동중이 아니면 재시작합니다.

 

 

[메모리와 Process]Oracle 프로세스?(2)

 

6. 복구자(RECO)

- 분산 Transaction을 포함한 장애를 자동으로 해결하는 분산 Option과 함께 사용되는 프로세스, 시스템이 분산 트랜잭션을 허용하고 DISTRIBUTED_TRANSACTIONS가 0보다 클때만 존재합니다.

 

7. 아카이브(ARCH)

- Online Redo Log File이 꽉차면 이를 지정된 저장장소에 저장,Redo Log가 Archive Mode에서 운영되고 자동 Archiving기능이 활성화 되어 있을 때만 존재합니다.

 

8. 잠금(LcKn)

- 병렬서버 옵션에서 최대 10개 까지의 잠금Process(LCK0~LCK10)가 인스텀스의 Lock을 제공합니다. 그러나 대부분의 병렬서버 시스템에서는 하나의 LCK프로세스(LCK0)만 으로도 충분합니다.

 

9. 스냅샷갱신(SNPn)

- 분산 옵션에서 최대 10갸 까지의 스냅샷갱신프로세스(SNP0~SNP10)가 자동으로 Table SnapShot을 화면에 다시 표시합니다.

 

10. 디스패쳐(Dnnn)

- 디스패쳐 프로세스를 사용하면 사용자 프로세스는 제한된 수의 서버 프로세스를 공유할 수 있습니다. 디스패쳐가 없다면 각 사용자 프로세스는 하나의 전용(Dedicated)서 버 프로세스를 필요로 합니다. 그러나 Multi Thread Server에서는 동일한 수의 사용자에 대해 더 적은 수의 공유서버 프로세스를 필요로 합니다.

- 단일 DataBase Instance에 대해 다중 Dispatcher 프로세스를 생성할 수 있습니다. Oracle을 사용하는 시스템의 Network Protocol에 대해 적어도 하나의 디스페처가 생성되어야 합니다. DBA는 프로세스당 접속수에 대한 OS의 한계에 따라 가장 적합한수의 디스패처를 시작해야 하며 인스턴스가 실행되는 동안 디스패처 프로세스를 추가또는 삭제할수 있다.

 

- 인스턴스가 시작되면 Listener는 사용자를 Oracle과 접속시키는 통신경로를 설정하며, 각 디스패처는 리스너에 접속 요구사항을 수신할 수 있는 주소를 부여합니다.

사용자 프로세스가 접속을 요구하면 리스너는 요구사항을 점검하고 사용자가 디스패처를 사용할 수 있을지에 대해 결정합니다. 사용할 수 있을 경우 리스너는 로드할 양이 가장적은 디스패처 주소를 돌려주며 사용자 프로세스는 디스패처에 직접 접속됩니다.

 

 

[메모리와 Process]SGA란?

 

SGA는 DataBase Buffer Cache,Redo Log Buffer, Shared Pool등으로 구성된다.

1.DataBase Buffer Cache

- DataFile로 부터 읽어들인 Data Block의 복사본을 가지고 있습니다.

- Cache내의 Buffer에는 수정되었지만 디스크에 기록되지 않은 Dirty Buffer와 빈버퍼,고정된버퍼,아직 더티목록으로 이동되지 않은 더티목록등으로 구성되는 LRU목록등이 있다.

- Oracle은 사용자 프로세스가 빈버퍼를 찾지 못하고 버퍼의 임계점에 도달하면 프로세스는 LRU목록 검색을 중지하고 Dirty Buffer를 Disk에 기록하도록 DBWR에 신호를 보낸다.

- 초기 Parameter DB_BLOCK_BUFFERS는 DB의 DataBase Buffer Cache의 Buffer수를 지정합니다. Cache의 Buffer는 하나의 Oracle Data Block과 동일하며,Cache는 제한된 크기이므로 Cache가 가득찬후 Cache실패가 발생하면 Oracle은 Cache에 있는 Data를 디스크에 기록한다.

- size가 작으므로 발생 할 수 있는 현상은 빈번한 디스크 I/O이다. 크기는 db_block_buffers로 지정하며 buffer의 갯수를 지정한다. byte 산정은 db_block_buffers * db_block_size로 산출된다.       

 

2.Redo Log Buffer

- DataBase의 변경사항 정보를 유지하는 SGA에 있는 원형 Buffer

- BackGround 프로세스인 LGWR는 Redo Log Buffer를 디스크상에서 사용중인 Online Redo Log File Group에 기록한다.

- Redo Log Buffer의 크기는 Parameter LOG_BUFFER로 결정한다

큰 값을 가질경우 Log File의 I/O가 감소하며,트랜잭션이 길고 수가 많은 경우에 특히 더감소한다. 기본크기는 OS DataBlock의 4배임.

 

3.공유풀(Shared Pool)

A. Library Cache

- 공유 SQL영역, 전용SQL영역,PL/SQL Procedure와 Package, 잠금장치나 Library Cache Handle과 같은 제어구조를 포함한다.

- 공유 SQL영역은 단일 SQL명령문에 대한 구문분석 트리와 실행계획을 가지는 영역이며, 전용SQL영역은 바인드정보나 실행 시간 버퍼(SQL이 실행되는 동안 사용 되는 정보, Insert/Update/Delete보다 Select가 많음) 같은 데이터를 가지는 영역

- 전용SQL여역을 관리하는 것은 사용자 프로세스이고,사용자 프로세스가 할당할수 있는 전용SQL영역의 수는 OPEN_CURSORS(Default 50)로 제한 되지만 전용SQL 영역할당 또는 해제는 사용자가 사용하는 응용프로그램 도구에 의해 좌우됨

B. Dictionary Cache

- Data Dictionary(Table/View의 이름,Column이름과유현,Oracle사용자 권한)는 자주 Access되므로 메모리에 두개의 특별한 위치를 지정하여 Dicitonary Data를 저장

 

- 공유풀에서 메모리 할당 및 재사용

공유풀에 있는 항목은 수정된 LRU 알고리즘에 의해 지워질 때 까지 남아있다. Oracle은 공유풀을 확인하여 동일한 명령문이 공유풀에 있는지 확인한다. 이때 같은 Query라도 대순자를 틀리게하여 Query하는 경우에는 틀린것으로 인식하여 또다른 공유풀의 영역을 할당한다.(즉 SELECT * FROM EMP와 select * from emp는 다르게 인식) 이렇게 함으로서 메모리를 절약하며,수행능력이 향상된다.

- ANALYZE명령어를 사용하여 Table/Cluster/Index의 통계를 할경우 분석된 개체를 참조하는 명령문을 포함하는 모든 공유 SQL영역이 공유풀에서 지워진다.

- SGA의 크기는 Instance 시작시에 결정되며 대부분의 시스템에서 성능을 최적화 하려면 전체 SGA의 크기가 실제 Memory 크기에 맞아야 한다.가상메모리를 사용하면 OS가 SGA의 일부를 Page 하므로 시스템 성능이 급격히 떨어진다.

 

- SGA의 크기에 영향을 주는 Parameter

DB_BLOCK_SIZE : 하나의 Data Block과 DataBase Buffer크기를 Byte 단위로 나타낸 것

DB_BLOCK_BUFFERS : DB_BLOCK_SIZE인 데이터베이스 Buffer수를 나타냄 LOG_BUFFER : 리두로그 버퍼에 대한 할당된 바이트수 SHARED_POOL_SIZE : 공유SQL영역과 PL/SQL명령문에 할당된 영역의 크기를 Byte 단위로 나타낸 것

 

[메모리와 Process]PGA란?

 

PGA(프로그램 글로벌영역,프로세스 글로벌영역)

 

- 단일 프로세스(서버,백그라운드)에 대한 데이터와 제저정보를 저장하는 메모리 영역

- 사용자 프로세스가 접속되고 세션이 형성되면 Oracle이 PGA를 할당한다.

- 각 서버프로세스에 하나의 PGA가 할당되며,PGA는 서버프로세스에 대해 배타적이며 항상 프로세스에 대해 실행되는 Oracle Code만을 읽거나 쓸수있슴

- PGA의 크기는 운영체제마다 정적이며, OPEN_LINKS,DB_FILES,LOG_FILES등의 Parameter는 PGA의 크기에 영향을 준다. 사용자가 일단 접속되면 사용자는 PGA영역을 초과하여 실행할수 없슴.

 

1. 스택영역

- PGA는 세션변수,배열 및 다른 정보를 저장하기위해 할당된 메모리인 스택 영역을 포함

 

2. 세션정보

- 다중스레드 서버없이 실행되는 인스턴스의 PGA는 전용SQL영역이나 다른 정보와 같은 사용자 세션에 대한 추가 메모리가 필요하고 인스턴스가 다중스레드 서버를 실행하는 경우 이추가 메모리는 PGA에 있지 않고 SGA내에 할당된다.

 

3. 공유SQL영역

- 다중스레드 서버와 함께 수행되는지의 여부에 관계없이 공유 SQL영역은 항상 PGA가 아닌 SGA의 공유 메모리에 존재합니다.

[Top]
No.
제목
작성자
작성일
조회
11299Oracle 기초강좌 (4)
정재익
2002-07-11
30165
11298Oracle 기초강좌 (3)
정재익
2002-07-11
20633
11297Oracle 기초강좌 (2)
정재익
2002-07-11
24146
11296Oracle 기초강좌 (1)
정재익
2002-07-11
25139
11294For information on Red Hat Linux Installation, Security, Documentation, Kernel, Oracle, and Linux in general, see www.werner.us (Installation Oracle 9i on RedHat 7.x)
정재익
2002-07-11
40060
11048리눅스용 오라클 cd image 만들기
정재익
2002-06-11
6141
11047오라클 8i 설치시 리눅스 커널 설정
정재익
2002-06-11
5818
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.047초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다