由于this问题,我要使用 dtrace要找出从属 SQL 线程对临时表执行的操作,请遵循 this指导。
这是我的脚本:
#!/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
但得到了相同的结果。
我哪里做错了?
最佳答案
我没有安装 MySQL 来寻找你,但是 dtrace
的 -l
选项会告诉你有哪些可用的探测,你应该能够弄清楚你做错了什么。
$ dtrace -ln 'pid$target::*Slave_open_temp_tables*:return' -p `pgrep -x mysqld`
或者尝试使用不太具体的名称,例如 *open_temp_tables*
或 *tables*
甚至 *
以获得更广泛的集合结果...可能是因为MySQL源代码的变化,该函数不再存在于你的目标进程中。
此外,我假设您已经检查了 pgrep -x mysqld
的输出以确保它是一个有效的输入 pid?
关于mysql - dtrace: 编译脚本探测描述失败 pid29441::*Slave_open_temp_tables*:return 不匹配任何探测器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17466784/