了解RDS的概念
这也是第一条,也是最重要的一条,在使用某项产品和服务之前,首先要了解该产品或服务的功能与限制,就像你买一个冰箱或洗衣机,通常也只有在阅读完说明书之后才能利用起来它们的所以功能,以及使用时的注意事项,RDS for SQL Server也是如此。
RDS for SQL Server与传统的自建机房提供SQL Server的主要不同就是用户所需负责数据库的模块多与少的问题,自建SQL Server与阿里云RDS for SQL Server所需负责的部分图1所示:
当然,便捷的代价除了成本之外,另外就是限制,这就类似于用一些基础的工具可以做各类工作,但专用的工具可以高效完成特定工作一样,RDS更类似于专用的工具,
限制带来的优势
限制的目的是由于这部分工作由阿里云统一去做了,数据库作为服务提供给使用者,因此使用者就没有数据库以下(操作系统、存储等)部分的权限,数据库作为服务提供有以下几点优势:
简单
最大的好处自然是简单,无需再关注SQL Server的安装、配置、监控、报警、备份、高可用等工作,这些工作往往是需要比较专业的人士进行长时间的付出才能建立一个完整的体系,由于数据库往往是整个系统的核心部分,这些工作如果运维人员的水平问题或误操作往往还会带来比较严重的后果。 而在阿里云下面,有一套完整的云体系负责所有这些工作,以简单直观的界面就能够将这些信息展示出来。如图2,图3所示。
标准化&最佳实践化
由阿里云负责数据库基础配置的运维可以使得数据库运维标准化,通常在SQL Server安装后都需要进行一些诸如:最大并行度、文件增长、tempdb个数、操作系统权限、磁盘IO分布等等很多参数的配置,这些参数在很多情况下会对SQL Server的性能与可用性产生影响,而很多企业并没有DBA或专业的数据库运维人员,因此往往不能正确配置这些参数。 而阿里云则可以通过标准化将这些参数在实例生成时就进行配置,这这些配置都是经过大量实践符合99%数据库的最佳实践,因此可以避免很多由于配置不当而产生的数据库问题。
高可用
目前为止,从高可用性角度来看,阿里云RDS For SQL Server分为两个版本,一个是双机版,该版本底层使用SQL Server镜像(Mirror)实现高可用,因此可以实现极高的可用性,即使出现硬件层面的故障,也能实现秒级的切换。 而对于单机版的SQL Server,高可用技术更像是虚拟化层面的漂移,当发生故障时,SQL Server从一台宿主机到另外的宿主机,因此这种情况下是分钟级。 可以根据业务类型的重要程度与成本的预算进行选择。但推荐尽量使用双机版。
利用阿里云提供的工具
RDS的一个优势是已经对一些常用的操作进行了封装,而这些操作如果手工完成通常会费时费力,而且容易出错。比如在数据库出现问题时将数据库还原到某一个时间点,如果是DBA手工操作则需要完整的备份体系存在的情况下,按照备份顺序进行还原,而在阿里云上都是一键操作,关于常用流程的使用可以看本篇文章的后半段。
善用弹性扩展
云数据库的一个很大的优势是弹性扩展,意味着可以按需进行扩展,一般以下几种情况比较适宜考虑弹性方面的功能:
- 业务增长:随着业务增长动态扩容数据库
- 业务高峰:比如双十一等大促临时提升服务器规格,在业务低峰期再进行服务器规格降级
- 临时使用:比如申请一台服务器进行测试,这个过程使用云数据库不但避免了麻烦的数据库安装部署成本,还能在测试完成后关闭服务器以节约成本。
了解权限体系
上面说了,由于RDS是PAAS层的服务,所以需要让渡一部分权限,但其实绝大多数常用权限还是可以使用的,可以使用命令fnmypermission函数了解当前登录账号所拥有的权限,如图:
设置可维护时间段
实际上RDS底层是有一些运维操作的,在运维操作时可能有闪断出现,现在可以选择接受的运维时间段,这可以根据业务来,默认是2:00am-6:00 am,这个时间适用于绝大多数场景,但某些场景比如海外业务,或者游戏业务晚上可能反而是高峰期,因此应该根据业务正确设置该值。
利用临时实例
RDS有一个非常好的功能是临时实例,在控制台如图所示:
图 .创建临时实例功能图 .指定从某个时间点创建临时实例。
该功能可以从指定时间点的备份完全克隆出来一个实例,可以使用该实例进行下面的工作:
- 测试:可以完全克隆出来一个数据副本,用于测试,而不影响线上生产环境的数据以及压力
- 数据找回:如果有误操作等,可以利用线上生产环境克隆出一份数据,然后手动找回数据
-
开发环境:可以通过临时实例作为软件开发环境,从而不再需要手动创建测试数据,开发过程中有数据支持也可以更容易及时发现BUG
最牛逼的还是这个功能是完全免费的。
利用内置的系统存储过程完成一些undocument操作
rds在限制权限之外还通过一套内部存储过程可以完成一些“非标准”操作,这些存储过程在master数据库下,下面是当前版本所支持的存储过程
- [dbo].[sprdsaddlinkedserver](添加链接服务器)
- [dbo].[sprdsconfigure](配置服务器级别的参数)
- [dbo].[sprdscopy_database](复制数据库)
- [dbo].[sprdsdbcc_trace](启用跟踪标记)
- [dbo].[sprdsreaderrorlogs](读取SQL Server错误日志)
-
[dbo].[sprdssetdbonline](将数据库状态改为Online)
比如,我们可以通过下面命令将服务器的“并行开销阈值”改为50。
[dbo].[sp_rds_configure] 'cost threshold for parallelism',''
考虑RDS底层架构的影响
由于RDS for Server双机版底层使用的是SQL Server 镜像,且为高安全模式,意味着所有的数据更新(插入、删除、更新)全部需要同步到镜像端,因此如果短时间内有大量的数据更新操作时,考虑降低每次事务的大小,比如一次删除100W条数据的SQL可以写为循环删除,在每次循环中加入等待时间。
DELETE
FROM 表
where 日期<'2015-1-1'
可以替换为:
DECLARE @r INT; SET @r=1; WHILE @r>0
BEGIN DELETE TOP(5000)
FROM 表
where 日期<'2015-1-1' SET @r=@@ROWCOUNT; wait for dealy '00:00:00:01'
小结
在使用阿里云RDS for SQL Server时,要考虑PAAS层的结构与限制 ,RDS提供大量功能的同时,也需要让渡一些权限,了解底层原理最大化利用RDS提供的功能并避免限制才是使用的最佳实践。