Portál AbcLinuxu, 12. května 2025 13:43

Dotaz: MySQL InnoDB - vysvětlení pár věcí k transakcím

15.12.2010 10:49 expl
MySQL InnoDB - vysvětlení pár věcí k transakcím
Přečteno: 643×
Odpovědět | Admin
Dobrý den. Přečetl jsem si pár článků k transakcím u databází a tak nějak chápu rozdíl mezi 4 úrovni izolace, které InnoDB nabízí. Co nechápu je ale jak je to implementované. Podle různých článků si db v transakci zamkne řádky s kterými pracuje, ale jak? Podle všeho se operace v transakci provádějí přímo a udržuje se pouze seznam kroků pro případ ROLLBACK tak jak si db ty řádky zamkne, jak ví které? A jak se vlastně řeší kolize v případě startu více transakcí nad stejnými daty naráz? Co jsem zkoušel tak jedna transakce čeká na dokončení předchozí ale jakým mechanismem se kolize detekuje? Děkuji.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Heron avatar 15.12.2010 10:59 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: MySQL InnoDB - vysvětlení pár věcí k transakcím
Odpovědět | | Sbalit | Link | Blokovat | Admin

Zkus si nastudovat pojem MVCC.

Heron
15.12.2010 11:28 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: MySQL InnoDB - vysvětlení pár věcí k transakcím
Zrovna InnoDB ale AFAIK nepoužívá MVCC/MGA ale klasické zámky a transakční log.
Heron avatar 15.12.2010 12:00 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: MySQL InnoDB - vysvětlení pár věcí k transakcím
Opravdu je to MVCC. I transakční log se používá běžně i pro MVCC (například WAL xlog v PostgreSQL).
15.12.2010 16:54 expl
Rozbalit Rozbalit vše Re: MySQL InnoDB - vysvětlení pár věcí k transakcím
No tam se píše aby transakce nemusela čekat, ale když jsem to zkoušel pod mysql a v jedné transakci jsem upravil nějaké řádky a ty samé v druhé, tak ta druhá čekala na commit první. A jak ví db které řádky si má zamknout jestliže provádí příkaz po příkazu dokud neproběhne commit nebo si ve skutečnosti "přečte" nebo spíš uloží příkazy a provede je až při commitu?
okbob avatar 15.12.2010 17:54 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
Rozbalit Rozbalit vše Re: MySQL InnoDB - vysvětlení pár věcí k transakcím
U klasické architektury jakýkoliv update blokuje select, kdežto u MVC update blokuje pouze update. Jakýkoliv update vytvoří kopii editovaného záznamu, který je viditelný pouze v té transakci, která změnu realizovala. Ostatní vidí původní verzi záznamu. Pokud se snažíte o update, tak se lehko zjistí, že existuje nepotvrzená verze záznamu, a tudíž se musí čekat.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.