LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1204|回复: 4

我的PostgreSQL的Vacuum问题

[复制链接]
发表于 2003-8-14 14:50:23 | 显示全部楼层 |阅读模式
PostgreSQL数据库通常间隔一段时间,就要进行Vacuum的维护处理。

在我的应用中,数据表只是追加数据,一旦数据写入表中,永远不会修改。过一段时间,比如一天、一星期后,另建新表存数据。系统以追加数据为主(每秒钟从20个数据源并发写入,7x24运行),间或查询。

在这种情况下,还有必要进行Vacuum操作吗?PostgreSQL能否应付如此繁重( 640Bytes/s X 20 )的写入操作吗?
发表于 2003-8-14 14:59:37 | 显示全部楼层
postgresql应付这种是没有问题的。
官方建议您还是应该每隔一段时间要vacuum。
 楼主| 发表于 2003-8-15 07:56:00 | 显示全部楼层
谢谢黄叶斑竹。

640Bytes/s X 20说起来好像并不大,但时间长了可就大了,1小时就45M,一天下来差不多就是1G数据了。这个流量,对于查询应该没有问题,但对于写入操作,真的不能算小数了。我的应用实际是用来记录监测数据,所以要求每秒都要写数据。现在版本的PostgreSQL中,Vacuum可以在后台进行,也不要求锁定数据表,但针对我的实际情况,不知道何时进行Vacumm合适。

考虑的一个变通办法,是采用文件作缓冲,改每秒插入为每10分钟入库。查了一下PostgreSQL的手册,其中Copy语句提供如此功能。但问题是,Copy语句要求的文件名,是要求Server端的,还是Client端的也可以???最终数据录入和数据库不是在一起的,数据文件只能是本地的,莫非要先行FTP上传到Server端吗?

限于条件,我还做不了这样的测试,麻烦哪位帮忙一下。

我也查了MySQL的手册,它提供了Load Local的命令加载本地数据文件入库。
发表于 2003-8-16 09:43:42 | 显示全部楼层
如果你用这个方案,可能会令你失望的。
因为我想这样做只会降低性能。postgresql本身的系统它是提供事务的。
不用担心你的数据大。
你用文件的缓冲的办法也许对mysql是有效的(个人觉得就算在mysql中,这种方法也是不可取的),没有十分的把握自己手动来通过外挂调整性能会有很多不可预料的事情发生,执行vacuum只是优化系统的性能,调整数据,索引,因此,你只要写一个shell:象这样:su - postgres -c "/usr/local/server/pgsql/bin/vaccumdb 数据库名“, 然后就cron设定其执行的时间:例如安排在中午十二点。晚上23:00点,等。
不要担心你的数据大。最大也不会一年超过一个G。最重要的是你的系统设计合理。
但是注意要经常备份你的数据库,这个问题在UNIX中可以说是好办的事情了。UNIX中有shell,有perl都可做得很好。
 楼主| 发表于 2003-8-18 08:15:30 | 显示全部楼层
好,谢谢黄版主。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表