在项目运行过程中我们常常会遇到数据库性能瓶颈,而如果不能针对不同的性能瓶颈采取相应的优化方案,可能并不能有效地解决问题。
下面我们从最常见的读性能瓶颈和数据容量性能瓶颈两个角度出发,分析改采取什么样的优化方案。
1. 读性能瓶颈
在大多数互联网业务中,往往读多写少。这时候,数据库的读会首先成为数据数据库的瓶颈。因此我们希望能过够提升数据的读性能可以采用下列两种优化方式。
①读写分离:
读写分离将数据库分为主从库,一个主库用于写数据,多个从库完成读数据的操作,主从库之间通过某种机制进行数据的同步(如MyCat中通过读取主服务器的sql日志文件来实现主从复制)。采用读写分离可以线性地提升数据库的读性能,消除读写锁冲突从而提升数据库的写性能。
②缓存:
缓存也是互联网中常常使用到的一种架构方式 ,同读写分离不同,读写分离是通过多个从库分摊了数据库读的压力,而缓存则采用了存储的方式,减少了数据库读的压力。
采用缓存解决读性能瓶颈的优点是:1. 缓存的使用成本要比从库少非常多;2. 缓存的开发比较容易,大部分的读操作都可以先去缓存中找,找不到再渗透到数据库。
采用缓存的缺点:缓存对于高可用有要求,因为如果缓存一旦挂了,所有的流量都会同时聚集到数据库上,那么数据库就肯定挂了。
2. 数据容量性能瓶颈
水平切分
考虑订单表数据量只增不减等情况,当数据容量达到几百万条时,sql语句的执行效率就会下降,此时就会遇到数据容量性能瓶颈。要解决这种问题,读写分离和缓存往往都不合适,此时应该考虑水平切分。将一个完整表进行水平切割,分散到多个数据库中进行保存。分散后每个数据表的大小都大大减小了,有助于解决sql执行性能下降的问题。