Spec-Zone .ru
спецификации, руководства, описания, API
|
Зонды filesort инициированы всякий раз, когда filesort работа применяется к таблице. Для получения
дополнительной информации по filesort и условиям, при которых это происходит, см. Раздел
8.13.13,"ORDER BY
Оптимизация".
filesort-start(database, table)filesort-done(status, rows)
filesort-start
: Инициированный, когда filesort работа
запускается на таблице. Эти два параметра зонду, database
и table
, идентифицирует сортируемую таблицу.
filesort-done
: Инициированный, когда filesort работа
завершается. Два параметра предоставляются, status
(0 для успеха, 1 для
отказа), и число строк сортируется во время процесса filesort.
Пример этого находится в следующем сценарии, который отслеживает продолжительность процесса 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