이번 포스팅에서는 Statement Memory 관리 방법에 대해 알아보겠습니다.
1. Tracking 설정
우선 메모리의 워크로드 데이터를 얻기 위해서는 Tracking 설정을 해야 합니다.
gloal_ini 밑에 있는 enable_tracking, memory_tracking 파라미터를 on으로 설정합니다. (기본값 : off)
2. 메모리 워크로드 관련 파라미터
① total_statement_memory_limit
Statements들이 사용할 수 있는 메모리 한계입니다. 한 개의 Statement가 아닌 시스템에서 실행되는 Statements 전체에 해당되는 것이죠. (기본값 : 없음)
② statement_memory_limit
Statement 당 최대로 할당 가능한 메모리입니다.
GB 단위이며, 기본값은 0(무제한)입니다.
이 제한에 걸리게 되면 Dump를 발생시키면서 Statement는 종료됩니다.
※ 특정 사용자에게 적용 방법: ALTER USER <사용자명> SET PARAMETER STATEMENT MEMORY LIMIT = <gb>
※ 사용자에게 적용한 것 해제 방법: ALTER USER <사용자명> CLEAR PARAMETER STATEMENT MEMORY LIMIT
※ 사용자에게 적용한 값이 글로벌로 적용한 값보다 우선하여 적용됩니다. 사용자에게 적용하지 않았다면 글로벌 값이 적용되구요.
③ statement_memory_limit_threshold
이 파라미터는 위의 statement_memory_limit이 적용되기 전의 조건을 설정하는 것입니다.
즉, 현재 HANA DB에서 사용하고 있는 메모리가 Global Allocation Limit의 몇 %를 넘지 않으면 statement_memory_limit을 적용시키지 않을거라는 걸 설정하는 거지요.
statement_memory_limit을 좀 더 유도리있게 사용하려는 것이죠.
단위는 %이며, 기본값은 0입니다. 기본값이 0이라는 것은 statement_memory_limit을 설정했을 경우, 무조건 이 값을 초과하게 되면 해당 Statement를 Cancel시킨다는 것을 의미하죠.
자, 예를 들어봅시다!
물리 메모리가 128GB, Global Allocation Limit이 115GB, statement_memory_limit이 1GB, statement_memory_limit_threshold가 60%라고 가정합시다.
그럼 statement_memory_limit_threshold는 115*0.6=69.0 GB이겠죠?
만약에 현재 HANA DB에서 사용하고 있는 메모리가 50GB라고 가정하고,
2GB를 소비하는 Statement가 들어왔을 때, 이 Statement는 동작하게 될까요?
네, 동작합니다.
아무리 statement_memory_limit 값이 1GB로 설정되어 있다고 하더라도, 현재 사용하고 있는 메모리(50GB)가 statement_memory_limit_threshold(69GB)를 초과하지 않기 때문에 문제가 안되는 거지요.
만약 현재 HANA DB에서 메모리를 70GB 사용하고 있다고 하면 어떨까요?
2GB를 소비하는 Statement는 Cancelled됩니다.
이렇게 Statement Memory Limit과 Statement Memory Limit Threshold로 워크로드를 관리하는 방법에 대해 간략히 알아보았습니다.
참고자료:
'SAP HANA' 카테고리의 다른 글
SAP HANA DB - Replication Mode (0) | 2022.04.24 |
---|---|
데이터베이스에서 ACID란? (0) | 2022.04.05 |
SAP HANA DB - 메모리 관련 파라미터들 (0) | 2022.04.04 |
SAP HANA DB - Monitoring (SQL Statements Collection) (0) | 2022.04.04 |
SAP HANA DB - Delta Merge (0) | 2022.04.03 |