一次数据库上云迁移性能下降的排查

October 27th, 2015 Comments off

背景介绍:

某客户目前正在将本地的业务系统迁移上云,测试过程中发现后台运营系统,在rds上运行时间明显要比线下PC上自建数据库运行时间要慢1倍,导致客户系统割接延期的风险。用户线下一台PC服务器的性能居然还比顶配的RDS跑的快,这让用户对RDS的性能产生了质疑,需要立刻调查原因。

问题分析:

通常SQL的执行时间在同等数据量的情况下发生变化主要有以下一些场景,其主要原因是由于优化器生成的执行计划发生了改变,这样则会导致SQL的执行时间发生较大的变化,当然可能变慢,也有可能变快,变慢是我们不想看到的场景:

1、  数据库跨平台迁移(PG->MySQL、ORALCE->My[……]

Read more

Categories: database Tags:

关于RDS只读实例延迟分析

June 11th, 2015 Comments off

只读实例是目前RDS用户实现数据读写分离的一种常见架构,用户只需要将业务中的读请求分担到只读节点上,就可以缓解主库查询压力,同时也可以把一些OLAP的分析查询放到另外的只读节点上,减小复杂统计查询对主库的冲击,RDS只读节点架构图如下:

由于RDS只读节点采用原生的MySQL Binlog复制技术,那么延迟必然会成为他成立之初就会存在的问题。延迟会导致只读节点与主库的数据出现不一致,进而可能造成业务上逻辑的混乱或者数据不正确;另外只读实例延迟同样也会触发binlog堆积,导致只读实例的空间迅速消耗完,这样会导致只读实例被锁定,锁定之后应用则无法完成读操作。

最近也收到了很多[……]

Read more

Categories: database Tags:

RDS链路卡慢问题的诊断

September 21st, 2014 Comments off

经常会收到用户反馈在使用RDS的过程中出现卡慢,闪断地情况,当出现此类问题的时候,首先我们要进行一下测试,看看问题出现在哪一个阶段,RDS给到用户的是一个DNS地址,其实他包括三个阶段:DNS–>VIP–>DB

       我们可以在本地的应用服务器(VM)上通过简单的ping命令,或者数据库的客户端去不断的连接测试RDS,来获取每次连接RDS的响应时间(RT)。在正常情况下RT应该小于20ms以内,如果超出10ms,则表明了RDS的网络链路出现了异常,这个时候我们就需要去排查一下是在哪里出现了问题:

(1)    当DNS链路服务出现问题:

当我们[……]

Read more

Categories: database Tags:

复杂关联SQL的优化

September 16th, 2014 Comments off

昨天处理了一则复杂关联SQL的优化,这类SQL的优化往往考虑以下四点:

第一.查询所返回的结果集,通常查询返回的结果集很少,是有信心进行优化的;

第二.驱动表的选择至关重要,通过查看执行计划,可以看到优化器选择的驱动表,从执行计划中的rows可以大致反映出问题的所在;

第三.理清各表之间的关联关系,注意关联字段上是否有合适的索引;

第四.使用straight_join关键词来强制表之间的关联顺序,可以方便我们验证某些猜想;

SQL:
执行时间:
mysql> select c.yh_id,
-> c.yh_dm,
-> c.yh_mc,
-&g[……]

Read more

Categories: mysql, sql优化 Tags:

RDS最佳实践(五)—Mysql大字段的频繁更新导致binlog暴增

August 4th, 2014 Comments off

背景:RDS Mysql采用的binlog 格式默认为ROW,在Mysql 5.6的版本之前,Mysql每次列的修改(update)都需要记录表中所有列的值。这样就存在一个问题,如果表中包含很多的大字段,表的单行长度就会非常长,这样每次update就会导致大量的 binlog空间生成。针对这个问题,在mysql 5.6中进行了改进,复制支持”row image control” ,只记录修改的列而不是行中所有的列,这对一些包含 BLOGs 字段的数据来说可以节省很大的处理能力,因此此项改进不仅节省了磁盘空间,同时也提升了性能:

[……]

Read more

Categories: database Tags:

RDS最佳实践(四)—如何处理Mysql的子查询

August 4th, 2014 Comments off

早上值班同事在旺旺群里面贴了一条非常复杂的SQL,用户从本地迁移到RDS Mysql出现严重性能下降,同样的数据和表结构下,在本地的数据库上只要不到1s的时间,但是在rds上好几分钟都没响应。

碰到这类问题需要考虑以下一些因素:

a.数据库的版本不同(不同的版本优化器策略不一样,或者异构数据库间的迁移:oracle–>mysql,sqlserver–>mysql),导致sql执行计划不同,最后导致sql执行时间不同;

b.数据库的配置不同(不同的内存配置,参数设置–query cache是否打开),导致sql执行时间不同;

c.数据库的数据量不同(系统[……]

Read more

Categories: database, sql优化 Tags:

RDS最佳实践(三)—如何制定相关的流程来规范RDS的使用

May 11th, 2014 Comments off

上一篇文章中,我们介绍了如何快速的把本地自建的数据库迁移入云,那是不是把数据库迁移到RDS后,用户就什么都不需要做了?比如RDS帮你的数据库做到了高可用,在主库出现down机后能够快速切换到备库,立刻恢复应用;每天会定时的备份数据和日志,如果出现误操作能够帮你恢复到任意时间点;如果担心黑客攻击或者sql注入漏洞,RDS能够帮助你进行sql注入的拦截;当数据库使用中出现bug时,后端有专业的源码和DBA团队帮助用户实例打上patch,让用户无后顾之忧;当实例的性能出现瓶颈的时候,可以进行快速的弹性升级,保证服务的正常运行等等。

可以看到RDS已经具备相当丰富的自动化数据库运维的功能,用户不[……]

Read more

Categories: database Tags:

RDS最佳实践(二)—如何快速平稳的迁入RDS

April 24th, 2014 Comments off

在上一篇中大致介绍RDS的一些基本参数,包括数据库类型,版本,存储空间,规格:内存,连接数,io,地域等基本含义,本篇中将介绍如何快速平稳的迁入RDS。

用户在购买完RDS后,接下来就可以开始往RDS迁入数据了。在RDS刚刚对外提供服务的时候,用户只能通过将自己的数据库dump成为sql文件,然后再将sql文件source到RDS中去:数据迁移至RDS-MySQL之使用MySQLdump工具数据迁移至RDS-SQLserver之利用SQL Server客户端工具,这两种方法是最简单的方法,但是局限性也非常的多:

.用户的数据库太大了,逻辑sql导入的方式速度太慢了,严重影响停机时间;[……]

Read more

Categories: database Tags:

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

April 14th, 2014 Comments off

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

一.数据库的类型:

RDS目前支持的数据库类型有两种:mysql,sqlserver,为什么这里要特别提出来讲一讲?原因有以下两个方面:
a.由于受到sqlserver和windows license的影响,sqlserver价格会比mysql高出[……]

Read more

Categories: database Tags:

ibdata1文件持续增加的问题定位

December 10th, 2013 Comments off

用户的ibdata1文件持续增加:

Innodb的表有两种存放方式:

第一种共享表空间方式:所有表的索引,数据统一存放在一个共享表空间中,这样会导致共享表空间的空间迅速增长,同时空间回收困难;

第二种独占表空间方式:就是RDS目前采用 的,也就是一张表一个表空间,表中的索引和数据存放在自己独立的表空间中,空间能够比较容易的回收;

无论是独占还是共享表空间,innodb都会有系统共享表空间(ibdata1),该系统表空间主要用于存储数据字典,undo entry,insert buffer,doublewrite buffer,

该系统表空间的增加通常的原因[……]

Read more

Categories: database Tags: