5.8.1.13 网络探针
网络探针监视通过网络从 MySQL 服务器和所有类型的 Client 端进行的信息传输。探针的定义如下:
net-read-start()
net-read-done(status, bytes)
net-write-start(bytes)
net-write-done(status)
-
net-read-start
:开始网络读取操作时触发。 -
net-read-done
:网络读取操作完成时触发。status
是 table 示操作返回状态的integer
,0
table 示成功,1
table 示失败。bytes
参数是一个整数,指定在处理期间读取的字节数。 -
net-start-bytes
:将数据写入网络套接字时触发。单个参数bytes
指定写入网络套接字的字节数。 -
net-write-done
:当网络写操作完成时触发。单个参数status
是一个整数,代 table 操作的返回状态,0
table 示成功,1
table 示失败。
您可以使用网络探针来监视执行期间从网络 Client 端读取和写入网络 Client 端所花费的时间。以下 D 脚本提供了一个示例。计算读取或写入的累积时间以及字节数。请注意,动态变量的大小已增加(使用dynvarsize
选项),以应对网络读取/写入的各个探测器的快速触发。
#!/usr/sbin/dtrace -s
#pragma D option quiet
#pragma D option dynvarsize=4m
dtrace:::BEGIN
{
printf("%-2s %-30s %-10s %9s %18s %-s \n",
"St", "Who", "DB", "ConnID", "Dur microsec", "Query");
}
mysql*:::query-start
{
self->query = copyinstr(arg0);
self->who = strjoin(copyinstr(arg3),strjoin("@",copyinstr(arg4)));
self->db = copyinstr(arg2);
self->connid = arg1;
self->querystart = timestamp;
self->netwrite = 0;
self->netwritecum = 0;
self->netwritebase = 0;
self->netread = 0;
self->netreadcum = 0;
self->netreadbase = 0;
}
mysql*:::net-write-start
{
self->netwrite += arg0;
self->netwritebase = timestamp;
}
mysql*:::net-write-done
{
self->netwritecum += (timestamp - self->netwritebase);
self->netwritebase = 0;
}
mysql*:::net-read-start
{
self->netreadbase = timestamp;
}
mysql*:::net-read-done
{
self->netread += arg1;
self->netreadcum += (timestamp - self->netreadbase);
self->netreadbase = 0;
}
mysql*:::query-done
{
this->elapsed = (timestamp - self->querystart) /1000000;
printf("%2d %-30s %-10s %9d %18d %s\n",
arg0, self->who, self->db,
self->connid, this->elapsed, self->query);
printf("Net read: %d bytes (%d ms) write: %d bytes (%d ms)\n",
self->netread, (self->netreadcum/1000000),
self->netwrite, (self->netwritecum/1000000));
}
在具有远程 Client 端的计算机上执行上述脚本时,您可以看到执行查询所花费的时间中大约有三分之一与将查询结果写回到 Client 端有关。
St Who DB ConnID Dur microsec Query
0 root@::ffff:198.51.100.108 test 31 3495 select * from t1 limit 1000000
Net read: 0 bytes (0 ms) write: 10000075 bytes (1220 ms)