文档章节

AWS AURORA  CPU 100% 的解决方案

Lukewxl
 Lukewxl
发布于 2016/06/20 10:54
字数 915
阅读 178
收藏 0
点赞 0
评论 1

  最近做了一个系统,是从各个地方按照不同的接口同步订单,底层采用的是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(下)

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

wangyiyungw ⋅ 05/10 ⋅ 0

Amazon新一代云端关系数据库Aurora(上)

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

wangyiyungw ⋅ 05/10 ⋅ 0

阿里云POLARDB:一个生而不凡的数据库

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

it168网站 ⋅ 05/29 ⋅ 0

Xilinx RocketIO模块的介绍

摘要: 在高速电路系统设计中,差分串行通信方式正在取代并行总线方式,以满足系统对高带宽数据通信的需求。RocketIO是Virtex2 Pro以上系列FPGA中集成的专用高速串行数据收发模块,可用于实现...

mshgocn ⋅ 04/18 ⋅ 0

HPE:百亿亿次计算设备需要以“内存为中心”,从而降低节点间数据传输功耗与时耗

我们应该在功耗预算方面精打细算,不是吗? HPE公司高级技术部门副总裁Mike Vildibill在接受采访时指出,功耗预算限制将终结现有超级计算机的设计模式——即采用多个独立节点并在其间进行数据...

技术小能手 ⋅ 06/08 ⋅ 0

盘点知名云计算公司的数据库服务(国外篇)

  【IT168 评论】“跨界”是现在很火的一个词,它是指从某一属性的事物进入另一属性的运作,其不只在演艺圈掀起了一阵热潮,同时也在科技圈也带起了一阵狂潮。今天,我们就来看看科技圈第一...

it168网站 ⋅ 04/16 ⋅ 0

jOOQ 3.11:新增支持四款数据库以及 implicit joins

jOOQ 3.11 已发布,新增支持 4 个新的数据库、implicit joins、诊断等等。 新增支持的数据库 jOOQ 专业版 Aurora MySQL Edition Aurora PostgreSQL Edition Azure SQL Data Warehouse jOOQ 企...

局长 ⋅ 06/08 ⋅ 1

三星在自动驾驶行业崭露头角,它准备如何成为领军厂商?

雷锋网(公众号:雷锋网)按:自动驾驶市场和手机市场有什么相同点? 虽然已经贵为世界最大的智能手机制造商,每小时生产线上能诞生 4.4 万台智能手机,但三星电子并不想将自己限制在某个圈子中...

大壮旅 ⋅ 05/15 ⋅ 0

Beanstalk 队列服务器控制台 - Aurora-Console

aurora 是一个 Golang 编写的基于 Web 的 Beanstalk 消息队列服务器管理工具,单文件无需依赖其他组件,支持管理本地和远程多个队列服务器。 特点 跨平台支持 macOS/Linux/Windows 32/64-bi...

xuri ⋅ 2016/10/09 ⋅ 0

美图秀秀DBA谈MySQL运维及优化

随着MySQL应用的不断普及和自身发展,如何更好的优化MySQL和使用MySQL,依然是一个比较有挑战的问题,尤其是在业务快速增长的场景下。本次分享主要介绍一些通用的运维优化实践和问题,以及未...

杨尚刚 ⋅ 2015/12/31 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 34分钟前 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 1

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 昨天 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 昨天 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 昨天 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部