sql >> Databáze >  >> RDS >> Mysql

MySQL Deadlock s vložkou, která vyvolává spoušť

Vlákno 2 obsahuje sdílený zámek na řádku v tabulce uživatelů.

Potom se vlákno 1 pokusí získat exkluzivní zámek na stejném řádku a přejde do čekání na zámek.

Ale vlákno 1 nebude mít příležitost vypršet, protože vlákno 2 se poté pokusí eskalovat svůj zámek na exkluzivní... ale aby to udělal, musí počkat na vlákno 1, které je v zámku čeká, ale čeká na vlákno 2.

Každý blokuje druhého.

To je zablokování.

Server vybere transakci, kterou má zabít, aby se vzájemně zbytečně neblokovali.

Detekce zablokování umožňuje jednomu vláknu okamžitě uspět na úkor druhého. Jinak by oba uvízli v zámku a počkali, dokud jeden z nich nezemře z příliš dlouhého čekání.

Jste v režimu automatického potvrzení, ale to samozřejmě neznamená, že nejste v transakci. Každý dotaz s InnoDB je stále zpracováván v transakci, ale s automatickým potvrzením je transakce implicitně spuštěna, když se dotaz začne provádět, a implicitně potvrzena, když uspěje.



  1. Klasické ASP + Motobit Pure ASP Upload + UTF-8 znaková sada

  2. Procedura Oracle nevrací výsledky při provádění úlohy skriptu na SSIS

  3. Základní správa MaxScale pomocí MaxCtrl pro MariaDB Cluster

  4. Jak zjistím, zda je můj stůl MyISAM nebo Innodb