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.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
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.