Abstract:
This article shows how to speed up a PostgreSQL database server using a RAMDISK.
들어가는 글
먼저 RAMDISK가 무엇인지 그리고 어떻게 해서 PostgreSQL과 같은 데이터베이스 서버의 속도를 올리기 위해 사용할 수 있는지 살펴보자.
Ramdisk는 기본적으로 여러분의 메모리를 하드디스크 드라이브처럼 사용하는 것이다. 여러분이 ramdisk를 사용한다고 하면 하드 드라이브를 사용하는 것이 아니라 메모리를 사용하는 것이라는 얘기다. 여기에는 장단점이 함께 있다. 가장 큰 장점은 메모리를 사용하는 것이기때문에 여러분이 수행하고자 하는 작업을 하드디스크에서 사용할 때보다 매우 빠르게 수행 할 수 있다. 가장 큰 단점은 여러분의 데이터베이스에 변경사항이 발생했을때 컴퓨터가 재부팅된다면 이 변경사항을 모두 잃어버리게 된다. 이점은 데이터베이스의 무결성에 치명적인 단점으로 작용한다.
그렇지만 만약 PostgreSQL서버에서 모든 데이터베이스를 메모리에 읽어수행한다면 속도는 매우 빨라 질 것이다.
/Test디렉토리에 ramdisk의 설정
여러분의 기본 ramdisk를 /Test 디렉토리에 설정하고자 한다면 다음과 같이 한다.
mkdir -p /Test
mkfs -t ext2 /dev/ram0
mount /dev/ram0 /Test
만약 초기설정값이 50메가의 크기를 변경하고자 할때는 다음과 같이 한다.
먼저 변경할 ramdisk의 크기를 결정해야 하는데 여기서는 50메가로 생각을 하자.
/etc/lilo.conf파일을 수정한 다음 "lilo"명령을 반드시 실행한다. Lilo는 여러분의 컴퓨터에게 켜지기 시작할 때 어떻게 부팅과정을 수행할 것인지를 이야기해줄 뿐만 아니라 리눅스시스템에대하여 변경된 사항을 리눅스가 시작될 때 알려주는 프로그램이다. 나는 이 파일에 "ramdisk=50000"를 추가했다.
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz-2.2.5-15
label=linux
root=/dev/hda2
read-only
ramdisk=50000
이제 "lilo"명령을 수행한 다음 재부팅하면 된다. 컴퓨터가 재부팅된 다음 여러분은 다음 세줄의 명령어를 입력해야 한다.
mkdir -p /Test
mkfs -t ext2 /dev/ram0
mount /dev/ram0 /Test
매번 켤때마다 이 명령어를 입력하기 싫다면 /etc/rc.d/rc.local에 이 명령을 추가해도 된다.
PostgreSQL를 고려한 ramdisk의 설정
이론적으로 여러분은 두개의 데이터베이스 서버를 가지게 된다. 하나는 사용자가 변경할 수 있는 서버이고, 하나는 바로 ramdisk에 있는 서버이다. 이렇게 하기 위해서 "pg_dump"나 "pg_dumpall"명령을 이용해야 한다.
주석: 이 글에서는 이미 여러분의 데이터베이스 서버의 크기보다 훨씬 더 큰 크기를 가진 ramdisk가 이미 lilo.conf에 설정되어 있는 것으로 가정하고 이야기를 한다. 만약 어느정도 크기면 될지 알고 싶다면 "cd /var/lib/pgsql; du "명령을 이용하면 된다.
어쨌든 현재 "/var/lib/pgsql"에 설치되어 있는 postgresql서버를 메모리로 올리기 위해서는 다음과 같이 한다.
### 현재 postgresql서버를 중지시킨다.
/etc/rc.d/init.d/postgres stop
### 현재 디렉토리의 이름을 바꾼다.
mv /var/lib/pgsql /var/lib/pgsql_main
#### ramdisk에 디렉토리를 생성한다.
mkdir -p /var/lib/pgsql_memory
#### 새로 만들어진 디렉토리의 소유자를 postgres나
#### 실제 디렉토리 소유아이디로 변경한다.
chown postgres /var/lib/pgsql_memory
#### 앨리어스를 만들거나 원래 이름(/var/lib/pgsql)과 연결시킨다.
ln -s /var/lib/pgsql_memory /var/lib/pgsql
#### ramdisk를 포맷한다.
mkfs -t ext2 /dev/ram0
#### ramdisk를 postgresql디렉토리에 마운트 시킨다.
mount /dev/ram0 /var/lib/pgsql_memory
#### postgres의 디렉토리에 있는 모든 것을 ramdisk로 복사한다.
tar -C /var/lib/pgsql_main -cp . | tar -C /var/lib/pgsql_memory -xp
### postgresql서버를 가동시킨다.
/etc/rc.d/init.d/postgres start
속도에 대하여 몇마디만 더....
ramdisk에 postgresql을 올렸을 때와 안올렸을때의 속도차이를 검사해본 적이 있다. 어느때는 ramdisk에서 postgresql이 실행되고 있을때가 약 50%정도 속도가 빠른 경우도 있었지만 아닌 경우도 있었다.
그때 깨달은 사실은 데이터가 시스템에 의해 캐쉬되어져 성능값이 10%에서 20%정도로 밖에 향상되지 않았다는 것이다. 만약 하나씩만 존재하는 많은 량의 데이터들이 데이터베이스로 입력이 되면 그 성능은 극적으로 향상되게 된다.
ramdisk기법을 사용할 때 얻을 수 있는 가장 큰 장점은 데이터베이스가 하드드라이브에 접근하지 않고 바로 메모리에서 이용할 수 있다는 점이다. 만약 ramdisk를 사용하지 않는다면 데이터베이스는 아마 종종 캐쉬부족으로 스와핑작업을 수행하여 하드디스크로부터 새로 값을 불러 올 것이다.
사족
리눅스운영체제에서 분명히 한번 파일이 읽어지면 메모리 공간이 다른 무엇인가에 의해 사용되기 전까지는 메모리상에 존재한다.바로 캐쉬가 되는 것이다. 이것은 하나의 해결방법이 될 수 있다. 그러나 실제 데이터베이스의 경우 필자의 데이터베이스서버에 한번 명령을 내릴때마다 하드가 계속 돌아가게 된다. ramdisk를 사용하면 데이터베이스를 메모리상에서 동작할 수 있도록 하기 때문에 스와핑 작업을 하지 않아도 된다. 만약 데이터베이스를 많이 사용한다면 메모리상에 올려놓고 작업하기를 바란다.
ramdisk를 사용할 때 장점은 데이터베이스의 속도가 빠르고 산뜻하면서 단순하다는 점이다. 만약 읽기 전용의 데이터베이스 서버라면 이것은 정말 확실하고 산뜻한 해결방법이 될 것이다.
ramdisk를 이용할 때 단점은 여러분이 관리하기 위하여 조금 더 공부를 해야 한다는 점이고 만약 데이터베이스에 변화가 생겼다면 반드시 백업을 수행해야 한다는 점이다.
참고
How to use a Ramdisk for Linux /글쓴이: Mark Nielsen
PostgreSQL홈페이지
--------------------------------------------------------------------------------
원본출처 : http://www.linuxfocus.org/Korean/November1999/article125.html
|