La respuesta es cuando la solicitud se pone en cola, pero eso no es necesariamente cierto cuando se realiza la solicitud, ya que la solicitud se pone en cola una vez establecida la rosca para la mesa si no hay uno.
Desde el mysql 5.1 dev docs:
El hilo ejecuta la instrucción INSERT , pero en lugar de escribir la fila a la mesa, se coloca una copia del la última fila en una cola que es gestionado por el hilo del controlador. Los errores de sintaxis se notan mediante el subproceso y se informan al programa del cliente.
El orden de los acontecimientos cuando la instrucción se ejecuta retraso:
- un hilo manejador de la tabla se crea si no lo es ya
- los cheques o Manejador de espera para obtener una
DELAYED
bloquear
- el controlador ejecuta el
INSERT
y poner la última fila en una cola
- , cuando en realidad se inserta la fila, el registro binario se actualiza
- el manejador escribe
delayed_insert_limit
filas a la vez y ejecuta cualquier pendientes SELECTS
entre escrituras
- cuando la cola está vacía, el bloqueo
DELAYED
se libera
Dependiendo de si un hilo tiene que ser creado o no y cómo es necesario verificar u obtener un bloqueo DELAYED
, el tiempo entre la ejecución del enunciado (paso 0) y la ejecución del enunciado (paso 3) variará. Luego, dependiendo de qué tan grande es la cola (particularmente si es más de delayed_insert_limit
filas), y si ocurre algún SELECTS
pendiente, la escritura se retrasará por un período de tiempo impredecible.
Creo que tienes razón (pero no estoy seguro). Porque, si el subproceso * ejecuta * la sentencia para * informar * los errores de sintaxis, si los hay, probablemente también "expanda" CURRENT_TIMESTAMP a la marca de tiempo real. –