9
votes

MySQL retardé l'horodatage d'insertion

J'ai une table avec un champ :: TS horodatage par défaut actuel_timettamp

Ma question est que si j'utilise une insertion retardée sur cette table, l'horodatage sera-t-il l'heure à laquelle la demande est mise en file d'attente ou lorsque l'insert est réellement effectué?


0 commentaires

3 Réponses :


0
votes

Il devrait prendre le temps de l'insert réel


0 commentaires

6
votes

La réponse est lorsque la demande est en file d'attente, mais ce n'est pas nécessairement juste lorsque la demande est faite, la demande de la demande après la mise en place du thread de la table s'il n'y en a pas déjà.

du MySQL 5.1 dev Docs : < / p>

Le fil exécute l'insert déclaration, mais au lieu d'écrire le rangée à la table, il met une copie de la dernière ligne dans une file d'attente qui est géré par le fil du gestionnaire. Tout Les erreurs de syntaxe sont remarquées par le fil et signalé au client programme.

L'ordre des événements lorsque l'instruction retardée exécute:

  1. Un fil de manutention pour la table est créé s'il n'y en a pas déjà
  2. Le gestionnaire vérifie ou attend d'obtenir un retardé verrou
  3. Le gestionnaire exécute le insert et mettez la ligne finale dans une file d'attente
  4. Lorsque la ligne est réellement insérée, le journal binaire est mis à jour
  5. le gestionnaire écrit retarded_insert_limit lignes à la fois et exécute tout Sélectionne entre écrit
  6. Lorsque la file d'attente est vide, le verrouillage retardé est relâché

    Selon si un fil doit être créé ou non et combien de temps il faut pour vérifier ou obtenir un verrou retardé , l'heure entre l'exécution de l'instruction (étape 0) et l'exécution de La déclaration (étape 3) variera. Ensuite, en fonction de la taille de la file d'attente (en particulier si elle est sur retarded_insert_limit lignes), et si tout autre sélectionne se produit, l'écriture sera retardée par une quantité de temps imprévisible .


1 commentaires

Je pense que vous avez raison (mais pas sûr). Parce que, si le fil exécute la déclaration sur Signaler des erreurs de syntaxe Syntaxe Situelle, elle "élargira probablement" actuelle_timestamp à l'horodatage réel.



1
votes

Peu importe si insérer le retardé est utilisé ou si la table est verrouillée en raison d'un autre thread ou de mise à jour, la valeur TS sera égale à l'heure de la insérer a été émis.


1 commentaires

Voulez-vous dire l'insert «factice» fabriqué par le fil du gestionnaire ou l'insert réellement effectué dans la base de données.