1

由于这个问题,我将按照指南使用dtrace找出从属 SQL 线程对临时表的操作。

这是我的脚本:

#!/usr/sbin/dtrace -s

#pragma D option quiet
dtrace:::BEGIN
{
    printf("Tracing... Hit Ctrl-C to end.\n");
}

pid$target::*mysql_parse*:entry
{
    self->query = copyinstr(arg1);
}

pid$target::*Slave_open_temp_tables*:return
{
    @query[self->query] = count();
}

这就是我运行时得到的:

# ./Slave_open_temp_tables.d -p `pgrep -x mysqld`
proc-stub:rd_event_enable
proc-stub:rd_errstr err=26
dtrace: failed to compile script ./Slave_open_temp_tables.d: line 14: probe description pid29441::*Slave_open_temp_tables*:return does not match any probes
User defined signal 1

我也尝试过,create_myisam_tmp_table但得到了相同的结果。

我哪里做错了?

4

1 回答 1

0

我没有安装 MySQL 来寻找你,但-l选项dtrace会告诉你可用的探针,你应该能够从中找出你做错了什么。

$ dtrace -ln 'pid$target::*Slave_open_temp_tables*:return' -p `pgrep -x mysqld`

或者尝试使用不太具体的名称,例如*open_temp_tables**tables**至获得更广泛的结果集......这可能是由于 MySQL 源代码的更改,该函数不再存在于您的目标进程中。

另外,我假设您已经检查了 的输出pgrep -x mysqld以确保它是有效的输入 pid?

于 2013-07-15T23:13:32.490 回答