2010-12-10 12 views
9

Tengo una tabla con un campo :: ts TIMESTAMP DEFAULT CURRENT_TIMESTAMPMySQL inserción de marca de tiempo retardado

Mi pregunta es, si uso inserción retardada en esta tabla, será la marca de tiempo será el momento en que la solicitud se pone en cola o en el momento en que la Insertar en realidad está hecho?

Respuesta

6

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:

  1. un hilo manejador de la tabla se crea si no lo es ya
  2. los cheques o Manejador de espera para obtener una DELAYED bloquear
  3. el controlador ejecuta el INSERT y poner la última fila en una cola
  4. , cuando en realidad se inserta la fila, el registro binario se actualiza
  5. el manejador escribe delayed_insert_limit filas a la vez y ejecuta cualquier pendientes SELECTS entre escrituras
  6. 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.

+0

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. –

0

Se debe tomar el tiempo de la inserción real

1

Sin importar si INSERT DELAYED se utiliza, o si la tabla está bloqueada debido a otro hilo o actualización o lo que sea, el valor ts que se es igual al tiempo de la INSERT se emitió.

+0

¿Quiere decir el INSERT "ficticio" creado por el hilo del manejador o el INSERT que realmente se hace en la base de datos? –

+0

Cuando el comando fue emitido por el hilo del cliente. – Riedsio

Cuestiones relacionadas