database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Columns 4228 게시물 읽기
No. 4228
리눅스에서 소형데이터베스의 속도 올리기
작성자
정재익(advance)
작성일
2002-06-14 05:23
조회수
14,374

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

[Top]
No.
제목
작성자
작성일
조회
4341Why You Need Database Normalization
정재익
2002-09-13
13773
4297PostgreSQL: Taking E-Business Up a Notch
정재익
2002-08-14
23273
4270Partial Indexes
정재익
2002-07-26
10598
4228리눅스에서 소형데이터베스의 속도 올리기
정재익
2002-06-14
14374
3800Bruce Momjian on PostgreSQL, Great Bridge, the Future and the Past
정재익
2001-12-27
14238
3781PostgreSQL: Taking E-Business Up a Notch
정재익
2001-12-25
9560
3780The History of PostgreSQL Development
정재익
2001-12-25
8503
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다