您现在的位置是:主页 > news > 二手表网站/百度快照优化
二手表网站/百度快照优化
admin2025/5/12 16:20:58【news】
简介二手表网站,百度快照优化,一级a做美国片免费网站,深圳有什么做招聘网站的公司吗本文包括:查询正在进行中的慢查询show processlist查看慢查询日志slow_query_log查询正在进行中的慢查询show processlist:输入:show processlist;因为正在进行中的请求全部都被记录在information_schema系统库中的processlist表中࿰…

本文包括:
- 查询正在进行中的慢查询show processlist
- 查看慢查询日志slow_query_log
查询正在进行中的慢查询show processlist:
输入:
show processlist;
因为正在进行中的请求全部都被记录在information_schema系统库中的processlist表中,请求结束后将删除processlist表中的相应记录。
因此采用select语句也可以查询到相同的正在进行的请求记录:
select * from information_schema.processlist;
输出结果为:

查看该表的字段。
ID:这个表的主键。
USER:用户。
HOST:端口。
DB:正在对哪个数据库进行动作。
COMMAND:正在执行的命令,对于数据分析师来说,一般这里显示的就是Query,即正在执行一个SQL查询语句。
TIME:已执行时间,通过这里我们可以看到正在执行的语句是否是一个慢查询。MySQL慢查询的判定方法是请求进行时间超过10秒,当然也可以自行定义(具体查看下一节slow_query_log)。
STATE:执行状态,这里分享一个大佬总结好的可能状态:https://yq.aliyun.com/articles/530197
INFO:正在执行的SQL语句。
通过show processlist,root用户可以查看所有用户正在进行的SQL中是否有慢查询存在,除了 root 用户以外,在工作中作为一个互联网民工,如果没有获得process权限的情况下,都只能看到自己正在运行的线程。
如果查询过慢,想要停止,可以通过'kill + ID;'停止该线程。
查看慢查询日志slow_query_log:
因为当查询结束,processlist表中相应的记录将被删除,此时便不能通过show processlist查看已经结束的查询,需要换一个方法。
我们可以通过慢查询日志定位那些执行效率较低的SQL语句,同样因为慢查询日志只在查询结束后才进行记录,因此不能通过这个方法查看正在进行的请求。
慢查询日志的路径可以通过以下语句来查看:
show variables like 'slow_query_log%';
输出结果为:

其中slow_query_log_file就是慢查询日志的存储位置。
但我们发现还有一行为slow_query_log且它的值是OFF,这说明慢查询日志功能目前处于关闭状态,想要打开该功能,可以通过以下语句设置全局参数:
Set global slow_query_log = 1;
但还没有结束,上一节讲到MySQL默认超过10秒的查询才是慢查询,才会被记录在日志之中,但是我们自己在家里练习,很少有这么大的数据量让我们测试慢查询日志的功能,因此这里提供两个解决方法。
第一, 输入:
Show variables like 'long_query%';
输出结果为:

可以看到long_query_time的默认值为10秒。
此时再输入:
Set global long_query_time = 0.01;
表示将long_query_time的值设置为0.01秒,即超过10毫秒的查询将被记录为慢查询。
除此之外,我们还可以输入:
Show variables like 'log_queries_not_using%';
输出结果为:

这个参数表示对于没有使用索引的查询不记录进入慢查询日志。对于不会建立索引的同学可以采用:
set global log_queries_not_using_indexes = 1;
来开启该功能。
也可以根据自己的实际情况,为表中的某一列建立索引:
Create index 索引名 on 表名(列名);
这个语句的意思是针对特定表的特定列建立一个索引,索引也需要取一个名字,方便以后查看,更新和删除。
第二个方法是可以使用sleep函数。
输入:
Select sleep(11);
来进行一次持续11秒的慢查询,对MySQL的慢查询日志功能进行测试。
从slow_query_log_file对应的路径找到文件,打开日志后我们发现已经产生了一条新的记录:
TCP Port: 3306, Named Pipe: MySQL
# Time: 2020-08-25T09:46:55.967541Z
# User@Host: root[root] @ localhost [127.0.0.1] Id: 14
# Query_time: 11.001751 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 1
SET timestamp=1598348804;
select sleep(11);
其中Time表示查询结束时间。
Query_time表示查询持续时间。
Lock_time表示锁表时间。锁表简单来讲就是为了防止一张表同时被多人操作的情况,表锁上后仅能让锁表的人进行操作。锁机制可以展开说很多,这里仅提供一个简单概念。
Rows_sent表示返回几行记录。
Rows_examined表示查询检查的行数,越长就当然越费时间。
最后一行就是查询的SQL语句。
在MySQL中可以使用其自带的慢查询日志工具:mysqldumpslow。
具体的使用方法可以在这篇大佬的博文中查看:https://developer.aliyun.com/article/603174
欢迎关注专栏:
数据分析学习历程全记录zhuanlan.zhihu.com
其它MySQL文章:
舟晓南:MySQL优化查询1:索引及其使用技巧 | 数据分析学习历程全记录
舟晓南:MySQL优化查询3:explain和show profiles | 数据分析学习历程全记录
舟晓南:MySQL的执行逻辑和表的结构 | 数据分析学习历程全记录
舟晓南:转行数据分析师如何开始学习SQL | 工科生三个月转行数据分析学习心得
其他关于数据分析的文章
舟晓南:如何转行和学习数据分析 | 工科生三个月成功转行数据分析心得浅谈
舟晓南:求职数据分析师岗位,简历应该如何写?|工科生三个月成功转行数据分析心得浅谈
需要SQL学习资料可私信~
数据分析学习社群正式启动~
在这里会分享各种数据分析相关资源,技能学习技巧和经验等等~
详情私信,一起进步吧!
写于成都
2020-8-26