我在 stackoverflow 上问了这个问题,并被指示在这里问这个问题。
我有几个运行 MySQL 查询的 PHP 脚本。有时,它们会导致服务器卡住或被 MySQL 进程阻塞,这些进程需要一段时间,例如格式错误LEFT JOINs
等。
当我运行查询以查找有关已运行的所有当前 MySQL 查询的信息时,是否可以将查询 ID 解析为运行它的文件?
有一个查询一直在休眠 3973 没有关于这个查询的信息,所以我试图找到尽可能多的信息?
有三 (3) 种方法可以查找有关查询及其进程 ID 的信息
如果将以下行添加到 my.cnf 并重新启动 mysql
[mysqld]
general-log
general-log-file=/var/log/mysql_general.log
Run Code Online (Sandbox Code Playgroud)
您可以解析/var/log/mysql_general.log
文本文件。每个查询的标头应具有查询运行的进程 ID(线程 ID)
有一个名为 mysql.general_log 的表。默认情况下它是一个 CSV 文件。运行以下命令:
ALTER TABLE mysql.general_log ENGINE=MyISAM;
ALTER TABLE mysql.general_log ADD INDEX (event_time);
Run Code Online (Sandbox Code Playgroud)
然后将以下内容添加到 my.cnf
[mysqld]
general-log
log-output=FILE
Run Code Online (Sandbox Code Playgroud)
将一般日志条目存储为表行后,您可以随意对 MyISAM 运行 SELECTS,查询如下:
SELECT * FROM mysql.general_log
WHERE event_time >= (DATE(NOW())+INTERVAL 0 SECOND)
AND event_time <= NOW();
AND argument like '...';
Run Code Online (Sandbox Code Playgroud)
如果您想捕获长时间运行的查询,请执行以下操作(如果您有 MySQL 5.1):
SELECT id,info FROM information_schema.processlist
WHERE command = 'Query' AND user <> 'system user';
Run Code Online (Sandbox Code Playgroud)
这会显示当前正在运行的每个查询。您可以解析该info
列以查找您正在跟踪的任何查询
归档时间: |
|
查看次数: |
3318 次 |
最近记录: |