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*または、より広範な結果を得るためにor*tables*またはなどの具体的でない名前を使用してみてください*... MySQL のソース コードの変更により、関数がターゲット プロセスに存在しなくなった可能性があります。

また、出力をチェックしてpgrep -x mysqld、有効な入力pidであることを確認したと思いますか?

于 2013-07-15T23:13:32.490 に答える