生猛干货
带你搞定MySQL实战,轻松对应海量业务处理及高并发需求,从容应对大场面试
官方文档
如果英文不好的话,可以参考 searchdoc 翻译的中文版本
http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/index.com.coder114.cn.html
使用慢查询获取慢SQL
慢查询的相关参数
slow_query_log 是否开启了慢查询
默认关闭
mysql> show variables like 'slow_query_log'; +----------------+-------+ | Variable_name | Value | +----------------+-------+ | slow_query_log | OFF | +----------------+-------+ 1 row in set (0.00 sec) mysql>
因为记录慢查询比较占用磁盘空间,可以通过脚本关闭慢查询,比如一个小时以后关闭慢查询等等。
开启慢查询
开启的话,可以通过 set global 来动态修改。
mysql> set global slow_query_log=on; # 开启慢查询 Query OK, 0 rows affected (0.04 sec) mysql> show variables like 'slow_query_log'; +----------------+-------+ | Variable_name | Value | +----------------+-------+ | slow_query_log | ON | +----------------+-------+ 1 row in set (0.01 sec) mysql>
slow_query_log_file 指定慢查询日志的存储路径及文件
默认存储在MySQL的数据目录中,建议日志文件和数据文件分开存储。
mysql> show variables like 'slow_query_log_file'; +---------------------+---------------------------------+ | Variable_name | Value | +---------------------+---------------------------------+ | slow_query_log_file | /var/lib/mysql/artisan-slow.log | +---------------------+---------------------------------+ 1 row in set (0.01 sec)
long_query_time 指定记录慢查询日志SQL执行时间的阈值
单位为秒 。 默认10秒。
mysql> show variables like 'long_query_time'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+ 1 row in set (0.02 sec)
log_queries_not_using_indexes 是否记录未使用索引的SQL
mysql> show variables like 'log_queries_not_using_indexes'; +-------------------------------+-------+ | Variable_name | Value | +-------------------------------+-------+ | log_queries_not_using_indexes | OFF | +-------------------------------+-------+ 1 row in set (0.00 sec) mysql>
慢查询日志的分析工具
慢日志涨这个样子:
如何分析呢? 因为慢查询日志比较大,靠肉眼很难分析,所以需要依赖第三方工具
mysqldumpslow 官方
mysqldumpslow可以汇总除查询条件外其他完全相同的SQL,并将分析结果按照参数中所指定的顺序输出。
用法 :
mysqldumpslow -s r -t 10 slow-mysql.log
参数说明:
- -s order (c , t , l ,r , at ,al ,ar) 指定按照那种排序方式输出结果
c: 总次数
t: 总时间
l: 锁的时间
- r:种数据行
at 、 al、ar : t l r 平均数, 比如 at = 总时间/总次数 - -t top 指定取前几条作为结果输出。
pt-query-digest
第三方的工具,
用法如下:
pt-query-digest \ --explain h=ip.1,u=用户,p=密码\ slow-mysql.log
这个工具生成的慢查询分析日志 更详细。 建议用这个
主从架构下, 建议在从节点执行 。
实时获取
查询 information_schema.processlist
SELECT id, `USER`, `HOST`, db, COMMAND, TIME, state, INFO FROM information_schema.`PROCESSLIST` a WHERE a.TIME > 60
搞定MySQL
https://artisan.blog.csdn.net/article/details/104147745?spm=1001.2014.3001.5502