요즘처럼 가상화 시대, 클라우드 환경이 언급되는 상황에서는 “Virtual Memory”라는 용어는 색다르게 느껴질 수도 있을 듯 싶다.

고객사쪽에서 db2pd –osinfo를 통해서 보면 나오는 “Virtual Memory가 무엇이냐?”고 문의가 들어 왔었다. host DB2를 접하시는 분들에게는 특별한 기능처럼 여겨지는 듯 하다. (virtual memroy라고 별도로 설정하는게 있는?)

Linux, Unix & Windows 기반의 DB2에서는 물리적인 메모리와 디스크의 SWAP 공간을 통털어서 “Virtual Memory”라고 칭한다. 이렇게 표현된 데에는 DB2의 메모리 아키텍처에 따른 메모리 주소 관리 방식 때문이라고 할 수 있겠다.

DB2가 사용하는 메모리 주소 관리 방식은 VAS (Virtual Address Space) 이다. 즉 가상 주소 공간을 사용한다는 의미인데, 이것은 물리적인 메모리 주소와 다르게 DB2 만의 메모리 주소 체계를 가지고 메모리 자원을 사용한다고 할 수 있을 것이다.

이렇게 VAS를 사용하게 된 이유는 물리적인 주소 체계(Physical Address)를 가지게 되는 경우 실행할 때마다 다른 주소를 가지고 사용을 하게 되고, 수행 중 반납한 메모리 주소들이 발생하면서 메모리 단편화 현상이 심해질 수 있다. 따라서 보기와는 다르게 메모리가 부족해지는 문제가 생길 수 도 있고, 메모리 관련 오류 발생 시 분석이 어려울 수도 있게 되지 않을까 싶다.

이런 이유로 DB2는 시작될 때마다 “동일한 주소 체계”를 사용하기 위해서 “논리적으로 고정적인(물리적으로는 가변적인?)” 공간을 만들고 사용을 하도록 설계되었고 이런 메모리 관리 방식을 “가상 메모리”라고 표현을 한 것 같다.

DB2는 V9부터 64bit 운영체제만 지원하기 때문에 (Windows는 예외) 아래 소개하는 기술문서가 적합하지 않을 수 있으나, DB2 메모리 관리를 이해하는 데는 문제가 없을 것이라 생각한다.

 

다음은 db2pd –osinf를 통한 메모리 크기를 다음처럼 분석해 볼 수 있다. (AIX 환경)

$> db2pd –osinfo

Physical Memory and Swap (Megabytes):

TotalMem    FreeMem      AvailMem      TotalSwap       FreeSwap

15360         6359             n/a               512                 488

Virtual Memory (Megabytes):

Total          Reserved          Available      Free

15872         n/a                   n/a              6847

#> prtconf

Memory Size: 15360 MB
Good Memory Size: 15360 MB

db2pd –osinf 를 통해서 보여주는 메모리 크기는 OS 에서 인식되는 메모리 전체 크기라 할 수 있다. ( prtconf 명령어를 통한 메모리 값과 크기 동일)

"물리적 메모리”의 “TotalMem” 값과 “TotalSwap” 값의 합이 “가상 메모리”의 “Total” 값과 같음을 알 수 있고, “FreeMem” 값도 마찬가지로 같음을 알 수 있다.

 

참고 문서

http://www.ibm.com/developerworks/kr/library/dm-0406qi/index.html

http://www.kdug.kr/index.php?pgname=home/pds&brcode=pds_tech&mode=VV&wrno=1667&page&memberlogin=1

+ Recent posts