软件开发数据库

pg数据库?

有没有熟悉pg的啊,把一张表的数据写到另一张表,数据量差不多85亿,写起来非常慢,用的insert into select,这个正常么

参与3

1同行回答

austindatabaseaustindatabase数据库架构师互联网金融
首先这样的做法非常的有问题,没有这样干的,耦合的进行数据的操作,我也是第一次见到这么粗糙的思路。1  数据进行拆分,数据需要进行导出,通过PG 的COPY 命令将数据,分割成多个文件进行导出,可以压缩也可以不压缩,此时导出操作与数据库的操作不冲突,数据不会被影响正常的操作,同...显示全部

首先这样的做法非常的有问题,没有这样干的,耦合的进行数据的操作,我也是第一次见到这么粗糙的思路。

1  数据进行拆分,数据需要进行导出,通过PG 的COPY 命令将数据,分割成多个文件进行导出,可以压缩也可以不压缩,此时导出操作与数据库的操作不冲突,数据不会被影响正常的操作,同时单向的操作速度还是有保证的

2  数据的写入,实际上数据的写入最大的问题WAL ,看这个问题的提出者,基本对数据库的原理和PG 属于没有知识的水平,如果要数据插入最大化,则建立no logger 表 数据的插入将以最快的速度进行插入,或者使用 COPY TO 命令将数据导入到数据库中,但是此时还是产生WAL,那么可以将参数进行调整,通过安装时对于WAL的SIZE 优化 ,将一些导入数据时可能的卡顿的情况,缓解或消除。

所以一个问题可以看出,提问者对于数据库的  一穷二白。

收起
互联网服务 · 2023-12-22
浏览285

ChatGPT 回答

在处理大数据量时,使用INSERT INTO SELECT语句会导致性能问题,因为它会锁定整个表并逐行插入数据。对于85亿条数据的表,这种方法可能会非常慢。

为了提高性能,可以考虑使用以下方法:

  1. 使用COPY命令将数据从源表复制到目标表。COPY命令比INSERT INTO SELECT更快,因为它可以使用二进制格式将数据直接写入目标表,而不需要逐行插入。
  2. 如果无法使用COPY命令,可以考虑使用pg_dumppg_restore工具。pg_dump将源表导出为一个文件,然后使用pg_restore将数据导入到目标表中。这种方法可以更快地将数据移动到目标表中,因为它可以使用多个并行进程。
  3. 如果需要实时将数据从源表复制到目标表,可以考虑使用pglogicalBDR扩展。这些扩展可以在多个PostgreSQL服务器之间复制数据,并且可以在不停机的情况下添加或删除节点。

总之,INSERT INTO SELECT语句在处理大数据量时可能会导致性能问题。为了提高性能,可以考虑使用COPY命令、pg_dumppg_restore工具,或者使用pglogicalBDR扩展。

提问者

jxthxy19901204
研发工程师北京融嘉合创信息科技有限公司
擅长领域: 网络大数据数据库

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2023-12-19
  • 关注会员:2 人
  • 问题浏览:772
  • 最近回答:2023-12-22
  • X社区推广