kettle⼤数据量读写mysql性能优化
修改kettleDB连接设置
1. 增加批量写的速度:
useServerPrepStmts=false
rewriteBatchedStatements=true
useCompression=true
2. 增加读的速度:
useServerPrepStmts=true
cachePrepStmts=true
参数说明:
1)useCompression=true,压缩数据传输,优化客户端和MySQL服务器之间的通信性能。
2)rewriteBatchedStatements=true  ,开启批量写功能
将会使⼤批量单条插⼊语句:
INSERT INTO t (c1,c2) VALUES ('One',1);
INSERT INTO t (c1,c2) VALUES ('Two',2);
INSERT INTO t (c1,c2) VALUES ('Three',3);
改写成真正的批量插⼊语句:
INSERT INTO t (c1,c2) VALUES ('One',1),('Two',2),('Three',3);
3)useServerPrepStmts=false  关闭服务器端编译,sql语句在客户端编译好再发送给服务器端,发送语句如上。
如果为true,sql会采⽤占位符⽅式发送到服务器端,在服务器端再组装sql语句。
占位符⽅式:INSERT INTO t (c1,c2) VALUES (?,?),(?,?),(?,?);
此⽅式就会产⽣⼀个问题,当列数*提交记录数>65535
时就会报错:Prepared statement contains too many placeholders,
这是由于我把“提交记录数量”设为10000,⽽要插⼊记录的表字段有30个,所以要进⾏批量插⼊时需要30*10000=300000  > 65535 ,故⽽报错。
解决⽅案:
⽅案1:把DB连接中的 rewriteBatchedStatements 给设置为false(或者去掉),不过这个操作会影响数据的插⼊速度。
⽅案2:更改表输出的设计。确保30个输出字段的和提交记录数量的乘积不超过65535。⽐如把提交记录数量由10000更改为a4纸边框简单漂亮
450(30*2000=60000< 65535)
当然我们的⽬的是为了提⾼数据库写速度,所以当rewriteBatchedStatements =true时useServerPrepStmts=false必须配合使⽤。
mysql参数调优可以参考如下⽂档
offsettop获取不到sql/doc/connectors/en/connector-j-reference-configuration-properties.html
数据丢失问题:bootstrap怎么样引入
性能提升后,遇到另外个问题,86万数据丢失了130多条,kettle⽆报错,各种mysql参数设置之后都⽆效果,耗时近⼀天,最终查到是重复数据导致。
估计是因为重复数据在mysql写不进去导致该批次数据写失败,但是kettle⽆报错这个就⽐较坑。
mysql怎么读英语
解决办法就是:1)取消数据表主键或者唯⼀索引,当然这是治标不治本的做法。2)根本的做法就是排查重复数据,从源头杜绝重复数据
groupby pandas
参考⽂档:
blog.csdn/smooth00/article/details/69389424?utm_source=itdadao&utm_medium=referralthreadlocal的应用场合
www.jackieathome/archives/169.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。