Postgresql优化

我正在运行一个或多个慢慢运行的Postgresql安装。

我使用Perlparsing了大量日志文件,并使用Perl的DBI接口(通过IP地址127.0.0.1连接到数据库)将数据添加到数据库。 我的数据库有大约4个表格。 我的脚本基本上检查是否规范化的数据已经存在。 如果数据不存在,则将其添加到数据库中。 否则,它将提取用于更新其他表的键。

我使用2GB内存或多或less的台式机硬件运行,但是我并没有预料到它会在5天内增加1,200万行。

PS。 我确实将shared_buffers的大小增加到了我的RAM的25%,但是这并没有太大区别。

任何提示将不胜感激。

编辑:我正在运行的Ubuntu Linux

我已经编写了脚本来完成你正在做的事情(从Squidcachingparsing日志文件,这是主要原因)。 您正在运行的查询可能相当基本,假设您没有代理主键,则应使用主键上的隐含索引。 尽pipe如此,你总是可以“查询分析”你的查询,以确保它看起来像是在做你期望的。

基本的性能分析是你的首要任务。 你没有提到你正在运行的操作系统,所以我不能给你任何指示,但你应该使用底层的OS性能监视function来确定你瓶颈(CPU,I / O,内存分页等)。 即使简单的工具,如“顶”和“任务pipe理器”可以很快给你一些想法。

分析您的脚本是下一站。 弄清楚脚本花费大部分时间在哪里并优化这些部分。

假设脚本在运行时脚本从数据库中检索到的值不会改变,可能需要考虑在执行过程中检索caching的数据。 例如,使用代理主键,您可以在脚本执行期间将自然键caching到关联数组中的代理键映射,并为相同的值保存重复的数据库查询。 我发现这是典型的Big Win TM