mysql my.conf 优化_MySQL优化 - mywd的个人空间 - OSCHINA - 中文开源技术交流社区

本文主要探讨MySQL的慢查询优化,包括通过调整my.cnf配置启用慢查询日志,使用mysqldumpslow和pt-query-digest分析工具,以及优化SQL语句、索引和数据库表结构。此外,还提到了硬件和系统配置的优化策略。
摘要由CSDN通过智能技术生成

一、目的

解决由于慢查询造成的页面加载慢或者无法加载

解决阻塞造成数据无法提交

二、优化方式

SQL 及索引优化

这种方式是我们平时使用的最多也是代价最低效果最为明显的一种方式

定位哪些SQL需要优化

开启mysql慢查日志

在MySQL客户端中输入命令:

show variables like '%quer%';

-slow_query_log是否记录慢查询。用long_query_time变量的值来确定“慢查询”。

-slow_query_log_file慢日志文件路径

-long_query_time慢日志执行时长(秒),超过设定的时间才会记日志

Linux:

在/etc/my.cnf配置文件的[mysqld]选项下增加:

slow_query_log=TRUE

slow_query_log_file=/usr/local/mysql/slow_query_log.txt

long_query_time=3

Windows:

在my.ini配置文件的[mysqld]选项下增加:

slow_query_log=TRUE

slow_query_log_file=c:/slow_query_log.txt

long_query_time=3

慢查日志所包含的内容

1、执行SQL的主机信息

10ae9feb0ec71b7e2ec4d772f56317f6.png

2、SQL的执行信息

3bd47e22f8e31551d4c8784507b1de39.png

3、SQL执行时间

5b3540d5135ea2428c3d7525c916e544.png

4、SQL的内容

f46d7e5e870ec019d9f94f4d96683915.png

慢查日志的分析工具

1、mysqldumpslow

mysqldumpslow [opts] [logs]

logs -具体的慢查日志

opts  -t  分析的条数  -s排列方式

结果:

75c0227582c8a1d4b524d98cec274b0b.png

2、pt-query-digest

pt-query-digest  [opts] [logs]

还可以定义慢查询结果输出到文件:

76e974ea6d6c82ec037ece53374ce932.png

输出查询结果到数据库表:

61891bb5edd03dde233edad2cf21f75f.png

通过慢查日志发现有问题的SQL

1、查询次数多且每次查询占用时间长的SQL

通常为pt-query-digest分析的前几个查询

2、IO大的SQL

注意pt-query-digest分析中的Rows examine项数值大的

3、未命中索引的SQL

注意pt-query-digest分析中的Rows examine 和Rows send的对比

使用explain查询SQL的执行计划

281535862f0ae0cfb25ec3f891406825.png

0fe6108499854de6738f8b3d53ac8aa2.png

5e773c16c2b68ae435ac849faacc91ce.png

常见的SQL优化

1、Max()的优化

例如:

0a0e24615591dd39de91df90e0e06981.png

为max()字段添加索引

0ddfe0e5f21f6660f580c3b030992040.png

45ee61c9084e0b598e356f97edf15bec.png

只查询索引,不用查询表,应为索引是有序的与数据量无关,大大加快了查询速度

2、Count()

count(*)时会包含为null的值,count(XX)不包含xx为null时的值

3、子查询的优化

通常情况下需要把子查询优化为join查询,在优化时需要注意关联键是否有一对多的关系,要注意重复数据

4、limit

limit常用于分页处理,时常会伴随order by使用,因此大多时候会使用Filesorts造成大量的IO问题,通常使用有索引的列或者主键进行order by操作来解决

选择合适的列建立索引

在where从句,group by从句,order by从句,on从句出现的列建立索引、索引字段越小越好、离散度大(具体就是字段数值相差越大离散度就越大)的列放到联合索引的前面

索引的维护和优化

1、重复索引、冗余索引

相同的列以相同的顺序建立的同类型的索引

913f1220269f181dd625fa5b529a8814.png

多个索引的前缀列相同,或是在联合索引中包含了主键的索引

80dd0b9bd5ddd3e5e6b4e3ff196d7a19.png

主键索引会自动添加上

2、优化方式

使用pt-duplicate-key-checker工具检查重复及冗余索引

eede0afef37f57a8bfb5c2bf25d173a4.png

结果:

b4f9e2be2303565e5760dbe35bb00de6.png

查找未使用的索引:

a8806c7340d647ff8eec11d7dca48230.png

数据库表结构优化

选择合适的数据类型

38db0888d69a7f2c989d6453ab8d35a6.png

例如:

8a6f4199a09abc3910d468b779a1070b.png

3653848123985f89490ae763cd68bf2b.png

表的范式化设计

范式化一般是指第三设计范式,也就是要求数据表中不存在非关键字段对任意候选关键字段的传递函数依赖则符合第三范式

表的反范式化

为了查询效率的考虑把原本符合第三范式的表适当的增加冗余,已达到优化查询效率的额目的,反范式化是一种以空间来换时间的操作

表的垂直拆分

25fb1cea04efc2857c28361286d1e0d3.png

表的水平拆分

为了解决单表的数据量过大查询效率低的问题,水平拆分表的每一个表的结构都是完全一致的

缺点:跨分区表进行数据查询、统计及后台报表的操作

系统配置优化

操作系统的配置优化

1、

bbc59cb1353309cae59374d40d1df1e0.png

2、

e56f462d2c234d3885af23465b786625.png

MySQL配置优化

1、MySQL配置文件位置

61e2c821137ae4738cba12c2d97264b4.png

2、重要参数

99f7c26c5ede5bdd02363bc608259471.png

6c11f317d1476c3050911693fcd9de66.png

e260ef01be1316911375dca4e12c0f41.png

d3a2de5f8971c71eaa8c7c85c7d66066.png

212dd93aa3e4003c77ed8cdaaa83824d.png

3、第三方配置工具

如果不清楚具体如何配置,可以通过第三方配置工具快捷帮你配置

https://tools.percona.com/wizard

硬件优化

2d73a3722068458804cceac564bab81c.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值