背景
最近在做数仓重构项目,遇到一些性能瓶颈,这里记录一下解决办法。

随着业务数据每天都在增加,几年前开发的etl任务开始跑不动了。大表一般是通过增量的方式插入,但是修复bug 或者每月/季度跑一次的情况 需要跑全量,原来的etl任务可能需要跑几个小时,甚至出现超时失败的情况。因此需要优化,下面介绍一些优化方法。(项目是用kettle做的,如果使用其他开发工具,也可以参考下面的思路)

1、配置数据库连接参数
2、去掉临时表 DDL的primary key
3、调整输出组件的数量
4、暂时关闭索引

优化方法

1、配置数据库连接参数
defaultFetchSize:5000
useCursorFetch : true 相当于告诉数据库,分批读取数据,每次打包5000条回来
rewriteBatchedStatements : true 插入数据的时候,批量插入
useServerPrepStmts : true 启动预编译
useCompression : true 客户端跟服务器之间的数据压缩传输

以kettle为例,配置方法如下:

测试结果:
配置参数前:
配置参数后:

性能提升了80倍!

2、去掉DDL中的 primary key
在 etl 的过程中会用中间表来存放一些临时数据,这些中间表可以去掉 ddl中的 primary key,通过逻辑来保证唯一性,只在结果表中使用primary key。primary key会检查相关字段是否重复,从而降低插入速度。(下面的案例 读写字段多,且表输入sql很复杂,所以插入很慢)

测试结果如下:

去掉目标表primary key 后

性能提升了20倍!

3、调整 输出组件数量
如果输出组件还是慢,可以复制多个输出。具体操作:输出组件 右键-改变开始复制的数量

4、暂时关闭索引
维护索引数据需要大量额外的开销,因此全量数据插入前,可以先关掉索引,插入完毕再打开索引。
ALTER TABLE table_name DISABLE KEYS;
ALTER TABLE table_name ENABLE KEYS;
效果对比如下:


性能提高了4倍!

mysql 批量数据插入很慢(kettle 输入输出组件) 性能优化办法相关推荐

  1. excel 复制数据 sql server 粘贴_一个Excel妙招,一个SQL技巧,解决批量数据插入问题

    #Excel技巧# #数据库# #MySQL# 业务背景 不知道您在工作中有没有遇到过这样几种情况: 业务定期给你一批数据结构相同的名单或者数据,要求你插入到库里并进行处理. 机器学习指标加工时,一个 ...

  2. mysql my.ini位置错误_解决mysql导入数据量很大导致失败及查找my.ini 位置(my.ini)在哪...

    数据库数据量很大的数据库导入到本地时,会等很久,然而等很久之后还是显示失败: 这是就要看看自己本地的没mysql是否设置了超时等待,如果报相关time_out这些,可以把mysql.ini尾部添加ma ...

  3. c mysql 插入大量数据_C++操作MySQL大量数据插入效率低下的解决方法

    通常来说C++操作MySQL的时候,往Mysql中插入10000条简单数据,速度非常缓慢,居然要5分钟左右, 而打开事务的话,一秒不到就搞定了! 具体实现代码如下: #include #include ...

  4. Mysql字符集数据插入问题(Incorrect string value ‘xE2x80xA2xE6xBCxAB...‘ for column ‘rname‘ at row 1)

    Mysql字符集数据插入问题(Incorrect string value: '\xE2\x80\xA2\xE6\xBC\xAB-' for column 'rname' at row 1) 一.问题 ...

  5. django框架——sweetalert前端插件、序列化组件、批量数据操作、分页器、Forms组件(上)

    系列文章目录 第一章 django安装与介绍 第二章 django基础使用 第三章 路由层 第四章 虚拟环境.django版本区别.视图层 第五章 模板层 第六章 模型层(上) 第七章 模型层(下) ...

  6. Kettle使用_24 Kettle输入输出组件汇总

    Kettle使用_24 kettle输入输出组件汇总 需求:通过Kettle实现文本文件.固定宽度文件输入.表输入.XML数据输入.JSON数据输入.表输入等输入和相应的输出. 解决方法:通过文本文件 ...

  7. MySQL高性能实战——part3——分析SQL,定位慢SQL(性能优化的前提)

    前言: 此文借鉴<MySQL高性能>一书,还有MySQL官方文档,笔者将通过自身的一些实战经验和阅读习惯对本书进行一个总结,整理,归纳出企业级开发中常用的优化案列和部分概念!! ​ 官方文 ...

  8. 干货 | 数据思维在携程商旅页面性能优化中的一次实践

    作者简介 Graviton,携程研发总监,专注数据思维驱动团队效能与技术发展. 本文旨在通过一个实际的例子,说明如何通过数据思维来解决研发工作中的一些棘手问题.通过此文,希望能够清楚地阐述我对下面几个 ...

  9. mysql大量数据插入探讨(量变引起质变)

    2019独角兽企业重金招聘Python工程师标准>>> 分类:见Visio图 关于大量数据导入是应注意以下几点: 分批导入,导入一批后最后提交(commit),可以使用jdbc的(e ...

最新文章

  1. 数据智能与计算机图形学领域推荐论文列表
  2. 循环控制结构程序05 - 零基础入门学习C语言20
  3. oracle 视图使用rownum,Oracle数据对象--视图
  4. Secure保存串口数据到本地
  5. android开发微博搜索,一款帮助用户自动提取微博热搜、知乎热榜、百度实时热点条目中与特定领域...
  6. 快成物流科技 x mPaaS | 小程序容器加持下的技术架构“提质增效”
  7. java服务熔断_springcloud-Hystrix-服务降级、服务熔断、服务限流
  8. 23种设计模式之访问者模式
  9. gradle 查看依赖类库版本_Android studio中查看依赖的第三方库的历史版本和最新版本...
  10. 微型计算机原理偏移地址,微机原理试卷答案(B)
  11. Python Frozenset()
  12. 【滤波器】基于matlab GUI分数延迟滤波器设计【含Matlab源码 1347期】
  13. QCC3003项目实战:BlueMotor6 AGHFP CVC 蓝牙对讲耳机
  14. 小强统一认证中心开源介绍
  15. 研究揭示人类大脑进化的基因组调控机制
  16. 高数定理、法则(持续添加)
  17. Windows10系统登陆界面“出现问题,PIN不可用”-解决方法
  18. 毕业设计:电子/通信/物联网/计算机专业选题目参考(嵌入式linux/单片机STM32/web/图像)
  19. BUUCTF [SWPU2019]EasiestRe
  20. ogg如何转换成mp3格式?

热门文章

  1. HTML+CSS+JS网页设计期末课程大作业 web前端开发技术 web课程设计 后台管理系统。
  2. ubuntu 装在ssd_如何在Ubuntu中调整SSD以提高性能
  3. InnoDB存储引擎--InnoDB存储引擎
  4. CSS超基础,快速入门
  5. Eclipse中文语言包安装和设置中文
  6. matlab对非平稳一维信号的小波变换
  7. mysql多条新增字段sql合并为一条新增
  8. 表格找不到任何要替换的数据,不能替换受保护的工作表中的数据。
  9. Redis内存分析工具之redis-rdb-tools的安装与使用
  10. [翻译]CryEngine3中裁剪剔除解释