分享专家——田杰,专注在关系型数据库和NoSQL数据库技术领域,曾先后就职于路透社和渣打银行,目前在阿里云从事数据库技术支持工作,号称“数据库问题的终结者”。
田杰上台后首先问了一个问题,优化的目的是什么?他提出一个观点:“优化的目的是少做或者不做”。从分析RDS for MySQL 性能优化中常常遇见的性能问题入手,开始了今天的分享。
从这些问题入手,田杰分四个部分展开了此次在Tech Insight的分享。SQL数据库和人交流的语言,数据库用的好不好,很大程度上取决去人如何编写SQL,数据库如何处理SQL。
一、架构环境
举个例子来说,一个人如果工作太多做不过来,首先会想到招一个小弟来帮忙。只读实例,就相当于给我们的主实例招来的“小弟”。把读请求放在只读实例上,主实例只用来放写请求。买完只读实例之后,会有一个备实例,这个备实例在后台,你看不见,当主实例crash的时候顶上。
当业务拓展到全国,通过DTS同步,北京和上海就可以互为备灾了。
讨论完了实例外的架构,我们来看看实例内的架构:防波堤,把请求进行排队,避免打瘫。结果缓存实际上是一种内部的key value的产品,这个组建的实用有非常严格的限制。Optimizer是一个优化器,数据库好不好,优化器占据1/3的作用。Optimizer是根据Storage Engines来生成执行计划的
二、表和索引
有的用户在建数据库的时候不建主键,这是一个不太好的现象。因为可能会被自动设主键,而这可能并不是您想要的。
我们定量地来看一下索引怎么用,怎么算出索引的成本是多少:
还是同一张表,我们通过在查询字段上建索引,我们看看成本有什么变化——带来了数百倍效率的提升。对于经常用的查询,要建立一个覆盖性的索引表。
三、SQL优化
接下来,让我们通过一个例子看一下
四、参数优化
最后分享几个“保命”的参数:
小结
如对RDS for MySQL数据库优化有问题,欢迎留言交流!