当前位置: 首页 > 知识库问答 >
问题:

对PostgreSQL数据库中同一个表的同时写入速度较慢

壤驷阳冰
2023-03-14

我怀疑这个问题可能更适合数据库管理员网站,所以LMK如果它是,我会移动它。:)

我是一个数据库/博士后的初学者,所以帮帮我吧。我有一个系统,可以并行处理10件事情,并将这些事情的输出写入同一Postgres数据库中的同一个表。书写发生得很好,但却需要很长时间。我的日志文件显示,我将得到其中30000个的结果,但数据库中只反映了其中7000个。

我怀疑Postgres出于某种原因正在排队等待写入,我猜这是因为该表有一个自动递增的主键。如果我试图同时将10条记录写入同一个表,我会假设它们必须排队,否则主键将如何设置?

我有这个权利吗,还是我的数据库配置严重错误?我的系统管理员通常不处理数据库,所以如果您有任何调整建议,即使是基本的东西,我也很乐意听到。:)

共有1个答案

太叔望
2023-03-14

我怀疑Postgres出于某种原因正在排队等待写入,我猜这是因为该表有一个自动递增的主键。如果我试图同时将10条记录写入同一个表,我会假设它们必须排队,否则主键将如何设置?

不,不是这样。

如果您阅读了有关序列的文档,您会发现它们不受事务可见性的影响,并且正是出于这个原因而回滚。使用nextval生成的ID不会在回滚时重复使用。

我有这个权利吗,还是我的数据库配置严重错误?我的系统管理员通常不处理数据库,所以如果您有任何调整建议,即使是基本的东西,我也很乐意听到。:)

更有可能的是,您在一个速度非常慢的系统上进行单独的提交,每次插入一次,就像单个磁硬盘一样。您还可能会检查点间隔太低(如果是这样,请参阅PostgreSQL日志,其中会出现关于此的警告),可能会有过多的索引导致减速,等等。

您应该查看PostgreSQL日志。

另外,请看我写的关于提高插入性能主题的引物。

 类似资料:
  • 问题内容: 我需要比较2个不同数据库中的数据库表,以了解差异所在,是否有一个简单的工具或脚本来实现? 问题答案: redgate SQL数据比较

  • 问题内容: 我编写了一个函数,如下所示: 但是,由于每当用户从iOS应用程序插入数据时,都会在API调用中使用此函数,因此我希望删除表中早于1小时的数据,然后再向其中插入新数据,因为iOS应用程序不会考虑超过一个小时的帐户数据。在同一个函数中插入新数据之前,如何编写代码删除旧数据? 问题答案: 添加此:

  • 流程开始如下: 组件1发送请求 API对其进行处理,如果一切正确,则写入组件2 dB 各种数据处理... 组件2发送请求 API对其进行处理,如果一切正确,则写入组件1 dB 我怎么做这件Spring靴呢?我不需要任何域类,因此我认为我不需要使用JPA。

  • 我有多个线程在我的中运行每个线程读取一个大文件并在List中返回该文件中的数据。 代码如下所示: 现在我知道以下代码段将出现在我的代码中的某个位置,但我不知道将其放置在哪里。因为如果我在for循环中的之后放置它,它就不会添加它,因为每个文件都非常大,可能还没有完成它的处理。 那么,有谁能告诉我,我应该把这段代码放在哪里,以及我需要确保哪些其他事情,以避免出现关键部分问题。 如果我只是在线程中并行读

  • 我是PostgreSQL的新手,我面临着一个关于表函数性能的问题。我需要做的是相当于MSSQL中的存储过程。经过一些研究,我发现一个表函数是可行的,所以我举了一个例子,用plpgsql创建了我的函数。 通过比较执行时间,使用函数比直接调用查询慢2倍(查询在函数中完全相同)。 经过一点挖掘,我发现在函数中使用SQL语言可以大大提高执行时间(与调用查询的时间完全相同)。读了这篇文章后,我了解到plpg

  • 本文向大家介绍yii2.0数据库迁移教程【多个数据库同时同步数据】,包括了yii2.0数据库迁移教程【多个数据库同时同步数据】的使用技巧和注意事项,需要的朋友参考一下 本文讲述了yii2.0数据库迁移的方法。分享给大家供大家参考,具体如下: 创建迁移 使用如下命令来创建一个新的迁移: 必填参数 name 的作用是对新的迁移做一个简要的描述。例如,如果这个迁移是用来往多个数据库同一张表  ( 假设每