5.8.1.3 查询探针
当服务器接收到特定查询并且查询已完成并且信息已成功发送到 Client 端时,将触发query-start
和query-done
探针。
query-start(query, connectionid, database, user, host)
query-done(status)
-
query-start
:从 Client 端收到查询字符串后触发。参数为: -
query
:提交的查询的全文。-
connectionid
:提交查询的 Client 端的连接 ID。连接 ID 等于 Client 端首次连接时返回的连接 ID 和SHOW PROCESSLIST的输出中的Id
值。 -
database
:要在其上执行查询的数据库名称。 -
user
:用于连接服务器的用户名。 -
host
:Client 端的主机名。
-
-
query-done
:一旦执行查询并将信息返回给 Client 端,就会触发。该探针包括单个参数status
,当成功执行查询时返回_2,如果发生错误则返回 1.
您可以使用以下 D 脚本获取每个查询的执行时间的简单报告:
#!/usr/sbin/dtrace -s
#pragma D option quiet
dtrace:::BEGIN
{
printf("%-20s %-20s %-40s %-9s\n", "Who", "Database", "Query", "Time(ms)");
}
mysql*:::query-start
{
self->query = copyinstr(arg0);
self->connid = arg1;
self->db = copyinstr(arg2);
self->who = strjoin(copyinstr(arg3),strjoin("@",copyinstr(arg4)));
self->querystart = timestamp;
}
mysql*:::query-done
{
printf("%-20s %-20s %-40s %-9d\n",self->who,self->db,self->query,
(timestamp - self->querystart) / 1000000);
}
在执行上述脚本时,您应该对查询的执行时间有基本的了解:
shell> ./query.d
Who Database Query Time(ms)
root@localhost test select * from t1 order by i limit 10 0
root@localhost test set global query_cache_size=0 0
root@localhost test select * from t1 order by i limit 10 776
root@localhost test select * from t1 order by i limit 10 773
root@localhost test select * from t1 order by i desc limit 10 795