今天让我们了解下 MySQL 性能分析大杀器 —— Show Profile 和全局查询日志。这也是 MySQL 性能分析大杀器系列的最后一章。
Show Profile (可以看到每一条 sql 执行的生命周期)
是 mysql 提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于 sql 的调优的测量。
默认情况下,参数处于关闭状态,并保存最近 15 次的运行结果。
-
查看是否已经开启
# 查看是否已经开启
show VARIABLES like 'profiling';
# 如果没有开启的话,则开启
set profiling = on;
-
运行各种查询语句 -
使用以下命令,即可看到以上的查询语句
show profiles;
-
诊断 sql
show profile cpu,block io for query 1;(上一步问题 sql 前面的数字号码)
show profile 的可用参数为:
-
all :显示所有的开销信息 -
block io :显示块 io 相关开销 -
context switches :上下文切换相关开销 -
cpu :显示 cpu 相关开销信息 -
ipc :显示发送和接收相关开销信息 -
memory :显示内存相关开销信息 -
page faults :显示页面错误相关开销信息 -
source :显示和 Source_function,Source_file,Source_line 相关的开销信息 -
swaps :显示交换次数相关开销的信息
日常开发需要注意项
-
converting HEAP to MyISAM 查询结果太大,内存都不够用了往磁盘上搬了。 -
Creating tmp table 创建临时表。(拷贝数据到临时表,用完再删除) -
Copying to tmp table on disk 把内存中临时表复制到磁盘,危险! -
locked 锁表了
全局查询日志
永远不要在生产环境中开启这个功能!
-
在配置文件中开启
在 mysql 的 my.cnf 中,设置如下:
# 开启
general_log = 1
# 记录日志文件的路径
general_log_file = /path/logfile
# 输出格式
log_output = FILE
-
直接执行 sql 语句开启
# 开启
set global general_log=1;
# 用表格的方式记录查询日志
set global log_output = 'TABLE';
# 此后,你所编写的 sql 语句,将会记录到 mysql 库里的 general_log 表
select * from mysql.general_log;
最后说个事
公号算法变了,为防止看不到我的更新
大家帮忙加个星标
点击上方的公众号卡片
再点右上角三个点
就能看到设为星标
算我跪下来求你们
作者简介:
95后某跨境电商企业程序猿,白天搬砖码代码,晚上自媒体写文章,持续更新编程、科技、互联网相关文章,偶尔也会无痛呻吟,感慨人生百态。自己淋过雨,所以也想为别人撑撑伞。
往期精选:
原文始发于微信公众号(浅墨觅尘往):MySQL 性能分析大杀器(第四章)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/222099.html