Postgresql 你如何找到一个程序的限制因素?

Postgresql 你如何找到一个程序的限制因素?,postgresql,benchmarking,bulkinsert,Postgresql,Benchmarking,Bulkinsert,我创建了一个程序,可以解析文件中的数据并将其导入到关系型postgresql数据库中。 这个程序已经运行了两周,看起来还剩下几天了。平均每秒约150次进口我如何才能找到限制因素并加快速度? 我的程序的CPU没有超过10%,内存没有超过7%。 Postgresql数据库CPU的内存不超过10%和25% 我猜限制因素是硬盘的写入速度,但我如何验证,如果是这样的话;改进它?(除了购买更快的硬盘) 这是“iostat-d-x”的输出: 正如您可能猜到的,数据库在sdb上 编辑:我正在解析的文件约为7GB

我创建了一个程序,可以解析文件中的数据并将其导入到关系型postgresql数据库中。 这个程序已经运行了两周,看起来还剩下几天了。平均每秒约150次进口我如何才能找到限制因素并加快速度? 我的程序的CPU没有超过10%,内存没有超过7%。 Postgresql数据库CPU的内存不超过10%和25%

我猜限制因素是硬盘的写入速度,但我如何验证,如果是这样的话;改进它?(除了购买更快的硬盘)

这是“iostat-d-x”的输出:

正如您可能猜到的,数据库在sdb上

编辑:我正在解析的文件约为7GB。 对于文件中的大部分(但不是全部)数据,我逐行查看,下面是一个示例“

  • 返回表A中partA的ID。
    • 如果ID不存在,将零件A插入表格A返回ID
  • 返回表B中partB的ID。
    • 如果ID不存在,则在返回ID的表格B中插入partB
  • 返回partA和partB的多对多关系的ID。
    • 如果关系的ID不存在,请创建它
    • 否则更新关系(使用日期id)
  • 转到下一行
  • 为了保存许多查询,我将插入的PartA和PartB项的ID保存在内存中以减少查找


    这是我的postgresql.conf文件的副本:我更改的唯一内容是默认数据目录和内存限制。

    你应该在很多很多天前终止这个过程,并不是问
    如何找到应用程序的限制因素,而是问:

    有没有更快的方法导入数据 进入pgSQL

    看一看,然后是。使用适当的工具,您正在运行的导入过程可能在数小时而不是数周内完成


    顺便说一句,无论您使用的是什么RDBMS,程序化数据插入的性能都不如RDBMS供应商提供的用于处理此类批量操作的本机工具。例如:SQL Server有bcp、DTS/SSI和其他一些用于批量数据导入/导出的选项。Oracle有自己的等。

    小心您的硬盘LED灯t、 它几乎总是开着吗?如果是的话,那就是你的瓶颈。如果它只是偶尔开着,那就不是了。简单地说:-)它几乎不停地开着,但它只是表示在硬盘上写东西,而不是写东西的速度越快越好。@lanrat先生:程序运行得越快,磁盘就是瓶颈。@Mehrdad好的,很短如果你有足够的内存,你可以把这个文件放进一个RAM磁盘。你有多少RAM?这看起来是个好主意,但问题是我正在解析的文件不是一个很好的csv或类似格式。它是它自己独特的格式,有重复的数据。还有,dat文件中的a被放入多个表中,具有多对多关系。我添加了有关我用于将数据导入问题的过程的更多信息,如果我仍然可以将copy命令与这样的方法一起使用,请告诉我。我看到了您的问题。但出于前面提到的性能原因,我建议您导入首先将数据插入数据库中的临时表中,然后从那里将数据插入适当的表中。之后,您可以/应该删除初始表。此解决方案与您制定的解决方案非常不同,不涉及单独的应用程序。您可以在pgSQL中完成所有工作。PostgreSQL 9.1将支持<代码>不记录日志创建表
    ,对于需要批量导入数据,然后处理并发送数据的人来说,这将是一个梦想成真。@Sean:很高兴知道。感谢分享。我还想知道,在这种情况下,不同的数据库引擎是否会有所帮助。例如,如果我遇到Lanrat先生的困境,我会使用SQL Server bcp或SSIS/DTS要导入数据,请使用T-SQL过程对其进行处理,然后通过SSIS或一组格式正确的文件将其导出到Postgres,以便与COPY一起使用。
    Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
    sda               0.59     3.23    0.61    1.55    23.15    38.37    28.50     0.01    5.76   1.04   0.22
    sdb               0.02   308.37   21.72  214.53   706.41  4183.68    20.70     0.56    2.38   2.24  52.89