HANA DB Row Table들은 메모리에 상주해 있는 반면, Column Table들은 필요에 따라 메모리에 Load 되기도 하고, Unload 되기도 합니다. Unload 된다는 것은 메모리에서 빠지고 디스크로 돌아가는 것을 의미하는데요.

보통의 경우, Unload 자주 발생하지 않는 것이 좋습니다. Unload 자주 발생한다는 것은 Memory Bottleneck 발생했다는 것이고, 이는 시스템에 부하가 발생했다는 것이기 때문이지요.

 

그럼 알아 두면 좋을 Column table Unload Load 상황에 대해 가지 알아보겠습니다.

 

 

1. 명시적인(수동) Unload/Load

Column Table Memory Manager 판단에 의해 자동으로 Unload/Load 수행되며, 필요에 따라 수동으로 쿼리를 통해 수행할 있습니다. 수동 Unload 경우 테이블 단위로 수행할 있으며 Load 경우 테이블 또는 Column 별로 수행할 있습니다.

수행 쿼리는 다음과 같습니다.

UNLOAD <table_name> ALL

LOAD <table_name> (<column#1>, <column#2>…)

 

2. 자동 Unload

자동 Unload 경우에는 테이블 별로 우선순위를 부여할 있으며, 0~9까지의 값을 가집니다. 우선순위가 0 가까울수록 Unload 발생할 확률이 줄어드는 것이며, 0 경우 Unload 발생하지 않습니다. 반대로 9 경우 메모리 부족 현상 발생 , 가장 먼저 Unload 됩니다. 별도로 지정하지 않았을 경우, 기본값은 5입니다.

테이블 별로 우선순위를 조정하는 방법은 아래 쿼리를 수행하시면 됩니다.

ALTER TABLE <table_name> UNLOAD PRIORITY <priority>

 

SAP Note 1977207 - How to handle HANA Alert 55: Columnstore unloads 따르면, _SYS* 스키마 밑에 있는 모든 테이블에 대해서는 우선 순위를 2 설정할 것을 권고합니다.

 

또한 아래 파라미터 설정으로 사용하지 않은 시간을 기준으로 오브젝트를 Unload 있습니다.

global.ini -> [memoryobjects] -> unused_retention_period (기본값 0, 비활성화)

오브젝트가 위의 기준 시간을 초과하였는지 확인하는 주기는 아래 파라미터로 설정합니다.

global.ini -> [memoryobjects] -> unused_retention_period_check_interval (기본값 7200)

 

위의 설정은 전체 테이블에 대해 적용되는 방법이고, 테이블 별로도 각각 파라미터를 먹일 있습니다.

ALTER TABLE "<table_name>" WITH PARAMETERS ( 'UNUSED_RETENTION_PERIOD' = '<unused_retention_period_s>' )

 

3. HANA DB 구동 Load

HANA DB 구동 , 테이블을 자동으로 Load하도록 설정할 있습니다. (HANA DB 구동 모든 테이블이 메모리에 Load 되지 않고, 필요한 테이블만 Load 됩니다.)

ALTER TABLE "<table>" PRELOAD ALL

ALTER TABLE "<table>" PRELOAD ("<column1>", ..., "<columnN>")

반대로 자동 Load 해제할 수도 있습니다.

ALTER TABLE "<table>" PRELOAD NONE

 

참고 자료:

SAP Note 2127458 - FAQ: SAP HANA Loads and Unloads (https://launchpad.support.sap.com/#/notes/0002127458)

SAP Note 1977207 - How to handle HANA Alert 55: Columnstore unloads (https://launchpad.support.sap.com/#/notes/1977207)

+ Recent posts