Spec-Zone .ru
спецификации, руководства, описания, API

5.7.1.11. Зонды Филезорта

Зонды filesort инициированы всякий раз, когда filesort работа применяется к таблице. Для получения дополнительной информации по filesort и условиям, при которых это происходит, см. Раздел 8.13.13,"ORDER BY Оптимизация".

filesort-start(database, table)filesort-done(status, rows)

Пример этого находится в следующем сценарии, который отслеживает продолжительность процесса filesort в дополнение к продолжительности основного запроса:

#!/usr/sbin/dtrace -s#pragma D option quietdtrace:::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 пункт, который инициировал filesort, и затем создание индексирования на таблице и затем повторения того же самого запроса, можно видеть различие в скорости выполнения:

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