文档章节

AWS AURORA  CPU 100% 的解决方案

Lukewxl
 Lukewxl
发布于 2016/06/20 10:54
字数 915
阅读 221
收藏 0

  最近做了一个系统,是从各个地方按照不同的接口同步订单,底层采用的是Spring JdbcTempalte,支持按预订时间分表存储和查询的功能,使用到了jdbc的BatchUpdate功能.生产环境采用的是AWS,使用的数据库方案是AWS的RDS(Rational DataBase Service),这是我第一次使用RDS.本地环境测试起来一切正常,但是发布到生产环境CPU就飙到100%,且一条直线横到底.

 虽然RDS的服务不会挂,但是系统的性能受到严重的影响.第一次使用AWS的RDS数据库,我简答的认为Amazon Aurora与常用的mysql是一样的,后来查询RDS的文档,才发现有一些不同.

Amazon Aurora 是一个兼容 MySQL 的关系数据库引擎,结合了高端商用数据库的速度和可用性以及开源数据库的简单性和成本效益。Amazon Aurora 的性能最高可达到 MySQL 的五倍,并且能以十分之一的成本提供商用数据库的安全性、可用性和可靠性。

这是http://aws.amazon.com/cn/rds/aurora/上对Aurora的介绍,一直把所有的文档看完,但是还是没有能解决我的问题,通过查询的ShowProcessList和程序的日志上来看,发现系统在执行一些Sql方面有严重的性能问题.

比如根据订单号删除订单的同步任务.

delete from res_id_list_for_fetch  where ersp='XXX' And source='yyyy'

这条语句居然会死锁,执行SQL时,如果指定了主键,那么速度是最快的,主键是唯一的,所以只需锁定这一行记录即可,但是上面的SQL里面,是有3kw的数据量的基础上执行的,而且没有索引,所以直接锁定了整个表,在40个线程并发执行的情况下,出现死锁就不足为奇了.所以解决方案也是很简单,对ersp和source建立索引.

同时,在执行BatchUpdate时,slowlog的日志也显示有性能问题,在stackoverflow 上看到有位仁兄也遇到过这样的问题

http://stackoverflow.com/questions/2993251/jdbc-batch-insert-performance 

根据上面的解决方案,在jdbc的url上加入参数

?useServerPrepStmts=false&rewriteBatchedStatements=true"

默认的情况下,rewriteBatchedStatements是false,这个参数的设置的解释如下

I'd like to expand on Bertil's answer, as I've been experimenting with the connection URL parameters.

rewriteBatchedStatements=true is the important parameter. useServerPrepStmts is already false by default, and even changing it to true doesn't make much difference in terms of batch insert performance.

Now I think is the time to write how rewriteBatchedStatements=true improves the performance so dramatically. It does so by rewriting of prepared statements for INSERT into multi-value inserts when executeBatch() (Source). That means that instead of sending the following n INSERT statements to the mysql server each time executeBatch() is called :

INSERT INTO X VALUES (A1,B1,C1)
INSERT INTO X VALUES (A2,B2,C2)
...
INSERT INTO X VALUES (An,Bn,Cn)

It would send a single INSERT statement :

INSERT INTO X VALUES (A1,B1,C1),(A2,B2,C2),...,(An,Bn,Cn)

You can observe it by toggling on the mysql logging (by SET global general_log = 1) which would log into a file each statement sent to the mysql server.

按照以上的解决方案,该建立索引的建立索引,连接参数也修改了,部署到生产环境,后来观察,cup一直稳定在3%.问题得到解决.

总结 对于经常使用的查询字段,该建立索引的还是要建立索性,血的教训. 

© 著作权归作者所有

共有 人打赏支持
Lukewxl
粉丝 4
博文 23
码字总数 8511
作品 0
浦东
高级程序员
私信 提问
加载中

评论(1)

小白小霸王
小白小霸王
不知道 如果本地的mysql 在同样的并发下是不是也有问题呢
做云计算时代的数据库 Amazon Aurora成就数据之美

云计算时代就应该有云数据库。 19世纪,爱马仕还是一家专门制作各种精美马具的作坊,但到了20世纪,汽车逐渐取代马车,爱马仕不得不从马具转向皮具,从而成就了这一世界级奢侈品品牌;1975年...

常言道_
11/05
0
0
Amazon新一代云端关系数据库Aurora(上)

本文由 网易云 发布 作者:郭忆 本篇文章仅限内部分享,如需转载,请联系网易获取授权。 在2017年5月芝加哥举办的世界顶级数据库会议SIGMOD/PODS上,作为全球最大的公有云服务提供商,Amazo...

wangyiyungw
05/10
0
0
AWS机器学习初探(1):Comprehend - 自然语言处理服务

AWS机器学习初探(1):Comprehend - 自然语言处理服务 1. Comprehend 服务简介 1.1 功能 Amazon Comprehend 服务利用自然语言处理(NLP)来分析文本。其使用非常简单。 输入:任意 UTF-8 格...

SammyLiu
08/21
0
0
Amazon新一代云端关系数据库Aurora(下)

本文由 网易云 发布 作者:郭忆 本篇文章仅限内部分享,如需转载,请联系网易获取授权。 故障恢复 MySQL基于Check point的机制,周期性的建立redo log与数据页的一致点。一旦数据库重启,从记...

wangyiyungw
05/10
0
0
阿里云POLARDB:一个生而不凡的数据库

  【IT168 评论】关系型数据库并不新鲜。这个诞生于上世纪70年代的“老古董”,在业内不断涌现出多种不同类型的数据库的情况下,仍然站在舞台的中央,它的地位也依旧不可替代。当前主流的关...

it168网站
05/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 教程:在 Confluence 中导航

当你对 Confluence 有所了解后,你会发现 Confluence 使用起来非常简单。这个教程主要是针对你使用的 Confluence 界面进行一些说明,同时向你展示在那里可以进行一些通用的任务和操作。 空间...

honeymose
今天
2
0
sed, awk 练习

1. sed打印某行到某行之间的内容 2. sed 转换大小写 将单词首字母转化大写 将所有小写转化大写 3. sed 在某一行最后面添加一个数字 4. 删除某行到最后一行 解析: {:a;N;$!ba;d} :a : 是...

Fc丶
今天
2
0
babel6升级到7,jest-babel报错:Requires Babel "^7.0.0-0", but was loaded with "6.26.3".

自从将前端环境更新到babel7,jest-babel之前是基于babel6的,执行时候就会报:Requires Babel "^7.0.0-0", but was loaded with "6.26.3". 很烦,因为连续帮好几台电脑修复这个问题,所以记...

曾建凯
今天
1
0
探索802.11ax

802.11ax承诺在真实条件下改善峰值性能和最差情况。 如何改善今天的Wi-Fi? 在决定如何改进当前版本以外的Wi-Fi时,802.11ac,IEEE和Wi-Fi联盟调查了Wi-Fi部署和行为,以确定更广泛使用的障碍...

linuxprobe16
今天
2
0
使用linux将64G的SDCARD格式化为FAT32

一、命令如下: sudo fdisk -lsudo mkfs.vfat /dev/sda -Isudo fdisk /dev/sda Welcome to fdisk (util-linux 2.29.2). Changes will remain in memory only, until you decide to wri......

mbzhong
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部