孝感的网站建设,做gif表情包网站,重庆市招标投标综合网,哪些网站是做色选机销售的在上篇文章我们学习了MySQL进阶——存储引擎#xff0c;这篇文章学习MySQL进阶——SQL性能分析。
SQL性能分析主要是从SQL语句执行频率、耗时时间、CPU使用情况和执行时表连接情况进行分析#xff0c;常用的方法工具有#xff1a;SQL执行频率、慢查询日志、profile详情和ex…在上篇文章我们学习了MySQL进阶——存储引擎这篇文章学习MySQL进阶——SQL性能分析。
SQL性能分析主要是从SQL语句执行频率、耗时时间、CPU使用情况和执行时表连接情况进行分析常用的方法工具有SQL执行频率、慢查询日志、profile详情和explain执行计划。
SQL执行频率
通过show [session|global] status命令可以提供服务器状态信息通过如下命令可以查看当前数据库的增删改查的访问频率
SHOW GLOBAL STATUS LIKE Com_______;其中一个‘_’表示一个字符。
运行结果如下 慢查询日志
通过SQL执行频率我们可以发现增数据的SQL语句执行频率更多但无法知道哪条SQL语句执行情况。
慢查询日志记录了所有执行时间超过指定参数long_query_time单位秒默认10秒的所有SQL语句的日志。
执行如下命令查看是否开启慢查询日志
show variables like slow_query_log;如下图所示 配置文件开启
默认情况下MySQL的慢查询日志是关闭的我们可以在MySQL的配置文件/etc/my.cnf添加如下命令开启慢查询日志
slow_query_log1 # 开启慢查询日志
long_query_time2 # 设置慢查询日志的时间为2秒SQL语句执行超过2秒就视为慢查询记录慢查询日志如下图所示 注意如果是在docker安装的mysql需要先执行如下命令进入MySQL容器内部再在MySQL配置文件中添加开启慢查询日志代码。
docker exec -it 容器ID /bin/bash在/etc/my.cnf文件添加如下图代码 配置完成后需要重启MySQL服务器。
查看慢查询日志开启如下图所示 SQL命令开启
当然我们也可以通过在mysql中执行如下命令开启慢查询日志
set global slow_query_log ON;
set global slow_launch_time 3;
show variables like slow%;如下图所示 注意这种开启方式不是永久开启慢查询日志只要MySQL重启了慢查询日志就会关闭。
示例
当我们执行了SQL语句而操作时长超过2秒就会记录慢查询这里我们执行了删除UserTable表操作大概用了10秒慢日志如下图所示 在日志中我们可以看到执行日期、时长、用户、IP、数据库和SQL语句等相关信息。
profile详情
在慢查询日志中我们只能获取超过设置的时间SQL语句信息例如设置的时长为2秒那么只能获取超过2秒的SQL语句信息执行了1.99秒的SQL语句无法获取这时我们就可以使用profie详情。
profiles详情能够在做SQL优化时帮助我们了解时间都耗费到哪里去了。
首先通过have_profiling参数查看当前MySQL是否支持profile操作
SELECT have_profiling;如下图所示 接着执行如下代码查看profile是否开启
SELECT profiling; # 查看是否开启
SET profiling1; # 开启profile如下图所示 接下来我们就可以使用show profiles命令查看SQL语句详情的执行时间了如下图所示 这样我们就可以查看每条SQL语句的耗时情况我们可以通过上面的Query_ID详细地查看SQL语句各阶段的耗时情况、CPU使用情况可以执行如下代码
# show profile for query Query_ID; # 查看SQL语句各阶段的耗时情况
# show profile cpu for query Query_ID; # 查看SQL语句CPU使用情况如下图所示 explain执行计划
在上面的SQL性能分析中我们只能获取到SQL语句的频率和耗时时间无法知道SQL语句的执行过程中的表连接情况这时我们可以通过explain或desc命令来查看SQL语句的执行过程中的表连接情况其使用方法如下
explain/desc SQL语句;如下图所示 其中 IDselect查询的序列号表示查询中执行select子句或者操作表的顺序ID相同执行顺序从上到下ID不同值越大越先执行 select_typeSELECT的类型常见的取值有SIMPLE(简单表即不使用表连接或者子查询)、PRIMARY(主查询即外层的查询)、UNION(UNION 中的第二个或者后面的查询语句)、SUBOUERY(SELECT/WHERE之后包含了子查询) type连接类型性能由好到差的类型为NULL、system、const、eq_ref、range、index、all possible_keys可能用到的索引一个或多个 key实际使用的索引如果为NULL则没有使用索引 Key_len表示索引中使用的字节数该值为索引字段最大可能长度并非实际使用长度在不损失精确性的前提下长度越短越好 rowsMySQL认为必要执行查询的行数在innodb引擎的表中是一个估计值可能并不总是准确的 filtered返回结果的行数占需读取行数的百分比filtered的值越大越好
好了SQL性能分析就讲到这里了。
公众号白巧克力LIN
该公众号发布Python、数据库、Linux、Flask、Django、自动化测试、Git、算法、前端、服务器等相关文章
- END -