Sep 132012
 
This entry is part 11 of 19 in the series Matlab数据库基础班

今晚继续跑哥的数据库程序。虽然已经优化过多次,但是对于它的速度还是没法忍。用Matlab的profile查看,发现 其他部分都已经优化得差不多了,只是update数据的部分占用时间太长。而这个部分又不是Matlab代码优化能够解决的问题。再对战硬盘一看,凡是update的时候,硬盘灯都闪个不停,因此可以得到结论,占用时间主要是JVM和数据库通信占用的问题。

当前电脑用的硬盘是2.5寸的普通笔记本硬盘,而且还是那种转速较慢的,所以读写硬盘速度必然不快——特别是update用到最多的磁盘随机读写更是慢。因此,我想到的解决办法就是通过修改Postgres参数,用空间(内存)换取时间(磁盘读写)。

参考网络上的一篇博客文章:Increase PostgreSQL write speed at the cost of likely data loss 我当前的PG数据库设置文件(postgresql.conf)修改了如下参数:

synchronous_commit = off  ,关闭了同比提交功能,写的时候就不必等待一条数据写完才能再写下一条数据。
wal_writer_delay = 10000ms  , 每10秒钟才写一次log。
wal_buffers = 16MB  , log的缓存容量调大到16MB
checkpoint_segments=72

此前 shared-buffers 早就调到512MB了。这样做的后果就是很多本来实时写入硬盘的数据全部都写在内存中。万一断电了,或者系统崩溃了,那么内存中所有数据都将消失。

不过,由于我这个数据库的原始数据都来自xls文件,所以就算是丢失了数据也没有太大的关系。

性能提升多大呢?在修改前 update 2760 个记录消耗1分钟38秒,修改之后,消耗1分钟10秒,提升 30% 。 最关键的是现在硬盘灯不再闪个不停,这样硬盘就能更耐用啦!

 

No related posts.

Series Navigation<< PG数据库的一点备忘(同步、备份与优化)PostgreSQL中的“行太大”错误 >>
Bookmark/FavoritesSina WeiboGoogle+FacebookQQTwitterYahoo BookmarksBaiduDiggEmailGoogle GmailOutlook.comEvernotePrintAIMLinkedInBlogger PostKindle ItOrkutShare

Related Posts:
  • No Related Posts, :-(

 Leave a Reply

(required)

(required)


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Switch to our mobile site