과거에는 많은 이들이 데이터베이스에 대한 운영에 연연했지만 시대가 흐르면서 데이터베이스의 내부 아키텍처에 점차 관심을 가지게 되었다. 이에 따라 지금은 데이터베이스 내부 구조에 대한 활발한 연구가 이뤄지는 것이 현실이다.
이러한 내부구조가 운영에 많은 도움이 되지 않을 것이라 생각할 수 있지만 실제 이와 같은 내부구조를 이해하고 있다면 문제 발생 시 데이터베이스를 좀 더 수월하게 분석할 수 있다. 또한 데이터베이스에서 발생하는 많은 현상을 논리적으로 접근할 수도 있다.
이런 이유에서 데이터베이스 구조를 학습하는 것은 어떻게 보면 데이터베이스를 좀 더 깊이 이해하는 지름길일 것이다.
데이터베이스를 학습하다 보면 SGA 영역을 학습하게 되고 거기에서 우리는 Redo Log Buffer를 확인하게 된다. 이번에는 Redo Log Buffer에서 사용되는 Latch에 대해 확인해 보자.
Latch라는 것은 무엇인가?
Latch는 메모리 자원에 대한 동시변경 및 액세스를 방지하는 역할을 수행한다. 메모리 공유 자원을 동시에 변경하거나 동시에 사용하게 되면 해당 메모리 부분은 결함이 발생해 문제를 일으키게 된다. 이러한 것을 방지하기 위해 Latch를 사용하게 된다.
Redo Log Buffer도 메모리의 자원이기 때문에 이러한 Latch를 사용하는 것은 당연한 일이다.
Latch는 [그림 1]과 같이 Solitary Latch와 Latch Set의 두가지 종류가 있다. 그럼 Latch의 각 형태에 대해 확인해 보자.
Latch 자체가 하나만 존재하는 Latch이다.
예를 들어 Shared Pool Latch 또는 Redo Allocation Latch 등은 하나만 존재하며 이와 같은 Latch는 하나만 존재하기 때문에 해당 Latch를 획득하고자 한다면 계속 대기해야 하는 Willing To Wait의 개념을 사용하게 된다.
Latch 자체에 여러 개의 Latch가 존재하며 부모 자식의 관계를 가지게 된다.
해당 Latch를 획득하고자 한다면 여러 개의 Latch가 존재하므로 대기하지 않고 계속 여러 개의 Latch에 획득을 시도하게 됨으로써 No Wiat의 개념으로 Latch를 획득하게 된다.
Latch Set의 개념을 가지는 Latch에는 Redo Copy Latch 및 Cache Buffer Chain Latch 등이 존재한다.
Redo Log Buffer에 존재하는 Latch들도 이 가운데 하나의 형식으로 구성된다.
Redo Log Buffer는 [그림 2]와 같이 세 가지 형태의 Latch가 존재한다. 그럼 각각의 Latch에 대해 확인해 보자.
Redo Allocation Latch는 Redo Log Ahead에 의해 발생하는 로그를 기록하기 위해 Redo Log Buffer에 공간을 할당하는 Latch이다.
Redo Log에 로그를 기록하기 위해서는 Redo Log Buffer 공간을 할당받아야 한다. 동시에 많은 프로세스가 Redo Log Buffer에 로그를 기록하고자 하면서 동일한 공간에 동시에 Redo Log를 기록한다면 Redo Log Buffer에는 결함이 발생하게 된다.
Redo Copy Latch의 경우에는 Redo Allocation Latch로부터 공간을 할당받은 후 로그를 기록하는 역할을 수행하는 Latch이다. 해당 Latch를 획득해야만 실제 Redo Log Buffer에 로그를 기록할 수 있다.
Redo Writing Latch는 LGWR을 기동시키고자 한 다면 반드시 필요한 Latch에 해당한다.
Redo Log Buffer의 공간이 부족해 Redo Log Buffer의 내용을 디스크로 기록하고자 한다면 반드시 LGWR이 기동되어 작업을 수행해야 한다. 이와 같은 LGWR 프로세스를 기동시키는 것은 Redo Writing Latch를 획득한 경우에만 가능하게 된다.
Redo Log Buffer에서 필요로 하는 Latch는 기본적으로 위와 같이 3개다. 이 가운데 하나의 Latch라도 문제가 발생한다면 Redo Log Buffer는 제대로 작동하지 못하며 그런 경우 데이터베이스는 정지하게 된다.
이 3개의 Latch는 마치 은행 창구와 비슷하다. Redo Allocation Latch는 번호표에 해당하고 Redo Copy Latch는 일을 해주는 창구와 같다.
예를 들어 번호표를 뽑는 곳은 하나만 존재한다. 이는 유일한 번호를 할당하기 위한 것이며 창구는 여러 곳이 존재하게 된다. 이는 마치 Redo Log Buffer의 Latch와 유사하다.
Redo Allocation Latch는 하나만 존재해 공간을 할당하게 되고 Redo Copy Latch는 창구와 같이 여러 개 존재해 작업을 수행하게 된다.
이와 같은 이유에서 Redo Allocation Latch는 Solitary Latch이며 Redo Copy Latch는 Latch Set에 해당 하게 된다. 물론 LGWR을 기동시키는 Redo Writing Latch는 하나만 존재해 LGWR을 기동하기 때문에 Solitary Latch에 해당한다.
지금까지 Redo Log Buffer에 존재하는 3개의 Latch에 대해 확인해 봤다. 이와 같은 Latch는 메모리 자원에 대한 동시 액세스와 동시 변경을 제어하는 역할을 수행하게 된다.
이러한 Latch에 문제가 발생하면 데이터베이스는 정지하고 업무에 대한 서비스는 되지 않을 수도 있다. 그렇기 때문에 우리 눈에는 보이지 않지만 이와 같은 Latch에도 많은 주의를 기울여야 한다.
- 강좌 URL : http://www.gurubee.net/lecture/2691
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.