RDS最佳实践(一)—如何选择你的RDS

在去年双11以前,为了帮助商家准备天猫双11的大促,让用户更好的使用RDS,把RDS的性能发挥到最佳,保障双11当天面对爆发性增长的压力,不会因为RDS的瓶颈致使系统出现问题,编写了 RDS的最佳实践 。该文档的内容所有出自于生产实践,但因为篇幅的限制,我只是把其中的概要罗列到了ppt中,并无展开详细的介绍,后续计划写一个系列,把ppt中的内容进一步展开来说一讲,也算是对RDS用户的一个交代。 php

我该如何选择RDS?我要购买多大规格的RDSRDS的链接数,iops指的是什么?上诉这些问题相信是每个RDS用户在开始使用的时候都会有这样的疑问。首先咱们要了解一下RDS的组成包括哪一些,从阿里云官网的购买页面中咱们能够看到RDS包括了如下参数:数据库类型,版本,存储空间,规格:内存+链接数+io,地域,那咱们就一个个来分析一下: html

.数据库的类型: java

RDS目前支持的数据库类型有两种:mysqlsqlserver,为何这里要特别提出来说一讲?缘由有如下两个方面:
a.因为受到sqlserverwindows license的影响,sqlserver价格会比mysql高出近50%,一个2G Mem+50GB DiskMysql一年的价格是:4480 RMB;一个2G Mem+50GB DiskSqlserver一年的价格是:6420 RMB;
b.sqlserver处于闭源状态,在出现异常疑难问题排查的时候,每每须要借助微软官方的帮助,同时RDS若是想在sqlserver上面定制出一些本身特点的功能时候,每每其封闭的协议让RDS望而退步;相对于mysql的开源而言,RDS依托了阿里强大的mysql内核开发和运维经验,可以很好的定制出一些RDS本身的特点功能,在出现疑难问题上可以迅速的进行debug排查。
在阿里的电商云平台聚石塔,已经有大量的isv,商家正在改造本身的后台系统从sqlserver转向的mysql,你还在犹豫什么?
mysql

.数据库的版本:
RDS mysql目前支持5.55.1两个版本,sqlserver支持2008一个版本,一般在高版本中会:修复掉低版本中一些bug提升系统的稳定和安全性,优化改进低版本的设计提高系统的性能,推出一些新的功能丰富提高系统的易用性。因此这里咱们咱们以mysql为例,看一看在5.55.1相比较有哪些改动:
1)默认存储引擎更改成InnoDB
2)提升性能和可扩展性
. 提升了默认线程并发数(innodb_thread_concurrency)
. 后台输入/输出线程控制(innodb_read_io_threadsinnodb_write_io_threads
. 适应性散列索引(Hash Index)控制,用户能够关闭适应性散列功能
. 插入缓冲(Insert Buffering)控制,用户能够关闭innodb的插入缓冲功能
. 恢复组提交(Restored Group Commit
. 多个回滚段(Multiple Rollback Segments,以前的innodb版本最大能处理1023个并发处理操做,如今mysql5.5能够处理高达128K的并发事物,
. 改善了日志系统互斥和单独刷新(Flush)列表互斥
. 改善清除程序进度,在mysql5.5中清楚操做线程是独立的线程,并支持并发,可使用innodb_purge_treads配置。
sql

3)提升实用性
. 半同步复制(Semi-synchronous Replication
. 复制Heartbeat
. 中继日志自动恢复(Automatic Relay Log Recovery
数据库

4)提升易管理性和效率
. 创建快速索引(Faster Index Creation
. 高效的数据压缩(Efficient Data Compression
. 为大物件和可变长度列提供高效存储
. 增长了INFORMATION_SCHEMA表,新的表提供了与InnoDB压缩和事务处理锁定有关的具体信息
. 支持utf8mb4字符集
windows

5)提升可用性
. 新的表/索引分区选项。MySQL5.5将表和索引RANGLIST分区范围扩展到了非整数列和日期,并增长了在多个列上分区的能力。
缓存

6)改善检测和诊断
. Mysql5.5引入了一种新的性能架构(performancn_shema,P_S),用于监控mysql监控服务器运行时的性能。
安全

有了这么多功能的改进提高,还有什么理由不使用5.5. 性能优化

.存储空间:

RDS的工单问题中,空间问题的咨询应该能够算得上是top 5,当RDS的实际使用空间超过了购买的空间后,实例就会被锁定了,这样就会致使应用没法再写入,更新数据,形成应用的报错,在RDS的控制台中能够设定空间的报警阀值,当实例空间到达报警阀值后用户就会收到报警短信,这个时候用户则须要对判断当前的空间增加是否合理,若是合理的增加则须要对实例的进行弹性升级,若是增加不合理,则须要进行快速的判断。因此在这里咱们就须要了解RDS的空间组成到底包括了哪些?

RDS的实例空间主要包括了:数据文件,日志文件,其余文件(包括系统文件,临时文件)

下面咱们来详细介绍一下这些文件组成:

  1. 数据文件:顾名思义该文件空间则是指的存放用数据的文件,对应到数据库中就是一张张的表,表的组成主要包括:数据和索引两类,因此当你看到你的数据文件占用实例的空间很是多的时候,你须要看一下究竟是哪一张表占用了个人空间,RDS在控制台中提供了:性能优化–>大表优化的性能报表,用户则能够在这里找到系统中占用最大的文件。可是凡事须要未雨绸缪,咱们在设计应用的时候,就要考虑将来数据的增加趋势(数据的生命保留周期),合理的设计数据的存放位置(存放文件or数据库),存储格式(数据类型,字段大小),存放方式(存储引擎选择,分区仍是分表)。下图的案例案例中,数据空间占用了实例大量的空间,用户能够经过排查数据库中究竟是哪一张表占用致使的(能够参考性能优化–>大表优化)

         

  2. 日志文件:RDS采用的主备M-M的高可用架构,其主备之间的数据同步依靠日志的方式,mysqlbinlogsqlservertransaction log;同时RDS支持将实例恢复到任何一个时间点,这个功能须要依靠运用备份和日志。为了减小日志空间对用户的空间的占用,RDS mysql会定时的把日志备份到oss中,而后再将其清除,这样用户须要下载RDS日志的时候能够从oss中获取;对于sqlserverrds对按期的对数据库进行备份,而后将事务日志进行回收。当日志空间出现异常的时候,以下图,因为应用写入数据压力过大,致使binlog日志增长的速度大于了RDS上传到oss的速度,形成了binlog日志增加迅猛,这时候须要用户对数据库的updateinsertdelete进行优化,减少对数据库的变动操做:
  3. 其余文件:
    a.系统文件,每一个数据库在安装的时候会初始化一些系统文件,这些系统文件是数据库正常运行的前提,mysqlibdata1ib_logfile0sqlserverMSDBLogmaster.mdf,下面的这幅图反映了RDS"其余文件"占用达到了很是多的问题,能够参考blog ibdata1文件持续增长的问题定位

b.临时文件:一般能够理解为数据库作一个大的操做,因为内存不足,数据库须要将内存中的文件写到磁盘上,这样则有可能致使临时文件写的很是大,一般出现这种状况的时候,数据库在作大的排序操做(order bygroup by),因为内存不足,须要将数据刷写到临时文件中,下图的案例中,因为数据库中一条order by的语句频繁的执行,可是排序的sql没有索引,致使了临时文件的频繁写操做:

Ps.RDS已经计划在idb中集成实例的空间诊断这个功能,帮助用户分析实例空间的使用,诊断问题的根源。

四.实例规格:

不一样的RDS实例规格提供了不一样的性能指标,能够参考RDS不一样规格的

测试报告 。如何选择RDS的规格,因为该选项会直接关系你的应用是否在RDS上正常的运做起来,同时还关系成本的问题,因此深入的理解这些参数,有助于你更好的使用RDS,更低成本的使用RDS。下面来分析一下RDS规格中这3个关键指标:

  1. 内存(mem):内存是实例的核心指标之一,好比2400M Mem内存的实例,内存参数大小配置在实例的参数文件中,限定了实例可以使用的内存大小为2400M。因为内存的访问速度远远大于磁盘,因此一般状况下,内存中缓存的数据越多,数据库的响应就越快;若是内存较小,当数据超过必定量后,就会被刷新到磁盘上,若是新的请求再次访问该数据,就要从磁盘上把它从磁盘中读取进内存,消耗磁盘io,这个时候数据库响应就会变慢。
  2. IOPS:刚才提到数据从磁盘读取到内存,或者数据从内存写到磁盘都须要消耗io,而磁盘的io能力是有必定,好比新1型提供的iops150个,也就是每秒可以提供150次的随机磁盘io操做,因此若是用户的数据量很大,内存很小,而写入,更新,删除,查询的压力很大,因为iops的限制,对于数据库来讲就是一条sql须要执行很长的时间才能返回结果,对于应用来讲就会形成总体响应的变慢;
  3. 链接数:链接数是数据库中的一个概念,在RDS中的链接数是指用户最多可以建立多少个链接。用户的链接数使用的多少取决于用户的链接类型,例如用户使用了链接池管理链接的长链接应用(如java类应用),在链接池中配置的最大链接数为100,那么在RDS中看到的链接数应该为:app服务器×100;对于短链接的应用而言(如php应用,C/S结构的应用),一个请求到到数据库,就会产生一个链接,当请求完毕后就会释放链接。当用户使用的链接数超过了实例规定的链接数后,RDS会直接抛错给应用,mysqltoo many connectionssqlserverLogon failed for login ‘u_xxxx’ due to trigger execution.

     能够看到上面的3个核心指标都可以直接影响用户使用,下图展现了不一样规格可以达到的QPS指标,该测试报告采用标准的sysbench oltp(读写混合)测试模型,能够做为每种实例规格的吞吐能力的参考,用户能够根据本身的业务压力来选择合适的实例规格:

五.地域选择:

RDS的集群主要分布在杭州和青岛两个地域,用户每每采用SLB+ECS+RDS的架构,因此保持着三者在同一个地域就能够了,杭州到青岛的网络访问延迟大概在20ms左右,因此应当避免跨地域的访问状况。

原文连接:http://www.tuicool.com/articles/MJzuIn

相关文章
相关标签/搜索