文档章节

AWS AURORA  CPU 100% 的解决方案

Lukewxl
 Lukewxl
发布于 2016/06/20 10:54
字数 915
阅读 204
收藏 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
博文 22
码字总数 8399
作品 0
浦东
高级程序员
加载中

评论(1)

小白小霸王
小白小霸王
不知道 如果本地的mysql 在同样的并发下是不是也有问题呢
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
比MySQL快10倍?这可能是目前AWS Aurora最详解读!

作者介绍 朱阅岸,中国人民大学博士,现供职于腾讯云数据库团队。研究方向主要为数据库系统理论与实现、新硬件平台下的数据库系统以及TP+AP型混合系统。 Aurora是Amazon为云计算而专门定制的...

朱阅岸
2017/05/25
0
0
阿里云POLARDB:一个生而不凡的数据库

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

it168网站
05/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ajax 提交返回map集合 获取不到值

后台java代码 @RequestMapping("/cameraList") @ResponseBody public Map<String, Object> cameraListForPage(@RequestParam(defaultValue = "1", value = "page") Integer page......

S三少S
34分钟前
44
3
TypeScrip最污的技术课-技术胖TypeScript图文视频教程

近日Node.js之父瑞安达尔(Ryan Dahl)发布新的开源项目 deno,从官方介绍来看,可以认为它是下一代 Node,使用 rust 语言代替 C++ 重新编写跨平台底层内核驱动,上层仍然使用 V8 引擎,最终...

JamesView
36分钟前
7
0
Es学习笔记

1.过滤排重聚合查询 筛选出某一个聚合值的个数统计。相当于mysql的distinct. 关键字:cardinality "aggs": { "2":{ "cardinality": { "field": "field" } ...

Gmupload
38分钟前
1
0
h5语义化标签

语义化HTML:用最恰当的HTML元素标签做恰当的事情。 优点: 提升可访问性; SEO; 结构清晰,利于维护; 通用容器:div——块级通用容器;span——短语内容无语义容器。 <title></title>:简...

莫西摩西
44分钟前
2
0
修改11g rac中 asm diskstring的发现路径

问题 : 如果我 们asm_disking以前是/dev/oracleasm/disks/* ,并且现在已经有磁盘组再用这个磁盘串了,那么,我们无法直接修改这个发现串为 ORCL:*,修改会报错,提示存在的磁盘无法使用新的...

tututu_jiang
47分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部