sql >> Databasteknik >  >> RDS >> Sqlserver

Deadlock-pussel:Offret äger ingen resurs, används för att döda för att lösa dödläget

I samband med låsning är tabeller och deras relaterade index separata enheter. Ibland sker dödlåsning mellan en tabell och dess index, snarare än mellan två separata tabeller.

Problemet är mest troligt när ett lås hämtas på ett index och sedan ett annat lås erhålls på den relaterade tabellen (d.v.s. stapeln) för att göra datasökningen. Under insättningen kommer detta att ske i motsatt ordning. Först låses tabellen (d.v.s. stapeln) och uppdateras, sedan låses indexen.

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

Har du/kan du lägga till ett täckande index (för att hjälpa till med valet) som innehåller både SomeId och foo ? På så sätt undviker du uppslagningen helt och hållet och stoppar problemet från att uppstå.

Kan du lägga upp frågeplanerna istället för låsta ramar?



  1. Sorterar SQL efter två första tecken i fält

  2. pqxx::result::tuple har inte deklarerats (PostgreSQL-bibliotek för c++)

  3. SQL - Fråga för att få serverns IP-adress

  4. Hur ansluter du till en Postgres-databas utan lösenord med hjälp av pg-promise?