HANA DB

SAP HANA 메모리 구성

SAP HANA 메모리 구성

 

HANA DB(Database)가 메모리를 기반으로 기동되는 DB이기 때문에 여기서 메모리에 대해서 좀더 자세히 다루고 가도록 하겠습니다.

HANA의 메모리를 실제로 하드웨어(H/W)에서 사용하는 메모리와 HANA DB에서 사용하는 메모리를 어떻게 구성되어 있고 실제 물리적인 메모리(Physical Memory=Real Memory)와 HANA DB에서 사용하는 메모리의 관계를 설명하여 좀더 이해하기 쉽게 설명 드리고자 합니다.

Image-0000

HANA Used Memory 는 실세 HANA 사용중에 있는 메모리를 말합니다.

실제로 HANA가 메모리를 사용하는 것은 이 Used Memory를 말합니다.

Memory Pool은 SAP 제품의 특징을 SAP ERP인 제품에도 사용하는 개념입니다. SAP 제품이 시작(기동)되면 기본적으로 메모리를 일정부분을 미리 확보하고 시작(Start)하게 되는게 이것을 미리 확보하게 되는 공간을 메모리 폴(Memory Pool)이라고 합니다.

Code and Stack 은 HANA실행하는 엔진 영역으로 Coding을 이루어진 프로그램 영역입니다.

이 영역은 대략 6GB 정도로 무시해도 좋을 정도로 미미하게 사용하는 메모리 영역입니다.

System Tables 은 HANA DB가 자체적으로 관리해주는 시스템 테이블들로 DB 사용자가 SYS, SYSTEM으로 되어 있는 사용자들입니다.

Row Tables 는 HANA에서 사용하는 Row(열)단위 테이블들로 HANA가 Colume단위 Table들을 많이 사용하지만 필요에 따라 Row 테이블들도 포함되어 있어서 row단위 테이블이 차지하는 메모리 영역입니다.

Column Tables은 대부분의 테이블을 차지하는 것으로 HANA가 제일 많이 사용하는 테이블이고 메모리 또한 가장 많이 사용하고 있습니다.

Database Management and Temporary computations 영역은 DB를 관리하는 공간으로 오라클에 비유하면은 V$INSTACNE, V$SESSION등 DB를 관리하는 영역이고, Temporary computation은 임시로 계산을 수행하는 영역으로 오라클의 Temp 테이블 스페이스라고 생각하면 됩니다.

POOL(fee)영역은 HANA가 처음 시작(구동)하게 되면 처음 메모리를 가지고 시작하기 때문에 임시로 POOL이란곳에 메모리를 확보한 후에 필요할 때 POOL영역을 사용하게 됩니다.

여기에서는 HANA Virtual Memory로 해서 설명을 하도록 하겠습니다.

Image-0001

여기서 SAP에서 혼동하게 만든 내용인데 OS의 Virtual Memory와 HANA의 Virtual Memory 차이를 가져가기 위해서 만든것으로 생각됩니다.

구지 이것을 HANA Virtual Memory라로 표현을 했는지 이해가 안되고 혼동하게 만드는 그림입니다.

OS(Linux)상에서 말하는 Virtual Memory는 물리적인 메모리(Physical Memory)와 Disk의 Paging Area를 합한 것이다.

그런데 SAP는 HANA Virtual Memory라고 하는 용어를 들고 나와서 혼동을 일으키게 만들었다.

SAP의 HANA에서 말하는 HANA Virtual Memory는 Used Memory + POOL(free)입니다.

여기에 아래의 그림을 보면서 좀더 자세히 HANA Virtual Memory를 설명하겠습니다.

Image-0003

HANA Virtual Memory = Resident Memory 입니다.

그래서 OS Virtual Memory = Physical Memory + Paging Area on Disk 입니다.

아직도 혼동이 되고 이해가 되지 않을 것 입니다. 이것을 자세히 몰라도 관계가 없지만 HANA에서 메모리가 중요하다 보니 좀더 명확하게 집고 넘어가겠습니다.

  • Used Memory = Code & Stack + Table(Row, Column) + WorkPlace(Temp computation)
  • HANA Virtual Memory = Used Memory + Pool(free미리 할당한공간)
  • Resident Memory = HANA Virtual Memory
  • Physical Memory = Resident Memory + Free(OS free공간)
  • OS Virtual Memory = Physical Memory + Paging Area on Disk

여기에서 각 물리적인 메모리(Physical Memroy), 가상의 메모리(Virtual Memroy), 사용중인 메모리(Used Memory)의 관계에 대해서 설명 드리겠습니다.

SAP에서 말하는 사전적인 의미의 메모리 정의입니다.

Memory Area Context  Level Details
Physical memory operating system global Total amount of memory physically available on host level (typically RAM)
Virtual memory operating system process Total amount of memory allocated by a process held both in physical memory and in paging area on disk
Resident memory operating system process Total amount of memory allocated by a process held in physical memory
Allocated memory SAP HANA process Total amount of memory allocated by the SAP HANA processes, limited by the configurable SAP HANA global allocation limit
Used memory SAP HANA process Total amount of memory in use by the SAP HANA processes
Shared memory SAP HANA global Memory that can be accessed by different processes, e.g.:

  • Specific row store components (tables, catalog, free)
  • Nameserver topology
Heap memory SAP HANA process Memory exclusively accessible by threads of a single process (e.g. indexserver), e.g.:

  • Column store
  • Row store indexes
  • Intermediate results
  • Temporary structures
  • Page cache
Code SAP HANA global Code
Stack SAP HANA process Stack

여기에서 메모리 사이의 크기 상관관계를 설명하겠습니다.

  • Physical memory > virtual memory
  • Virtual memory = resident memory >= allocated memory
  • Allocated memory = shared memory + allocated heap memory
  • Used memory = shared memory + used heap memory
  • Code, stack: Usually negligible sizes

이렇게 좀 복잡하게 메모리를 정의하고 잇는데요. 여기에서 우리가 알아야 할 것은 할당된 메모리(Allocated Memroy)가 중요하게 다루어 지는데요. 여기에서 할당된 메모리를 우리가 H/W벤더(IBM, HP)에 PC를 주문하게 되는데 여기 PC에 10GB 메모리를 꽂아 있다고 생각하면 여기에 우리가 Window xp를 설치하게 되면 pc의 10GB를 다 사용하지 못하고 2GB밖에 사용하지 못합니다.

이것은 윈도우 XP가 최대 메모리를 사용하는 양이 2GB밖에 사용하지 못하여 PC가 10GB를 사용하도록 메모리를 꽂아 놓았지만 OS(Windows XP)가 2GB밖에 인식하지 못하게 됩니다.

 

이것을 윈도우 XP로 예를 들었는데 할당된 메모리(Allocated memory)는 서버의 메모리가 100GB를 사용하도록 메모리가 설치(꽃아)되어 있다고 하지만 할당(Allocated)을 50GB 설정하게 되면 실제로 100GB를 다 사용하지 못하고 할당된 50GB만 HANA가 사용하게 됩니다.

이것을 우리는 할당된 메모리(Allocated Memory)라고 합니다.

 

Physical memory > virtual memory 는

OS의 설치된 물리적인 메모리(Physical Memory)는 HANA Virtual Memory보다 크게 됩니다.

여기서 우리는 OS의 Virtual Memory는 물리적인 메모리(Physical Memory) + 스웝영역(Paging Area on Disk) 입니다.

그래서 아래와 같은 도식이 성립하게 됩니다.

OS의 Virtual Memory > Physical Memory > HANA Virtual Memory

할당된 메모리(Allocated Memory) = Shared memory + allocated Heap Memory 로 표현을 했는데요. SAP ERP의 메모리 구조에서 나오는 공유메모리(Shared Memroy)와 독점적인 메모리(Heap Memroy)를 HANA에서도 적용하여 설명을 하고 있습니다.

Allocated Memory는 HANA의 Global 파라미터인 Allocated_limited 로 메모리 사용을 제한 할 수 있니다.

 

마지막으로 각 메모리를 최종 정리하도록 하겠습니다.

물리적인 메모리(Physical Memory)는 하드웨어(H/W)가 물리적으로 장착된 메모리입니다.

HANA 가상메모리(Virtual Memory)는 HANA DB가 사용하는 메모리와 Code & Stack이 사용하는 메모리 입니다.

사용중인 메모리(Used Memory)는 실제 HANA가 사용하고 있는 메모리입니다.

할당된 메모리(Allocated Memory)를 HANA를 얼마만큼 할당해서 사용하겠다고 제한을 둔 메모리입니다.

 

아래 그림은 HANA의 메모리 설명에 자주 등장하는 내용입니다.

Image-0006

이 그림인 좀 이해하기 난해한 사항이 있습니다. 여기에서 이제 자세하게 메모리의 사용하는 관계를 설명하겠습니다. 여기에서 리룩스(Liunx)의 메모리 관리상에 특이한 점이 있어 이부분을 설명드리겠습니다.

이 그림에서 제일 위쪽에 있는 Physical Memory 부터 설명하도록 하겠습니다.

Physical Memory는 물리적으로 서버의 하드웨어(H/W)에 설치된 메모리를 말합니다.

Allocation Limit 는 HANA DB를 총 사용량을 할당하는 메모리 양입니다.

Virtual Memory는 Code, Row/Column Table, Temporary 연산, Pool(미리 할당한 메모리공간)입니다.

Resident Memory는 Linux관점에서 상주 공간으로 HANA DB가 메모리를 사용하는 공간으로 Virtual Memory와 동일합니다.

Used Memory는 실제로 HANA가 메모리를 사용 중에 있는 공간입니다.

 

이 그림에서 강조하는 내용은 Linux 와 HANA DB의 메모리 관리에 차이점을 설명하고 있는데요.

HANA Virtual Memory(OS의 Virtual Memory가 아님)를 HANA가 기동될 때 미리 메모리를 할당 받는 Pool영역을 포함합니다. 이 Pool영역은 임시로 계산을 수행하거나(Temporary computation), 테이블을 삭제하게 되면 Used 영역에서 사용한 공간을 삭제하고 Pool 영역으로 메모리를 반환합니다. 그리고 만약 다시 필요하게 되면 Pool 의 메모리 영역을 다시 사용(Used)하게 됩니다.

그래서 Virtual Memory는 Allocation Limit 까지 메모리를 사용할 수 있습니다.

Used memory는 실제로 HANA가 사용하고 있는 메모리 영역이라고 설명을 드렸는데요.

HANA 상에서 메모리를 사용하는 것은 실시간으로 메모리가 늘어 났다가 줄어 들었다가 하게 됩니다.

그런데 Linux의 OS상에서 메모리를 볼 때 상주메모리(Resident Memory)를 인지하고 있는데 이 메모리는 HANA 상에서는 Virtual Memory와 같습니다.

여기에서 문제점이 발생하는데요.

안녕하세요. 사이트를 방문해주셔서 감사합니다.

댓글 13개

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다