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


5.4.1.7 行レベルプローブ

*row-{start,done} プローブは、行操作がストレージエンジンにプッシュダウンされるたびトリガーされます。たとえば、100 行のデータについて INSERT ステートメントを実行するとき、それぞれの行挿入に対して insert-row-start および insert-row-done プローブがどちらも 100 回トリガーされます。

insert-row-start(database, table)
insert-row-done(status)

update-row-start(database, table)
update-row-done(status)

delete-row-start(database, table)
delete-row-done(status)
  • insert-row-start: 行がテーブルに挿入される前にトリガーされます。

  • insert-row-done: 行がテーブルに挿入されたあとにトリガーされます。

  • update-row-start: 行がテーブル内で更新される前にトリガーされます。

  • update-row-done: 行がテーブル内で更新される前にトリガーされます。

  • delete-row-start: 行がテーブルから削除される前にトリガーされます。

  • delete-row-done: 行がテーブルから削除される前にトリガーされます。

プローブによってサポートされる引数は、それぞれの場合で対応する start および done プローブと一貫性があります。

  • database: データベース名。

  • table: テーブル名。

  • status: ステータスで、正常なら 0、失敗なら 1。

行レベルのプローブは個々の行アクセスごとにトリガーされるため、これらのプローブは毎秒数千回トリガーされる可能性があり、モニタリングスクリプトおよび MySQL の両方に有害な影響を及ぼす場合があります。DTrace 環境ではパフォーマンスへの悪影響を防ぐために、これらのプローブのトリガーを制限するようにしてください。プローブの使用を控えるようにするか、これらのプローブをレポートするためのカウンタ関数または集計関数を使用し、スクリプトが終了したときか、query-done または query-exec-done プローブの一部としてサマリーを提供するようにしてください。

次のスクリプト例は、大規模なクエリー内でのそれぞれの行操作の期間を要約します。

#!/usr/sbin/dtrace -s

#pragma D option quiet

dtrace:::BEGIN
{
   printf("%-2s %-10s %-10s %9s %9s %-s \n",
          "St", "Who", "DB", "ConnID", "Dur ms", "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->rowdur = 0;
}

mysql*:::query-done
{
   this->elapsed = (timestamp - self->querystart) /1000000;
   printf("%2d %-10s %-10s %9d %9d %s\n",
          arg0, self->who, self->db,
          self->connid, this->elapsed, self->query);
}

mysql*:::query-done
/ self->rowdur /
{
   printf("%34s %9d %s\n", "", (self->rowdur/1000000), "-> Row ops");
}

mysql*:::insert-row-start
{
   self->rowstart = timestamp;
}

mysql*:::delete-row-start
{
   self->rowstart = timestamp;
}

mysql*:::update-row-start
{
   self->rowstart = timestamp;
}

mysql*:::insert-row-done
{
   self->rowdur += (timestamp-self->rowstart);
}

mysql*:::delete-row-done
{
   self->rowdur += (timestamp-self->rowstart);
}

mysql*:::update-row-done
{
   self->rowdur += (timestamp-self->rowstart);
}

データをテーブルに挿入するクエリーと一緒に前述のスクリプトを実行すると、生の行挿入を実行するのに費やした正確な時間をモニターすることができます。

St Who        DB            ConnID    Dur ms Query
 0 @localhost test              13     20767 insert into t1(select * from t2)
                                        4827 -> Row ops

User Comments
Sign Up Login You must be logged in to post a comment.