2

我们有一个 MySQL 慢查询杀手,它在经过指定的秒数后杀死进程 ID,并且工作正常。然而,我们希望在我们的通知中也能看到如此缓慢的完整查询。

问题是虽然mysqladmin -v processlist|grep process_id应该可以工作,但它会截断其中包含换行符的查询,例如:

SELECT * FROM table WHERE x=y {
  ... stuff
};

这里的东西将被切断,查询因此被截断。(我意识到这在语法上可能不正确,因为我不是 DBA,但我只是想举例说明我们有时必须在应用程序中处理的那种查询流程;请不要抱怨格式,这不是我的决定,也不在我的控制之下。)

我相信,做一个查询information_schema可以解决这个问题,但是团队不想这样做,因为对该数据库的查询经常涉及到性能影响。那么有没有比 grepping 更好的方法来解决这个问题mysqladmin

4

1 回答 1

2

我建议激活慢日志。它显示需要很长时间的语句,多长时间以及额外的详细信息。除非它在一个STORED PROCEDURE.

您首先需要激活慢日志,以防它还没有准备好。

要启用慢查询日志,请使用--log-slow-queries[=file_name]选项启动 mysqld 或更改配置文件中的值并重新启动服务,见下文。

如果启用了慢查询日志文件但未指定名称,则默认名称为 host_name-slow.log 并且服务器在创建 PID 文件的同一目录中创建文件。如果给定名称,则服务器在数据目录中创建文件,除非给定绝对路径名来指定不同的目录。

您可以将输出(可以读取数据的位置)设置为FILETABLE

更改您的 my.ini 文件并更改/添加它们

log-output = TABLE
slow-query-log=1
long_query_time = 10
log-queries-not-using-indexes

这将记录任何需要超过 10 秒才能完成的查询。加上任何不使用索引的查询。

如果你去,log-output=table那么你可以简单地执行

select * from mysql.slow_log

如果你去,log-output=file那么你必须打开 MySql 文件夹中的物理文件。

于 2013-11-12T13:23:16.120 回答