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 9264 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 9264
OPS : PCM Lock과 Non-PCM Lock에 대한 정리
작성자
정재익(advance)
작성일
2002-01-05 16:03
조회수
5,326

OPS : PCM Lock과 Non-PCM Lock에 대한 정리

 

OPS 환경에서는 single instance와는 구별되어 PCM lock이라는 것이 존재한다.

이것이 Non-PCM Lock과 어떻게 다르며, 어떤 방식으로 할당되는지에 대하여 Oracle 8i(8.1.7) 버젼을 기준으로, 관련된 GC_* 파라미터에 대한 설명과 함께 소개하고자 한다.

오라클 OPS 환경에서는 PCM lock 관련 파라미터를 어떻게 설정하느냐에 따라 system 전체의 성능에 많은 영향을 미친다.

 

1. Instance Lock

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

 

Instance Lock에는 PCM Lock과 Non-PCM Lock 두가지가 존재한다.

PCM(Parallel Cache Management) Lock은 Buffer cache 내의 block의 lock에 관련된 부분이고, Non-PCM Lock은 그 이외의 Lock이다.

Non-PCM Lock에는 DFS enqueue lock과 DFS Lock 두가지가 있다.

 

Instance Lock은 동기화에 필요한 cost가 굉장히 높으며, OPS 환경에서는 PCM Lock의 갯수가 Non-PCM Lock의 갯수보다 훨씬 많다. 이 PCM Lock의 갯수를 적절하게 잘 설정해야만 DLM을 적절하게 잘 구성했다 라고 말할 수 있다.

 

 

2. PCM Lock

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

 

1) PCM Lock은 X$LE 또는 GV$LOCK_ELEMENT 내에 기술된 lock element block class에 internal하게 mapping된다.

 

2) lock element라고 불리우는 data structure 내에 state 정보를 저장한다.

 

3) 다음과 같이 두 가지 방법으로 구현된다.

 

1:1 or 1:n releasable locks

1:1 or 1:n fixed locks

 

 

3. Fixed Locking

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

 

1) Oracle7에서는 default로 fixed locking 방법을 사용한다.

 

2) dba(data block address)에 hashing 알고리즘을 적용하여 data file block에 instance lock을 할당한다.

 

3) fixed locking 기법은 instance startup 시에 block에 hash 알고리즘을 이용하여 정적으로 할당이 된다.

 

4) fixed locking 기법은 보통 여러개의 data block을 cover한다.

각 data file마다 고정된 수의 PCM lock이 할당되고, 한 datafile 당 block 수가 몇 개인가에 따라 한 PCM lock이 관할하는 data block의 수가 결정이 된다.

 

 

4. GC_FILES_TO_LOCKS

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

 

각 datafile 당 PCM Lock의 갯수를 정하기 위하여 위 파라미터를 initSID.ora 화일에 셋팅한다. 만약, 이 파라미터가 지정되어 있지 않으면, Oracle 7에서는 hashing 알고리즘에 근거하여 fixed하게 lock이 assign되지만, Oracle 8부터는releasable lock이 사용된다.

해당 instance의 총 lock의 갯수를 지정하는 GC_DB_LOCKS 파라미터는 Oracle 8부터 없어졌다.

 

GC_FILES_TO_LOCKS = "{file_list=lock_count[!blocks][R][each]}:..."

 

syntax는 위와 같다. 아래에 각각에 대한 설명을 추가한다.

 

file_list : datafile 하나 또는 여러개를 set으로 지정 가능

lock_count : file_list에 나타난 datafile에 대한 PCM lock의 갯수

!blocks : cover할 연속된 block의 갯수

R : 지정한 lock에 대해서는 releasable하다는 의미

each : file_list에 지정한 각 datafile에 대해 할당된 lock의 갯수

 

예) 1=1000!25R 
        1-3=500EACH 
        1=300:2=100 

 

5. Instance Lock : FILE_LOCK view

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

 

Oracle 7.3부터 제공되는 view로서 각 datafile에 대하여 PCM Lock이 얼마나 많이 할당되었는지 확인하는 view이다.

 

select file_id, file_name, ts_name, start_lk, nlocks, blocking from file_lock;

 

file_id : datafile number

file_name : datafile name

ts_name : tablespace name the file belongs to

start_lk : first lock corresponding to the datafile

nlocks : number of PCM locks allocated to the datafile

blocking : number of blocks protected by a PCM lock on the file

 

6. 1:1 Releasable Locking

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

 

1) 1:1 releasable locking이 Oracle 8부터는 default이다.

2) Releasable locking은 dynamic하게 PCM lock을 block에 assign한다.

3) Lock은 필요할 때 assign되고 release된다.

4) Block이 release되고 나면 PCM lock 또한 release된다.

5) Lock element name은 Lock element가 reuse될 때마다 변한다.

6) Instance startup하는 데 걸리는 시간이 더 빠르다. 그러나, request 시에

DLM resource를 allocate하는 데 요구되는 시간이 더 많이 든다.

 

 

7. Non-PCM Locks

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

 

1) Non-PCM Lock은 dynamic하게 할당되고, PCM lock에 비해서 그 갯수는 훨씬 적다.

(시스템 전체 Lock의 5 ~ 10% 에 불과)

 

2) Non-PCM Lock의 갯수를 직접 조절할 수 있는 초기화 파라미터는 없다.

(except DML_LOCKS)

 

3) Non-PCM Lock은 data block을 protect하지는 않는다. 그것은 PCM Lock의 job이다.

 

4) 다음과 같은 역할을 하는 많은 type의 Non-PCM Lock이 있다.

- Control access to data and control files

- Control library and dictionary caches

- Provide communication between instances

 

5) Non-PCM Lock의 space를 조절하는 parameter들.

DB_BLOCK_BUFFERS, DB_FILES, DML_LOCKS, PARALLEL_MAX_SERVERS, PROCESSES,

SESSIONS, TRANSACTIONS

 

6) DML_LOCKS = 0 으로 설정하고 운영하는 것이 OPS에서는 일반적이다.

OPS에서는 block level lock이 우선이므로, table lock이 자주 걸리는 것이 바람직하지 않다. CREATE 또는 ALTER와 같은 작업을 할 경우에만 이 파라미터 값을 0이 아닌 다른 값으로 설정하고, 그렇지 않은 경우에는 두 instance 모두 0으로 설정한다. 두 instance 모두 같은 값이어야 할 필요는 없으나, 0으로 설정할 경우에는 양쪽 모두 0으로 설정해야 한다.

 

 

8. PCM Lock을 할당하기 위한 몇 가지 tips

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

 

1) Always set GC_FILES_TO_LOCKS

2) The value for GC_FILES_TO_LOCKS must be the same on all instances

3) Do not assign locks to undo segment files

4) No locks needed for temporary/sort blocks

5) Group read-only objects together and allocate 1 hashed lock to the file

6) Make tablespaces read-only, (no PCM locks used)

7) Never assign DBA locking to read-only or mostly read only data

8) If excessive pinging on undo blocks (down converts: X->SSX), increase

GC_ROLLBACK_LOCKS

[Top]
No.
제목
작성자
작성일
조회
9267익스텐트 및 테이블 스페이스 설정시 고려사항
정재익
2002-01-05
5387
9266Cost based optimizer에서 histogram의 적용
정재익
2002-01-05
6619
9265IP ADDRESS CHANGE IN SQL*NET
정재익
2002-01-05
4683
9264OPS : PCM Lock과 Non-PCM Lock에 대한 정리
정재익
2002-01-05
5326
9263Alter session kill에 대하여
정재익
2002-01-05
9125
9262OPEN_CURSORS 파라미터를 매우 크게 잡을 경우 고려할 사항
정재익
2002-01-05
6993
9261checkpoint not complete에 대해서
정재익
2002-01-05
7053
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.053초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다