Mysql数据库调优

数据库调优到底调什么?

  • 调SQL语句:根据需求创建结构良好的SQL语句【实现同一个需求,SQL语句写法很多】
  • 调索引:索引创建原则
  • 调数据库表结构
  • 调MySQL配置:最大连接数,连接超时,线程缓存,查询缓存,排序缓存,连接查询缓存…
  • 调MySQL宿主机OS:TCP连接数,打开文件数,线程栈大小…
  • 调服务器硬件:更多核CPU、更大内存
  • MySQL客户端:连接池(MaxActive,MaxWait),连接属性

前置工作:

1、数据库压力测试

  • 配置数据库驱动
  • 配置线程组
  • 配置 JDBC 连接池
  • 添加 JDBC 请求
  • 添加结果监听器

2、客户端-连接池

连接池参数设置

  • MaxWait 参数表示从连接池获取连接的超时等待时间,单位毫秒。
  • MaxActive

正式调优

一、SQL语句优化

1、查看SQL执行计划【Explain】

  • id:SELECT识别符,这是SELECT查询序列号。
  • select_type:表示单位查询的查询类型,比如:普通查询、联合查询(union、union all)、子查询等复杂查询。
  • table:表示查询的表
  • partitions:使用的哪些分区(对于非分区表值为null)。
  • type(重要)表示表的连接类型。
  • possible_keys:此次查询中可能选用的索引
  • key:查询真正使用到的索引
  • key_len:显示MySQL决定使用的索引size
  • ref:哪个字段或常数与 key 一起被使用
  • rows:显示此查询一共扫描了多少行,这个是一个估计值,不是精确的值。
  • filtered: 表示此查询条件所过滤的数据的百分比
  • Extra:额外信息

2、索引优化

3、深分页LIMIT优化

4、子查询优化 (减少子查询,多用join)

5、其他查询优化

  • 小表驱动大表
  • 避免全表扫描
  • WHERE条件中尽量不要使用not in语句,建议使用not exists
  • 利用慢查询日志、explain执行计划查询、show profile查看SQL执行时的资源使用情况

6、SQL语句性能分析

二、数据库优化

1、慢查询日志

2、连接数max_connections

3、线程使用情况

4、数据库优化-结构优化

  • 将字段很多的表分解为多个表
  • 增加中间表
  • 增加冗余字段

三、服务器层面的优化

1、缓冲区优化

  • 修改buffer_pool

2、减少磁盘写入次数

3、MySQL数据库配置优化

4、服务器硬件优化

 wechat
天生我才必有用