sql >> Databáze >  >> RDS >> Sqlserver

Puzzle Deadlock :Oběť nevlastní žádný zdroj, který se používá k zabíjení k vyřešení patové situace

V kontextu zamykání jsou tabulky a jejich související indexy samostatné entity. Občas k mrtvému ​​uzamčení dochází mezi tabulkou a jejím indexem, spíše než mezi dvěma samostatnými tabulkami.

Problém je nejpravděpodobnější, když je získán zámek na indexu a poté je získán další zámek na související tabulce (tj. liště), aby se provedlo vyhledávání dat. Během vkládání se to stane v opačném pořadí. Nejprve je tabulka (tj. pruh) uzamčena a aktualizována, poté jsou uzamčeny indexy.

select foo 
from bar 
where @someId = 0 OR SomeId = @someId

Máte/můžete přidat krycí index (pro pomoc s výběrem), který obsahuje SomeId i foo ? Tímto způsobem se zcela vyhnete vyhledávání a zabráníte výskytu problému.

Můžete zveřejnit plány dotazů spíše než rámce uváznutí?



  1. Akce GitHubu:Jak se připojit k Postgres v akcích GitHubu

  2. Závažná chyba:Volání členské funkce query() na null

  3. Mysql vytvořit tabulku s více cizími klíči na delete set null

  4. Předávání pole ints do T-SQL uloženého procesu prostřednictvím entity framework