如何清除MySQL查询配置文件

16
在 MySQL 中开启分析后。
  SET profiling=1;

我可以像运行查询一样运行SELECT NOW();,并通过以下方式查看其执行时间的个人资料结果:

  SHOW PROFILES;

然而,我不知道如何清空配置文件列表。 有人知道删除旧配置文件数据的语句吗?SET profiling=0; 只会禁用新数据的记录,不会删除旧统计数据。

4个回答

26
为了删除先前的查询配置文件,请设置@@profiling_history_size=0。以下代码片段清除配置文件,将历史记录设置为最大尺寸并启用配置文件记录。
SET @@profiling = 0;
SET @@profiling_history_size = 0;
SET @@profiling_history_size = 100; 
SET @@profiling = 1;

测试于5.6.17


1
这样做会删除之前的查询,但不会重置自增ID。我不想在调试中不断更新查询ID,但我没有(也不想)权限发出ALTER TABLE PROFILING AUTO_INCREMENT=1;命令 - 是否有其他方法可以重置它?谢谢(我尝试设置profiling_history_size=1,但没有效果)。 - scipilot
在MySQL编辑器中,您可以停止执行查询。这似乎会重置分析和自动增量! - Bee157

5
为了完整起见:关闭当前与服务器的连接并重新连接会重置分析计数。

3

性能分析信息存储在 information_schema.profiling 临时表中,如 http://dev.mysql.com/doc/refman/5.0/en/profiling-table.html 中所述。

在具有所需访问级别的数据库用户下,您可以清空存储在该表中的信息(如果引擎允许):

TRUNCATE TABLE information_schema.PROFILING;

否则,您可以重启MySQL服务器,因为 information_schema 只存储在内存中,所以性能分析信息在服务重启后不会保留。


1
这很有道理。然而,使用根帐户并将其设置为我认为拥有所有权限的100%时,我会收到以下消息:Access denied for user 'root'@'localhost' to database 'information_schema'。您知道是什么控制了这个权限吗? - Ray
您可以重新启动mysqld,表将被重新创建。information_schema仅存储在内存中,由视图组成,服务重启后不会保留分析信息。 - Panagiotis Moustafellos
2
是的,重启起作用了,但这不是首选方法——特别是在实际机器或其他开发人员正在使用的机器上。信息模式中的表是否为只读表? - Ray

1

我发现在MySQL 8中,这个解决方案对我不起作用。

然而,稍加调整就可以了。

SET @@profiling = 1;
SET @@profiling_history_size = 0;
SET @@profiling = 0;
SET @@profiling_history_size = 1000; 

为了方便起见,我只需创建一个存储过程,这样我就可以轻松运行它。

CALL clearProfilingHistory();

要创建它,只需运行

CREATE PROCEDURE `clearProfilingHistory`()
BEGIN
    SET @@profiling = 1;
    SET @@profiling_history_size = 0;
    SET @@profiling = 0;
    SET @@profiling_history_size = 1000; 
END;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接