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.11 ファイルソートプローブ

ファイルソートプローブは、ファイルソート操作がテーブルに適用されるたびにトリガーされます。ファイルソートとそれが発生する条件について詳しくは、セクション8.2.1.15「ORDER BY の最適化」を参照してください。

filesort-start(database, table)
filesort-done(status, rows)
  • filesort-start: テーブル上でファイルソート操作が開始したときにトリガーされます。プローブに対する 2 つの引数である database および table は、ソートされるテーブルを識別します。

  • filesort-done: ファイルソート操作が完了するとトリガーされます。2 つの引数が提供され、これらは、status (成功の場合は 0、失敗の場合は 1)、およびファイルソート処理中にソートされた行数です。

次のスクリプトはこの例を示すもので、メインクエリーの期間に加えてファイルソート処理の期間を追跡します。

#!/usr/sbin/dtrace -s

#pragma D option quiet

dtrace:::BEGIN
{
   printf("%-2s %-10s %-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->filesort = 0;
   self->fsdb = "";
   self->fstable = "";
}

mysql*:::filesort-start
{
  self->filesort = timestamp;
  self->fsdb = copyinstr(arg0);
  self->fstable = copyinstr(arg1);
}

mysql*:::filesort-done
{
   this->elapsed = (timestamp - self->filesort) /1000;
   printf("%2d %-10s %-10s %9d %18d Filesort on %s\n",
          arg0, self->who, self->fsdb,
          self->connid, this->elapsed, self->fstable);
}

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

ファイルソートをトリガーする ORDER BY 句を持つクエリーを大規模なテーブル上で実行し、次にテーブル上にインデックスを作成して同じクエリーを繰り返すことで、実行速度の違いを確認することができます。

St Who        DB            ConnID       Dur microsec Query
 0 @localhost test              14           11335469 Filesort on t1
 0 @localhost test              14           11335787 select * from t1 order by i limit 100
 0 @localhost test              14          466734378 create index t1a on t1 (i)
 0 @localhost test              14              26472 select * from t1 order by i limit 100

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.