Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


5.4.1.13 ネットワークプローブ

ネットワークプローブは、MySQL Server およびすべてのタイプのクライアントからのネットワーク経由での情報の転送をモニターします。プローブは次のように定義されます。

net-read-start()
net-read-done(status, bytes)
net-write-start(bytes)
net-write-done(status)
  • net-read-start: ネットワーク読み取り操作が開始されたときにトリガーされます。

  • net-read-done: ネットワーク読み取り操作が完了したときにトリガーされます。status は操作の戻りステータスを表す integer で、成功した場合は 0、失敗した場合は 1 です。bytes 引数は、プロセス中に読み取られたバイト数を指定する整数です。

  • net-start-bytes: データがネットワークソケットに書き込まれたときにトリガーされます。単一の引数 bytes は、ネットワークソケットに書き込まれるバイト数を指定します。

  • net-write-done: ネットワーク書き込み操作が完了したときにトリガーされます。単一の引数 status は操作の戻りステータスを表す整数で、成功した場合は 0 で、失敗した場合は 1 です。

ネットワークプローブを使用して、実行中にネットワーククライアントからの読み取りおよびネットワーククライアントへの書き込みに費やした時間をモニターすることができます。次の 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));
}

リモートクライアントを持つマシン上で前述のスクリプトを実行すると、クエリーの実行にかかる時間の約 3 分の 1 が、クライアントに戻すクエリー結果を書き込むことに関連していることが理解できます。

St Who                            DB            ConnID       Dur microsec Query
 0 root@::ffff:192.168.0.108      test              31               3495 select * from t1 limit 1000000
Net read: 0 bytes (0 ms) write: 10000075 bytes (1220 ms)

User Comments
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.