problèmes de concurrence de base de données

fonctionnement simultané apportera une série de problèmes

  1. Mise à jour perdue (mise à jour perdu)

    Lorsque deux ou plusieurs transactions choisissent la même ligne, puis adapté à la valeur initiale est mis à jour, car chaque transaction détournée connaît pas l'existence d'autres questions, le problème des mises à jour perdues peuvent se produire, dernière mise à jour couvert par d'autres entreprises faire la mise à jour

  2. lecture sale (Dirty lit)

    Une transaction est en cours pour modifier un enregistrement, avant que la transaction est terminée et soumis, les données sur ce disque dans un état incohérent, cette fois, une autre transaction a également lu la même base, sinon contrôlée, la deuxième transaction lire ces données « sales », et par conséquent pour un traitement ultérieur, il va créer la dépendance des données non validées, ce qui est appelé « lecture sale. »

  3. lecture non reproductible (non répétable lit)

    Une transaction à un certain temps de lire quelques-unes des données, lire les données de lecture antérieures à nouveau, mais a constaté que les données de lecture a changé, ou que certains enregistrements sont supprimés! ! Ceci est appelé lecture non reproductible

    (Ne se conforme pas à l'isolement)

  4. lecture magique

    Une transaction lit les mêmes données de requête EXTRACTION vu avant, mais a trouvé d' autres transactions d'insérer une nouvelle requête de données pour satisfaire ses conditions , un phénomène appelé « lecture fantôme » comme si encore il n'y a pas eu

     

    Réglage du niveau d'isolation des transactions mysql, mysql se verrouille automatiquement pour faire fonctionner les mêmes données en ligne

     

     

    Pour lecture répétée, en utilisant MySQL mécanisme de MVCC, le contrôle simultané de version multi, le mécanisme de contrôle d'accès concurrentiel multi-version

    opération de sélection ne sera pas à jour la version, chaque requête fera un instantané avec une version de l'instantané. Puis, après modification, ainsi que les versions données réelles et instantané sont incompatibles, mais afin de permettre la logique mysql précise, il mettra à jour la base de données lorsque les dernières données est mise à jour, lire et lire la version instantanée des données.

    produits de base survendu, qui est, pour cette raison.

     

    https://blog.csdn.net/huaishu/article/details/89924250

    Voici un aperçu du courant lu et lu la différence

    Les instantanés font des vitesses de lecture un peu. Donc, sélectionnez une autre mise à jour bug sur

    Précautions: sql devrait lire: mise à jour de la balance set compte = balance 50 où id = 1;

     

     

     

     

    Répétable lire les mots, sélectionnez pas version mise à jour est bonne, est une lecture instantané (historique des versions), et insérer, mettre à jour et supprimer une bonne version mise à jour, est la lecture en cours (la version actuelle)

    Ainsi , après la mise à jour re-ouvrir l'enquête pourrait avoir phénomène de lecture fantôme:

     

    session1: select * from compte;

    session2: insert en compte (nom, argent) valeurs ( 'ss', 100);

    session1: mise à jour nom de l' ensemble du compte = 'lyr' où id = 1;

    session1: select * from compte;

     

    Si session1: Ce tableau ne met pas à jour compte, va lire, lire fantôme problème ne se produit pas avec l'instantané

    Cependant: session1: mettre à jour le compte sous cette forme, il va changer la lecture en cours d'une lecture de l'instantané

    Et cette fois session2 insérer un nom = « ss », argent = données 100

    session1 look-up table, trouver à nouveau une raison comment est-ce que l'illusion de données (apparu fantomatique)

    Ceci est la lecture fantôme

     

    Dans le numéro de série, il n'y a aucun problème, mais ne devrait pas être, en raison de la faible efficacité

    MySQL avec lecture reproductible à la fois l'efficacité, autant que possible pour résoudre le problème de sale lit et les lectures non reproductibles

     

     

    Voir mysql informations récentes du journal de blocage:

    afficher l'état InnoDB moteur \ G

     

     

    optimisation mysql:

    1. Dans la mesure du possible, afin que toutes les données récupérées par l'indexation est terminée, afin d'éviter l'escalade de verrouillage de la ligne non-index à un verrou de table
    2. La conception rationnelle de l'indice, ce qui réduit la plage de verrouillage
    3. condition de recherche de récupération pour éviter la dépendance des lacunes
    4. Essayez de contrôler la taille de la transaction et la durée du temps de réduire la quantité de ressources verrouillées
    5. Le niveau le plus bas possible l'isolement des transactions

Cela peut résoudre le problème de la concurrence

  1. mise à jour compte mettre de l'argent = argent-1 où id = 'Llyr' et d'argent> 0;

 

MySQL peut verrouiller un espace, puis à longue portée mysql verrouillent automatiquement, il est généralement pas une lecture fantôme de problème

 

La condition est une gamme, mysql Enfermer

Cela permettra de résoudre le problème de la lecture fantôme

https://blog.csdn.net/spring_model/article/details/53992450

Il y a d'autres verrous, comme un verrou exclusif pour la mise à jour comme

 

mysql mise à jour de déclaration lorsque la transaction lorsque la serrure ouverte, après la sortie de COMMIT

Alors écrire un bon sql, généralement pas un problème.

 

 

Je suppose que tu aimes

Origine www.cnblogs.com/lyr-2000/p/12659437.html
conseillé
Classement