SAP HANA DB에는 Column Table을 저장하는 아키텍처로 Main Storage와 Delta Storage라는 두 가지 저장소 개념을 사용하고 있습니다. Main Storage에는 압축된 데이터가 들어가게 되는데, 그럼 Write Operation이 발생하면 그때그때 다시 정렬하고 압축하고 해야할까요? 이런 문제를 해결하기 위해 HANA DB는 Delta Storage를 사용합니다. 이제부터 이 Delta 영역과 Delta Merge에 대해 알아보도록 하죠.
그림 출처: https://launchpad.support.sap.com/#/notes/2057046
우선 위의 그림을 보면 이해가 편하실 겁니다.
Write Operation은 Delta Storage라는 영역에서 이루어지며, Read Operation은 Main Storage와 Delta Storage에서 둘다 이루어집니다. 이렇게 Delta Storage에 쌓이던 변경 사항은 Delta Merge라는 작업에 의해 Main Storage에 합쳐지게 됩니다.
Delta Merge 작업에 대해서는 아래 그림을 보실까요?
그림 출처: https://launchpad.support.sap.com/#/notes/2057046
Delta Storage와 Main Storage가 합쳐지는 과정(Delta merge) 중에는 당연히 Delta Storage에 변경사항을 쓸 수 없겠죠? 그렇기 때문에 SAP HANA DB에서는 Delta Storage를 Delta1, Delta2로 개념적으로 나누어 놨습니다. Delta1이 Main에 합쳐지는 동안에는 변경사항을 Delta2에 쓰게 하는 거죠. Main에 있던 데이터들도 Main2라는 것을 만들어서 아예 새로운 영역을 만들어냅니다. 이 과정은 위의 가운데 그림을 보시면 이해가 편할 겁니다. 한 눈에 봐도 메모리 자원을 많이 사용하겠죠? 실제로도 이 Delta Merge가 이루어지는 동안에는 메모리를 많이 사용합니다. Delta Storage 내의 테이블 크기의 거의 2배의 공간을 요구한다고 합니다. 또한 테이블 압축작업을 수행해야 하기 때문에 CPU의 사용률도 높아지죠.
그럼 Delta Merge를 수행해야 하는지 안하는지는 누가 판단할까요?
이것을 판단하는 것은 Mergedog이라는 프로세스가 담당합니다. Mergedog은 주기적으로 Column Table을 확인해서 Delta Merge 작업을 수행할 지 말지 판단합니다.
Mergedog 기능은 특별한 경우를 제외하고는 켜져 이어야 합니다. 기능이 켜져 있는지 확인하는 방법은 다음 파라미터를 확인하면 됩니다.
indexserver.ini -> [mergedog] -> active
Delta Merge는 Mergedog에 의해 자동으로 수행되기도 하지만, 수동으로 수행할 수도 있습니다. 아래 쿼리를 수행하시면 됩니다.
MERGE DELTA OF "<table_name>" [FORCE REBUILD]
※ SAP에서는 강제 Delta Merge 수행은 하지 않을 것을 권고합니다. Delta Merge는 CPU, Memory 자원을 많이 사용하고, 또한 Mergedog이 알아서 상황을 판단하고 수행하기 때문이죠. 그냥 이런 게 있구나~ 라는 것만 알아두세요 ㅎㅎ
Delta Storage에 저장되는 데이터는 디스크에 저장되지 않고 메모리에만 존재하게 됩니다. Delta Merge가 수행되고 나서야 디스크에 들어가게 되지요. 그리고 Delta Storage에 있던 Delta log들도 삭제됩니다. Delta log는 변경사항에 대한 로그로, 오라클의 Redo log와 같다고 보시면 됩니다.
※ Delta log는 Delta Storage 영역 외에 디스크에도 쓰이기 때문에, Power outage가 발생하더라도 변경사항을 유지할 수 있습니다.
출처:
https://www.sap.com/documents/2012/05/9ec46a16-547c-0010-82c7-eda71af511fa.html
http://hanadba.blogspot.com/2016/01/delta-merge-in-hana.html
SAP Note 2057046 - FAQ: SAP HANA Delta Merges (https://launchpad.support.sap.com/#/notes/2057046)
'SAP HANA' 카테고리의 다른 글
SAP HANA DB - 메모리 관련 파라미터들 (0) | 2022.04.04 |
---|---|
SAP HANA DB - Monitoring (SQL Statements Collection) (0) | 2022.04.04 |
SAP HANA DB - System / Server Architecture (0) | 2022.04.03 |
SAP HANA DB - Column Table Unload/Load (0) | 2022.03.06 |
SAP HANA DB - Row Store / Column Store (0) | 2022.03.06 |