由一次自建库迁移到阿里云RDS引发的性能问题。
刚入职一互联网公司,项目正好处于计划上线的时间,由于公司前不久已经购买了rds服务,领导决定尝试一番!
当然,新事物、云事物还是要谨慎的。安排我先把测试环境数据库迁移上去,这里吐槽一下,往rds迁移一个比较大的
数据库是比较恶心的。2种方式:
1、数据迁移功能

结论:看似很好用,效率极慢,是通过访问你的数据库一点点同步数据的。强烈不推荐
2、使用rds配套的管理平台

结论:文件限制一百兆,幸好支持压缩文件。导入233M数据耗时121229,也就是121秒,貌似还可以。但是
其他功能确实比较鸡肋。

OK,以上就是插个话而已,重点看后面,总算数据导入了进入,设置了一些参数后,内外成功连接到rds,
速度测试一番,找到开发让找了一个比较多的页面跑一下,问题就出来了,原来在ecs自建mysql的服务器上
对应语句执行了2.8秒,rds上却执行了11.28秒,反复测试了很多遍,在RDS后台工具上,远程连接到控制台执行
时间都是11秒-12秒左右。自建库一直2.6秒左右,发现肯定有问题,立即发起了个工单,描述了问题,就开始漫漫解决指路。
大概过程就是让我查看explain执行计划,show profile查看执行步骤和耗时,参数优化,对比,版本,最终发现 一个可疑地方:
那就是show profile中 有2个步骤耗时5秒,合起来占用了11秒,步骤名称为:CreatING sort index
看图:

至于什么意思,大家自行百度,看工程师回复:

反正就是说我的语句不行啦,要优化,这一点我承认,语句确实比较杂乱,但是为了追求问题
我决定继续跟踪下去,这个地方是怎么引起的。可不可以通过参数优化、废话不多说了,发现问题
是8月26日,为了追求这个Creating sort index到底为啥会这么高,我就继续追问了下去,ok
重点来了,又是陪她他们进行各种参数调优,没有任务进展,直至9月22日,近一个月时间,终于今天
给了答复,看图:


总体的意思呢,我总结下就是说自建库是在ecs,超出sort_buffer_size的内容可以在tmp目录执行,
而且这个tmp目录是一个很特别的目录,他挂载在内存上,所有速度快。而RDS呢,不好意思,超出
参数设置的内容是不会去rds物理服务器tmp目录的执行的,因为rds的产品机制是不允许的,所以超出的部分
就转到了磁盘执行,就跟自建库产生了极大的差别,说白了就是少了一条捷径。
问题总结:
当查询及排序内容过多的时候,会使用内存运行,内存不够,就用物理磁盘,两者差别就在于rds本身不会去想物理机申请内存
而自建库却可以。
阿里云解决方法:
1、修改sort_buffer_size 的session值,让更多的内容在内存上执行,但是高并发的环境会造成数据库内容占满,拒绝服务,
因为这个参数是连接古来申请的时候一次性分配的。所以不宜太高。
2、继续优化sql语句的涉及到的表的主键、索引和sql语法,这个就不啰嗦了。
PS:此问题解决了近一个月,多次电话沟通,问题在后台高级dba分析了好久都没什么进展,造成了一个问题脱了一个月,也对我们业务
上线产生了影响,最后不得已先用ecs建库,另外:顺便问了阿里云Postgresql也存在类似问题。请大家参考,当然说到底还是我们的sql有问题。
由一次自建库迁移到阿里云RDS引发的性能问题。的更多相关文章
- 阿里云RDS数据库备份同步到自建库方法(SHELL脚本)
一.背景: 由于阿里云RDS生产库每天都需要备份且拷贝到自建读库,而如果使用阿里云的自动拷贝到只读实例, 费用太高, 故采用自编写同步脚本方法实现. 二.前提: 1). 已开通阿里云RDS, 且开启定 ...
- 阿里云RDS数据库改造迁移方案
1. 改造原因 (1) 由于历史原因, 本应该是同一个库的表分布在两个数据库中,需要对这两个库进行合并. (2) 已有的数据库性能无法满足业务的增长需要, 查询卡,慢问题突出. (3) 当前自建Mys ...
- 大数据平台Hive数据迁移至阿里云ODPS平台流程与问题记录
一.背景介绍 最近几天,接到公司的一个将当前大数据平台数据全部迁移到阿里云ODPS平台上的任务.而申请的这个ODPS平台是属于政务内网的,因考虑到安全问题当前的大数据平台与阿里云ODPS的网络是不通的 ...
- 将个人博客从GitHub迁移至阿里云服务器过程总结
让我们先回顾下前两篇博客: 程序员如何从0到1搭建自己的技术博客 在个人博客中优雅的使用Gitalk评论插件 通过前两篇博客,我们了解了如何快速的从0到1搭建一个个人博客并使用了Gitalk评论插件, ...
- 实战:基于 Spring 的应用配置如何迁移至阿里云应用配置管理 ACM
最近遇到一些开发者朋友,准备将原有的Java Spring的应用配置迁移到 阿里云应用配置管理 ACM 中.迁移过程中,遇到不少有趣的问题.本文将通过一个简单的样例来还原迁移过程中遇到的问题和相关解决 ...
- 阿里云rds数据库迁移实战(多数据源)
由于某几个业务表数据量太大,数据由业务写,数据部门读. 写压力不大,读却很容易导致长时间等待问题(读由单独系统进行读),导致连接被占用,从而容易并发稍稍增长导致全库卡死! 于是,就拆库呗. 业务系统拆 ...
- 阿里云RDS实例内不同数据库之间的数据迁移
适用场景 本文适用于使用DTS实现相同实例下库名不同的数据库之间的数据迁移.本文以使用DTS将同一RDS实例下的amptest库迁移到jiangliu_amptest库为例来说明如何使用DTS实现相同 ...
- 阿里云 RDS实例间的数据迁移
使用数据传输DTS可以实现两个RDS实例间的数据迁移.对于支持增量迁移的存储引擎,还可以使用DTS在源RDS实例不停服的情况下,将数据迁移到目标RDS实例.目前对于RDS不同存储引擎,只支持同构迁移( ...
- MongoDB自建和阿里云RDS备份还原
MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功 ...
随机推荐
- Git实用记录
一.git命令名词解释 1.添加/跟踪/暂存:添加到本地索引 git add 文件名 2.提交:提交到本地仓库 git commit -m '注释' 3.推送:将提交到本地仓库的所有更新提交到服务器 ...
- 【Ubuntu 16】源码包安装Apache Httpd
源码包安装适合初学者使用. 背景信息 APR (Apache Portable Runtime) Apache可移植运行的任务(APR)项目是创建和维护软件库,为底层平台的具体实现提供了一个可预见的和 ...
- python之路第二天 随便记记 今天主要很郁闷
为何要有操作系统 为了让程序员更轻松的完成命令电脑工作而存在的,控制硬件,服务于软件. 操作系统的位置 操作系统位于软件和硬件之间.操作系统由内核(运行于内核态,控制硬件)和系统调用(运行于用户态,为 ...
- 进入子shell的各种情况分析
子shell的概念贯穿整个shell,写shell脚本时更是不可不知.所谓子shell,即从当前shell环境新开一个shell环境,这个新开的shell环境就称为子shell(subshell),而 ...
- KVM套件-linux基础
KVM套件 使用KVM的虚拟机,通过KVM的虚拟机克隆功能,提高效率,避免在实验过程中重装系统. 另外,在LINUX系统上使用KVM的虚拟化,可以获得更好性能,且可以提前熟悉企业级虚拟化技术. 过程: ...
- 关于Eclipse启动报错,jvm版本不匹配的问题
前几天重新下了个eclipse,eclipse需要java环境才能运行起来,我当时电脑上自己装了jdk1.8,然后直接运行新下载的eclipse,说我的jvm版本是1.6,但是我不记得安装过1.6的了 ...
- Java中面向字符的输入流
Java中面向字符的输入流 2016-12-04 Java程序员联盟 Java程序员联盟 Java程序员联盟 微信号 javalm 功能介绍 莫道君行早,更有早行人 全心敲代码,天道自酬勤 字符流是针 ...
- 通过response设置响应体
(1)响应体设置文本 PrintWriter getWriter() 获得字符流,通过字符流的write(String s)方法可以将字符串设置到response 缓冲区中,随后Tomcat会将res ...
- HTML5_input_file_打开很慢的问题
最近项目中有上传附件的功能,只是在chrome浏览器上面测试,发现上传附件,打开选择框比较慢 原文链接:http://www.foreverpx.cn
- 关于makefile中变量的多次赋值以及override指令
1 基本原则如下 1.1 原则1 变量的普通赋值是有先后顺序的,后面的赋值会覆盖掉前面的赋值. 1.2 原则2 使用的时候,用的是其前面最后的赋值,就算其后面有使用了override指令的赋值也不会影 ...