MySql常见性能查询、调优语句和慢sql

  •  MySql常见性能查询、调优语句
-- 查询慢查询次数
show status LIKE 'slow_queries';

-- 查看慢查询
show variables LIKE 'long_query_time';

-- --设置慢查询时间
setlong_query_time=1;

-- 开启慢日志
set GLOBAL_slow_query_log=ON;

-- 使用explain来分析sql语句实现优化
EXPLAIN 具体sql语句;

-- 查看当前服务器配置的最大连接数
show variables LIKE 'max_connection';

-- 查看当前已使用最大连接数
show GLOBAL status like '%max_used_connections%'

-- 设置最大连接数
set GLOBAL MAX_CONNECTIONS=10000;

-- 查询是否有锁
show OPEN TABLES where In_use > 0;

 

  • 慢sql的原因

 

1、查询的表--没加索引

查询的条件字段没有索引,导致全表扫描。这种在数据量比较少时,如低于十万级不会觉得慢,但当表中数据量达到或超过十万级时,就会体现出来,查询时间特别慢

2、查询的索引,无效

查询条件没有索引字段。

查询条件使用or,选择式过滤条件,导致索引无效

查询条件使用Like,且从头部开始模糊匹配,致索引无效

查询条件不满足复合索引的最左匹配原则,致索引无效

查询条件,索引列使用了隐藏类型转换,致索引无效

查询条件,索引列使用了算术运算+、- 、...致索引无效

查询条件,索引列使用了逻辑运算(!=、<>、is null、is not null)致索引无效

3、查询使用了--临时表

临时表可能不用,但是回表查询(一次查询不满足 就把这些结果存在临时表,还需要利用查询结果再查一次)

4、join或子查询太多

有些场景复杂,关联的表越多,时间自然就越长;一般关联不建议超过3个,且数据量小的表放左边,大的放右边。

5、查询结果数据量太大

第1种你直查的表数据量太大,千万级。即使那了索引,索引文件也会很大,深度很深,查询就会慢。解决方法分表分区。

第2种联表笛卡尔积量太大。解决方法explain进行sql分析优化

6、锁竞争

现在Mysql的表一般都是InnoDB存储引擎,该引擎是行锁,每次锁定一行。若一个事务在操作一行数据,会锁定该行数据,其它事务直到前一个事务操作完成才能操作该行数据;若多个事务等待时,前一事务结束,等待的事务就会竞争抢锁,sql性能就会很慢了

7、limit分页--太深

查询需要偏移一定量数据时,一般会用Limit,偏移量大时sql执行会很慢。因为偏移量会分页读取到buffpool中,数据量大,占用的空间大,而这个空间大小是配置的,一般不会很大,所以,导致了慢sql

8、配置参数--不合理

数据库中有些非常重要的参数,例多很带有buff、cache、size、length、max、min、limit等字样的配置参数。都是直接关系数据库性能的。若都是默认值,硬件条件再好性能也发挥不了作用。

9、频繁刷脏页

脏页,是内存数据页和磁盘数据页不一致。一般发数据更新操作中。更新数据,要先把数据读取出来然后再内存中更新,最后生成日志文件,再放日志文件,实现表数据更新。若数据量大,buffpool写满或者后续生成的日志文件 写满,都会导致这个操作过程变慢。

解决方法:建议少批量修改,多次提交

10、系统资源--不够用

数据库是用来存储数据,频繁进行磁盘操作,所以要选择磁盘IO性能比较好的机器作为数据库服务。

数据库还要经常进行数据交换,所以要有足够的内存。

mysql安装在操作系统中,所以也受操作系统限制

 

posted @ 2022-07-02 09:09  LCX测试小姐姐  阅读(203)  评论(0编辑  收藏  举报