POSTGRESQL COPY 命令原理与加速数据 导入提高速度200%以上

news2024/11/15 20:11:32

a34d1063acf9f5a10655ac85d7823598.png

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共700人左右 1 + 2)。

最近有人问,从ORACLE 迁移项目到POSTGRESQL 在之前的项目中有将表insert  into  select 的操作,对比之前的ORACLE 的操作到 PG 上,对于这个操作相对的操作的时间较长。另外询问不是有并行的方式来进行数据的导入导出的操作。

POSTGRESQL 目前常用的导入导出的数据方式是 COPY ,但基于目前的COPY 命令本身并没有并行的操作。那么我们有没有办法将数据的导入和导出的方式进行并行,并且在问这个问题的时候,她还隐喻的提出这个命令在运行的时候是否履行了事务执行方式的限定。

首先我们先熟悉copy命令本身和数据库进行交互的方式也是基于PG的通信协议,此协议基于TCP/IP的协议,同时在这套协议上是支持UNIX 套接字的方式来调用这个协议的。

Copy命令中关于事务的部分, copy in 是基于类事务的,如果你的操作中途打断,那么你的表中是不会有你导入的数据记录的, copy out 不是基于事务的所以在操作中如果你中断了,那么中断前的数据会保留在外部的文件中。

28977c8a074fac332bc78c7493ab8c66.png

所以基于导入数据是基本能保证一个完整性的部分。

在数据的导入导出中除了并行以外,实际上还有一个影响性能的部分,就是shared buffer 和 wal 日志,这两个部分也是影响POSTGRESQL 数据导入和导出的一个性能的瓶颈点。

所以PG 有了一些解决这些问题的插件,其中pg_bulkload 是一个解决数据加载速度的方式,他需要进行安装,并使用他自己的命令来进行数据的加载,通过本身的设计,跳过shared buffer 和  wal buffer 的部分。

72e73c83ad7297fe6caa4e85153a2e11.png

要详细的了解pg_bulkload 的同学可以访问,下面的网站来进行更多内容的了解。https://ossc-db.github.io/pg_bulkload/pg_bulkload.html

安装中需要有PG的变量环境,否则无法进行编译,或者你使用RPM包的方式安装也可以,具体的安装就不在多说。

pg_bulkload 安装后,还需要进行create extenison 的操作,将需要 pg_bulkload 的部分加载到对应的数据库中。

391ec958ea2ba26b81d6f347a4cac2b5.png

那么我们废话不说,看疗效,我们通过传统的 COPY 命令和 pg_bulkload 在加载数据的情况下,到底有多大的差距。

我们产生一个测试来比较 COPY 和  PG_BULKLOAD 的效果区别,我们产生一个一个亿的数据表,然后将数据导出变成 CSV 文件

截图1  下面的截图中,从CSV 文件到数据库中,我们大约使用了 7分30秒的时间

013d50adaf4777a8531fc72a2be198fb.png

901f2c827184a995b705b9f3fb92a9dc.png

整体从NMON 查看系统的状态,总体的系统都在满负荷的而工作。

更换了 pg_bulkload 后,整体的进行重复性的工作,工作中系统满负荷的工作时间不是太长,工作时间缩短到 4分钟。 

对比整体提高了接近 50%的时间。

fd2d7eee2e1f87eef272c70c01c89ba1.png

7b6a2e3c0674cdebdbc0005691316a32.png

这里找到pg_bulkload 自己的压力测试图,在这里标称的结果与上面的测试结果类似。

fa5239bb87bee9b486af419d09e2d4f4.png

下面在说说 pg_bulkload 的参数和常用的使用方式

0023204e568e4630380e5c2e2883a48f.png

这里 -i  为你数据文本文件的位置, -O是你的数据库中的表的文件  -l 为数据的日志文件  -u 为遇到重复数据对重复数据进行记录  -o   是相关的程序的选择项

pg_bulkload -i /pgdata/account.csv -O pgbench_accounts_new  -l /pgdata/output.log -P /home/postgres/error_bad.txt  -o "TYPE=CSV"  -o "DELIMITER=|" -d postgres -U postgres  -h 127.0.0.1

其中的 -o  为操作中的各种现在如 导入的数据的类型 以及 文件中的间隔符号等

实际上在上面的操作中我们并没有进行并行的开启,pg_bulkload是支持并行的,那么我们将并行打开后,再次测试相关的执行同样数据的导入的速度。在打开并行后,整体的插入速度为 1分43秒,相对于不开并行导入的速度,提高了百分之 65% 左右。

ca63eb6151bbbc90a0230334792ff67d.png

所以,pg_bulkload 的确是在导入数据提高速度方面在硬件不变的情况下,有了很大的提升。

a410641cb4ad61747f5cb46402e77bac.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/458792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue2+vue3——107+

vue2vue3——107 vue2 Vuex工作原理图【23:54】vue2 搭建Vuex环境【26:40】插入 话题npm i vue3 store / index.js修改 vue2 求和案例_vuex版【22:39】vue2 vuex开发者工具的使用【23:21】vue2 getters配置项【07:55】vue2 mapState与mapGetters【25:20】vue2 mapActions与mapM…

egg3.0连接egg-mongoose操作数据库,删除一条数据、批量删除数据

删除一条数据 定义service app\service\role.js async delItem() {const { ctx } this;let results;await ctx.model.Role.deleteOne({ name: test-S3 }).then(res > {console.log(results-del-success, res);results res?.deletedCount > 0;}).catch(err > {con…

系统分析师之软件工程(十二)

目录 一、 软件开发生命周期 1.1 开发阶段工作细分 二、软件开发模型 2.1 瀑布模型 2.2 原型模型 2.3 增量模型与螺旋模型 2.4 V模型 2.5 喷泉模型 2.6 快速应用开发模型RAD 2.7 构件主装模型 2.8 统一过程 2.9 敏捷方法 三、逆向工程 四、净室软件工程 一、 软件…

为何C语言的函数调用要用到堆栈,而汇编却不需要自定义栈

一 ≠ 汇编不需要堆栈 汇编中一般不初始化,也就是直接使用系统的堆栈而已,自己定义堆栈还是要初始化的。 之前看了很多关于uboot的分析,其中就有说要为C语言的运行,准备好堆栈。 而自己在Uboot的start.S汇编代码中&#xff0c…

crm-day04 分页查询市场活动,刷新市场活动列表

分页插件 分页这个组件前端要写也很麻烦&#xff0c;而且与业务逻辑代码无关&#xff0c;因此我们引入一个分页查询的插件。 进行jsp测试 三大步骤&#xff1a; 1、引入相关的包 2、创建容器来保存插件的运行结果 容器是<input typetext/>或者div。 3、容器加载完成后&a…

猫猫与主人

时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 对猫猫按照友善值进行排序 对主人按照期望友善值进行排序 就可以找到能收养猫猫的主人 对主人的友善值取一个max最后跟猫猫的期望友…

用大佬开发的模板做了“智慧水务”,终于可以和老板谈加薪喽!

为什么各个行业要进行数字化转型&#xff1f; 其实很好理解&#xff0c;这其中很大一部分属于传统行业&#xff0c;以往运营方式较为粗放&#xff0c;信息标准化程度偏低&#xff0c;但同时也意味着数字化的历史包袱轻&#xff0c;此时跟上潮流进行数字化转型&#xff0c;有利于…

美颜SDK的性能测试和优化方案

美颜SDK作为美颜相机、短视频等应用的核心技术之一&#xff0c;对于提升用户体验和增加应用商业价值起到了至关重要的作用。然而&#xff0c;如何对美颜SDK进行性能测试和优化&#xff0c;成为了广大应用开发者们所面临的一大难题。很多开发者也曾经向小编提起过应该如何着手优…

nodejs+python+php+springboot+vue 校园安全车辆人员出入安全管理系统

拟开发的校园安全管理系统通过测试,确保在最大负载的情况下稳定运转,各个模块工作正常,具有较高的可用性。系统整体界面简洁美观,用户使用简单,满足用户需要。在因特网发展迅猛的当今社会,校园安全管理系统必然会成为在数字信息化建设的一个重要方面。 本文阐述了开发的校园安全…

马斯克要告微软 拒绝AI训练“白嫖”数据

“现在是诉讼时间。”4月20日&#xff0c;推特被微软踢出其数字营销平台后&#xff0c;新掌门人马斯克立马发推回击称&#xff0c;微软用推特的数据做“非法训练”。这一怼&#xff0c;直接揭开了AI大模型开发商与数据源的利益之争。 此前&#xff0c;在线社区论坛Reddit与程序…

黑马redis实战篇-商铺缓存

目录 五、实战篇-商户查询缓存 5.1 什么是缓存 5.2 添加Redis缓存 1、不添加redis时&#xff0c;数据查询的作用模型&#xff1a; 2、添加redis时&#xff0c;数据查询的作用模型&#xff1a; 3、业务流程图&#xff1a;​编辑 4、代码实现 5、练习题 5.3 缓存更新策略…

【Android FrameWork (三)】- SystemServer

文章目录 知识回顾启动第一个流程initZygote的流程 前言源码分析1.system_server2.SystemServer.main3,startBootstrapServices4,startService 拓展知识LoadApkcontext 对于Android context 大家是怎么理解的&#xff1f;LocalServices.java: addServece方法中 ArrayMap和HashM…

Matlab 绘制双纵轴三纵轴图

三纵轴图 三坐标的图在前文中有所介绍&#xff1b;这次主要讲绘制双轴。 matlab 绘制三坐标&#xff08;轴&#xff09;图 绘制双纵轴图: yyaxis 简单用法 在MATLAB中&#xff0c;yyaxis可以用于绘制具有两个不同y轴的图形。以下是yyaxis的简单用法&#xff1a; 1.首先&am…

UG NX二次开发(C#)-UIStyler-找不到指定的Dlx文件的错误解决方法

1、项目场景: 在UG NX二次开发过程中,我们为了更好的操作,采用UI Styler设计了软件界面,然后按照UI Styler的编程流程成功的生成了dll,但是在采用Ctrl+U或者用“文件“->“执行”->"NX Open"执行dll时,遇到如下图所示的错误页面,提示内容为:找不到指定…

成就更强大的自己

每一次低谷&#xff0c;都会酝酿向上的力量。 每一次痛苦过后&#xff0c;都会洗涤掉心理深处的灰尘。 人生的路上&#xff0c;坎坷前行&#xff0c;只有保持积极向上的态度&#xff0c;才能把坎坷化为坦途。 走过一段路后&#xff0c;才发现&#xff0c;当内心强大、修养、爱…

Android之 颜色选择器

一&#xff0c;简介 1.1 计算机的颜色通常有两种表示方式&#xff1a; 光源模式RGB(Red红, Green绿, Blue蓝)&#xff0c;数值0-255 印刷模式CMYK(Cyan青, Magenta品红, Yellow黄, Black黑)&#xff0c;数值1-100 任何颜色都是由RGB或CMYK混合出来的&#xff0c;再加上透明度…

2023年产业基金研究报告

第一章 行业概况 1.1 概述 产业基金&#xff0c;又称为产业投资基金&#xff0c;是一种由政府、企业、金融机构等出资设立的&#xff0c;专门用于支持和促进特定产业发展的投资基金。产业基金通常以股权投资和长期投资为主&#xff0c;旨在推动产业结构升级、促进科技创新、提…

算法刷题|139.单词拆分、多重背包

单词拆分 题目&#xff1a;给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 思路&#xff1a;字符串s就是我们的背包…

【移动端网页布局】流式布局案例 ① ( 视口标签设置 | CSS 样式文件设置 | 布局宽度设置 | 设置最大宽度 | 设置最小宽度 )

文章目录 一、视口标签设置二、CSS 样式文件设置三、布局宽度设置1、设置布局宽度2、设置布局最大宽度3、设置布局最小宽度4、查看网页最大最小宽度5、布局宽度设置 四、代码示例1、主界面标签2、CSS 布局设置 一、视口标签设置 参考 【移动端网页布局】移动端网页布局基础概念…

打造卓越游戏 | 2023 Google 游戏开发者峰会

一款游戏从初始构想的开发到辉煌赛季的策划&#xff0c;开发者们每时每刻都在倾注心血潜心钻研&#xff0c;Google 也致力于在整个开发和发布生命周期中为您提供帮助。我们很高兴能在今年如约而至的 Google 游戏开发者峰会中与您分享诸多更新&#xff0c;展示我们为助力您打造精…