数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

如何通过RamDisk的方法加速小型数据库的访问速度


发布日期:2023年05月24日
 
如何通过RamDisk的方法加速小型数据库的访问速度

RamDisk简介

本文首先介绍了如何在rh系统上创建一个RamDisk然后介绍了如何通过将数据库内容存放到RamDisk中的方法来加速对数据库的访问

什么是RamDisk?一个RamDisk是分配作为一个分区的内存块或者说将内存模拟为硬盘空间从而可以想对待硬盘空间一样在其上保存文件为什么会要使用RamDisk呢?主要是为了提高速度若事先知道特定的文件将被高频率访问通过将文件存放在内存里就可以提高性能例如web服务器就可以采用这种方式来加快访问速度下面是一些可能会对加深对RamDisk的理解的资源链接

/usr/src/linux/Documentation/RamDisktxt

如何使用RamDisk

使用RamDisk是非常简单的首先RH的缺省安装本身就有对RamDisk的支持你所要作的就是格式化一个RamDisk然后加载(mount)其到目录结构下即可通过命令ls al /dev/ram*可以查看系统可以利用的RamDisk的数目这些RamDisk并不起作用除非设置以后下面是一个非常简单的使用RamDisk的例子

# create a mount point:

mkdir /tmp/RamDisk

# create a filesystem:

mkefs /dev/ram

# mount the RamDisk:

mount /dev/ram /tmp/RamDisk

这三个命令分别为RamDisk创建一个目录格式化它(创建文件系统)最后加载该文件系统到/tmp/RamDisk下面就可以对待该目录为一个分区使用若格式化失败则说明你的系统内核没有对RamDisk的支持则需要重新编译内核RamDisk支持的内核开关是CONFIG_BLK_DEV_RAM

缺省的RamDisk的大小为 Mb=在创建randisk文件系统时可以得到RamDisk大小的信息

mkefs Jan for EXT FS b //

Linux ext filesystem format

Filesystem label=

inodes blocks

blocks (%) reserved for the super user

First data block=

Block size= (log=)

Fragment size= (log=)

block group

blocks per group fragments per group

inodes per group

运行命令df k /dev/ram可以查看可以真正使用的RamDisk的空间大小(因为创建文件系统时会占用一些空间)

>df k /dev/ram

Filesystem kblocks Used Available Use% Mounted on

/dev/ram % /tmp/RamDisk

需要注意的是当你的系统重新启动以后RamDisk中的数据会丢失所以如果RamDisk中的数据被修改了必须将其备份到别的目录下

改变RamDisk的大小

为了使用RamDisk可以通过将对RamDisk的支持编译进入内核中或者编译为模块的方式在需要时将其加载编译为模块的方式可以在加载模块时动态决定RamDisk的大小

当RamDisk被编译进入内核改变RamDisk的大小的方法为在nf中田加内容 RamDisk_size= (or RamDisk= for old kernels)然后运行lilo命令重新启动机器这样下次加载RamDisk以后大小就变为M

boot=/dev/hda

map=/boot/map

install=/boot/bootb

prompt

timeout=

image=/boot/vmlinuz

label=linux

root=/dev/hda

readonly

RamDisk_size=

当编译RamDisk支持为模块形式可以在加载时决定RamDisk的大小可以通过杂/etc/confmodule中添

options rd rd_size=

或者在动态加载是通过命令行的形式传入

insmod rd rd_size=

下面是关于如何使用模块的一个例子

卸载前面加载的文件系统umount /tmp/RamDisk

卸载模块rmmod rd

加载RamDisk模块并设置大小为Minsmod rd rd_size=

创建一个文件系统mkefs /dev/ram

加载RamDisk的文件系统mount /dev/ram /tmp/RamDisk

在web服务器中使用RamDisk的例子

这里举一个在web服务器中使用三个RamDisk的例子这里要确保web服务器的所有内容不超过M(包括CGI的内容)

首先对web服务器的root目录下的内容备份到其他地方然后重新创建www的根目录

mv /home/httpd/ /home/httpd_real

mkdir /home/httpd

mkdir /home/httpd/cgibin

mkdir /home/httpd/html

mkdir /home/httpd/icons

然后在/etc/rcd/initd/中添加如下启动执行信息

### Make the RamDisk partitions

/sbin/mkfs t ext /dev/ram

/sbin/mkfs t ext /dev/ram

/sbin/mkfs t ext /dev/ram

### Mount the RamDisks to their appropriate places

mount /dev/ram /home/httpd/cgibin

mount /dev/ram /home/httpd/icons

mount /dev/ram /home/httpd/html

### Copying real directory to RamDisks (the

### data on the RamDisks is lost after a reboot)

tar C /home/| tar C /home/httpd x

### After this you can start the webserver

切记若RamDisk中的数据被修改并且做的修改都是有意义的则需要对RamDisk中的数据做备份

你可以启动一个cron任务来完成这个工作每10分钟检查一次看是否有数据被修改若有则对数据进行备份

RamDisk的一个应用是使用/tmp做为RamDisk若系统中有很多程序使用RamDisk则可以很明显地加快系统速度而且每次系统重新启动这些暂时数据都会丢失

通过RamDisk加速小型数据库的访问速度

如果将将PostgreSQL数据库服务器文件加载到内存中就可以加快数据库访问速度

在/test目录下加载RamDisk

在/test目录下设置RamDisk

mkdir p /Test

mkfs t ext /dev/ram

mount /dev/ram /Test

这时候你将拥有一个4M大小的RamDisk根据需要你可以更改你的RamDisk的大小

为PostgreSQL设置RamDisk

理想状态下你将拥有两个数据库服务器一个是可以进行修改的另外一个是存放在RamDisk中的拷贝为了达到这个目的需要使用命令 pg_dumppg_dumpall

这里假设已经在nf中设置RamDisk的大小使其大于数据库服务器的大小如果你希望了解合适的大小可以使用命令cd /var/lib/pgsql; du

然后

### Stop the current postgresql server

/etc/rcd/initd/postgres stop

### rename the current directory

mv /var/lib/pgsql /var/lib/pgsql_main

#### Create a directory to have our RamDisk on

mkdir p /var/lib/pgsql_memory

#### change the ownership of the new directory to postgres or whatever

#### the actual owner is

chown postgres /var/lib/pgsql_memory

#### Make an alias or link to the original name /var/lib/pgsql

ln s /var/lib/pgsql_memory /var/lib/pgsql

#### Format the RamDisk

mkfs t ext /dev/ram

#### Mount the RamDisk to the postgresql directory

mount /dev/ram /var/lib/pgsql_memory

#### Copy everything from the main directory into the RamDisk

tar C /var/lib/pgsql_main cp | tar C /var/lib/pgsql_memory xp

### Start the current postgresql server

/etc/rcd/initd/postgres start

经过测试发现在RamDisk中的PostgreSQL的性能提升最高达到%左右需要的时候可以将其他的应用放置在RamDisk中以提升效率如ldap服务器等

上一篇:无备份丢失部分数据文件和控制文件恢复

下一篇:Oracle大数据量查询实际分析