Ответ - когда запрос находится в очереди, но это не обязательно правильно, когда запрос сделан, поскольку запрос ставится в очередь после того, как поток для таблицы установлен, если его еще нет.
Сдокументация mysql 5.1 dev :
Поток выполняет инструкцию INSERT, но вместо записи строки в таблицу он помещает копию последней строки в очередь, котораяуправляется потоком обработчика.Любые синтаксические ошибки замечаются потоком и сообщаются клиентской программе.
Порядок событий при выполнении отложенного оператора:
- поток обработчика для таблицысоздается, если его еще нет
- , обработчик проверяет или ожидает получения
DELAYED
lock - , обработчик выполняет
INSERT
и помещает последнюю строку в очередь - когда строка фактически вставлена, двоичный журнал обновляется
- , обработчик записывает
delayed_insert_limit
строк за раз и выполняет все ожидающие SELECTS
между записями - когда очередьпусто, блокировка
DELAYED
снята
В зависимости от того, нужно ли создавать поток или нет, и сколько времени требуется, чтобы проверить или получить блокировку DELAYED
, время между выполнениемоператора (шаг 0) и выполнение оператора (шаг 3) будет отличаться.Затем, в зависимости от того, насколько велика очередь (особенно если она превышает delayed_insert_limit
строк), и от того, произойдет ли ожидание SELECTS
, запись будет отложена на некоторое непредсказуемое время.