MySQL调优的五个方向

  1. 客户端与连接层的优化:调整客户端DB连接池的参数和DB连接层的参数。
  2. MySQL结构的优化:合理的设计库表结构,表中字段根据业务选择合适的数据类型、索引。
  3. MySQL参数优化:调整参数的默认值,根据业务将各类参数调整到合适的大小。
  4. 整体架构优化:引入中间件减轻数据库压力,优化MySQL架构提高可用性。
  5. 编码层优化:根据库表结构、索引结构优化业务SQL语句,提高索引命中率。

带来的性能收益排序为 4 > 2 > 5 > 3 > 1,性能收益越大意味着成本越高。

MySQL 连接层优化策略

一个用户请求在Java程序中分配一条线程处理,然后变成一条SQL发往MySQL执行,Java程序和MySQL-Server之间通过建立网络连接进行通信,这些连接称为数据库连接,MySQL内部也是通过一条条线程执行SQL语句。数据库连接数不是越大越好。

数据库连接数越大,内部创建出的工作线程会越多,需要的CPU配置就更高,线程数量超过服务器CPU核心数量,CPU会以时间片调度模式工作,在不同线程中反复切换执行,这个过程远大于线程执行的开销。

连接池分为客户端连接池、服务端连接池,客户端连接池是指Java自身维护的数据库连接对象,如C3P0、DBCP、Druid、HikariCP...等连接池。服务端连接池是指MySQL-Server的连接层中,自身维护的一个连接池,用来实现线程复用的目的。

重点调整的是客户端连接池的连接数,MySQL实例一般情况下只为单个项目提供服务,应用程序的连接数做了限制,也就限制了服务端的连接数。但数据库实例不仅仅只为单个项目提供服务,有时候通过终端工具远程连接MySQL,MySQL的最大连接数和客户端连接池的最大连接数保持一致,很有可能导致MySQL连接数爆满,最终造成终端无法连上MySQL。
客户端的连接池大小计算公式:最大连接数 = (CPU核心数 * 2) + 有效磁盘数(SSD固态硬盘)

1. 偶发高峰类业务的连接数配置

在某个时间段流量显然比平时高很多的业务,这类业务常驻线程数不适合太多。并发来临时会创建大量连接,并发后一直保持数据库连接会导致资源被占用。这类业务最大连接数按上面的公式配置,常驻连接数可配成CPU核数+1,同时缩短连接存活时间来即使释放空闲的数据库连接。

2. 分库分表情况下的连接数配置

以上提到的都是建立在单库情况下的配置,对于读写分离、双主双写、分库分表的情况下,就不适合这样配置。因为部署了多个MySQL节点,意味着拥有堕胎服务器的硬件资源,要根据每个节点的硬件配置规划处合理的连接数。

总结:

连接层的调优实际上是指调整它的参数,即常驻连接数、最大连接数、空闲连接存活时间以及等待队列的容量。对于最佳连接数的计算,首先要把CPU核数放首位考虑,紧接着是磁盘,最后是网络带宽,因为带宽会影响SQL执行时间,综合考虑后计算出最合适的连接数大小。

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值