学习目标:
- 了解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条件速度相当更快
和主键都是有索引的,相对没有索引的字段搜索起来更快
有where条件的比没有的搜索更快
查询的列更少的比查询多列的更快
匹配搜索的比准确搜索的更慢
mysql table locks 临时性锁表(绿色) 等待式锁表(黄色)
查询是可以异步的(多人一起进行查询) 增删改只能一个人来操作,事务在进行增删改时mysql会临时性锁表,等这个操作完成或回滚后,才能继续运行,所以临时性的锁表是正常的
慢查询
超过一定时间,用户无论容忍,
看项目在做业务时,看mysql slow queries是否出现很慢的情况,高的峰值代表查询时间较长,需要去优化
top看cpu的时候,最大是400,使用其他的看最大是100
多久算慢查询,去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;