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

InnoDB række niveau låse ydeevne - hvor mange rækker?

Det er ikke helt klart, hvad du spørger om. Låsning sikrer, at kun én bruger forsøger at ændre en given række på et givet tidspunkt. Låsning på rækkeniveau betyder, at kun den ene række, de ændrer, er låst. De sædvanlige alternativer er enten at låse hele tabellen i ændringens varighed, eller også at låse en delmængde af tabellen. Låsning på rækkeniveau reducerer simpelthen denne delmængde af rækkerne til det mindste antal, der stadig sikrer integritet.

Ideen er at give én bruger mulighed for at ændre én ting uden at forhindre andre brugere i at ændre andre ting. Det er dog værd at bemærke, at dette i nogle tilfælde kan være noget af en falsk positiv, så at sige. Nogle få databaser understøtter låsning på rækkeniveau, men gør en lås på rækkeniveau betydeligt dyrere end at låse en større del af bordet -- nok dyrere til at det kan virke kontraproduktivt.

Edit:Din redigering af det originale indlæg hjælper, men ikke rigtig meget. Først og fremmest har størrelserne af rækker og niveauer af involveret hardware en enorm effekt (at indsætte en 8-byte række på et dusin stribede 15K SAS-harddiske er kun en tand hurtigere end at indsætte en én megabyte række på en enkelt forbrugerklasse harddisk ).

For det andet handler det i høj grad om antallet af samtidige brugere, så indsættelsesmønstret gør en stor forskel. 1000 rækker indsat kl. 03.00 vil sandsynligvis ikke blive bemærket overhovedet. 1000 rækker indsat jævnt i løbet af dagen betyder lidt mere (men nok kun en smule). 1000 rækker indsat som en batch, lige når 100 andre brugere har brug for data med det samme, kan få nogen fyret (især hvis en af ​​disse 100 er ejeren af ​​virksomheden).



  1. SQLSTATE[HY000] [1045] Adgang nægtet for brugeren 'brugernavn'@'localhost' ved hjælp af CakePHP

  2. Send array til MySQL-lagret rutine

  3. PHP strtotime() fungerer forkert med 1 time?

  4. Løbende summer for flere kategorier i MySQL