mysql性能剖析与优化1

SunShine / 2023-05-13 / 原文

学习目标:

  • 了解mysql的索引和什么是慢查询
  • 掌握如何配置mysql的my.cnf文件
  • 观测都市商城的数据库性能,找到性能不足的语句
  • Jmeter的jdcb协议
select count(*) from sq_orderform;
select ID from sq_orderform;
-- id主键自带唯一性索引   0.58s
select * from sq_orderform;
--会查询所有的列,速度最慢    8s  

select addTime from sq_orderform;    4s

select ID from sq_orderform where id=32768;
有where条件速度相当更快

1683969352793

和主键都是有索引的,相对没有索引的字段搜索起来更快

有where条件的比没有的搜索更快

查询的列更少的比查询多列的更快

匹配搜索的比准确搜索的更慢

mysql table locks 临时性锁表(绿色) 等待式锁表(黄色)

查询是可以异步的(多人一起进行查询) 增删改只能一个人来操作,事务在进行增删改时mysql会临时性锁表,等这个操作完成或回滚后,才能继续运行,所以临时性的锁表是正常的

慢查询

超过一定时间,用户无论容忍,

看项目在做业务时,看mysql slow queries是否出现很慢的情况,高的峰值代表查询时间较长,需要去优化

top看cpu的时候,最大是400,使用其他的看最大是100

1683976093724

多久算慢查询,去mysql的my.cnf文件去配置定义

配置my.cnf


vim /etc/my.cnf,如果服务器上没有这个文件,新建一个(有的mysql版本没有这个文件)
log_output=table,file  选择记录慢查询的方式,table表示记录在某张表,file表示记录在文件
slow_query_log=1    是否打开慢查询日志,1打开,0关闭
slow_query_log_file=/var/log/slow_log   记录慢查询的日志的位置
long_query_time=1   慢查询的阈值,单位为秒     超过这个值就算慢查询
log_queries_not_using_indexes=1   是否记录未使用索引的情况,0代表不记录,1代表记录
max_connections=512     最大连接数,有默认值.线程连接数,项目经理和数据架构师工程师来定
配置完成之后,重启mysql
service mysqld restart  有的linux用的是service mysql restart,有的是systemctl restart mysqld





看有哪些数据是慢查询

-- date(start_time)慢查询的发生时间 select * from mysql.slow_log where date(start_time)='2022-05-13' order by start_time desc;