sql >> Database teknologi >  >> RDS >> Mysql

Parallelle transaktioner i mysql

Det hele afhænger af ISOLATION LEVEL du har indstillet.

Du kan se, hvilken du har indstillet med denne forespørgsel:

select @@global.tx_isolation, @@session.tx_isolation;
 

Før jeg forklarer de forskellige isolationsniveauer, lad mig forklare, hvilke problemer de forsøger at undgå:

  • Den beskidte læsning :Data for en endnu ikke afsluttet transaktion læses af en anden transaktion.

  • Den tabte opdatering :To transaktioner ændrer en post i en tabel parallelt. Når begge transaktioner er afsluttet, anvendes kun én ændring.

  • Den ikke-gentagelige læsning :Gentagende læsninger fører til forskellige resultater.

  • Phantom read :Under en transaktion tilføjer eller fjerner en anden transaktion tabelposter.

Nu til de forskellige isolationsniveauer.

Læs ikke-forpligtet :
Med dette isolationsniveau ignorerer læseoperationer enhver form for låse, derfor kan alle de ovennævnte problemer opstå.

Læs forpligtet :
Dette isolationsniveau sætter en skrivelås for hele transaktionen på objekter, der skal ændres. Læselåse er kun indstillet ved læsning af data. Derfor kan ikke-gentagelig læsning og fantomlæsning forekomme.

Gentagelig læsning :
Med dette isolationsniveau er det sikret, at gentagende læseoperationer altid giver det samme resultat, når parametrene er de samme. Låse er indstillet til læse- og skriveoperationer i hele transaktionens varighed. Derfor kan kun fantomlæsninger forekomme.

Serialiserbar :
Det højeste isolationsniveau garanterer, at resultatet af parallelt kørende transaktioner er det samme, som hvis transaktionerne ville køre en efter en. De fleste databaser kører ikke rigtig disse transaktioner efter hinanden, det ville være for meget af et ydeevnetab. Derfor kan det ske, at en transaktion bliver afbrudt. MySQL indser for eksempel dette med MVCC (Multi-Version Concurrency Control). Google det, hvis du vil vide mere. Det er for meget for dette svar.

Alt i alt forklarer denne tabel det også:

| Lost updates | Dirty Read | Non-Repeatable Read | Phantom Read --------------------------------------------------------------------------------- Read Uncommitted | possible | possible | possible | possible Read Committed | impossible | impossible | possible | possible Repeatable Read | impossible | impossible | impossible | possible Serializable | impossible | impossible | impossible | impossible
  • I denne manuelle post er noget mere info om det og hvordan man indstiller isolationsniveauet.

Alt dette er kun teori for relationelle databasestyringssystemer. Da MySQL bruger MVCC (multi version concurrency control), forekommer fantomlæsninger dog ikke ved brug af InnoDB og gentageligt læseisolationsniveau .
Fra manual :




  1. IBM Worklight - Hvordan får man OUT-parameteren, når man kalder en lagret procedure?

  2. Undgå Database Vendor Lock-In til MySQL eller MariaDB

  3. Top PG Clustering High Availability Solutions til PostgreSQL

  4. MySQL afkorter tekst med ellipse