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

Tento jednoduchý kód způsobí uváznutí. Jednoduchý ukázkový program v ceně

Vaše dva příkazy získávají zámky řádků v různém pořadí. To je klasický případ zablokování. Můžete to opravit tím, že zajistíte, aby pořadí přijatých zámků bylo vždy v nějakém globálním pořadí (například seřazeno podle ID). Pravděpodobně byste měli spojit dva UPDATE příkazy do jednoho a seřadit seznam ID na klientovi před jeho odesláním na SQL Server. Pro mnohé typické UPDATE plánů to ve skutečnosti funguje dobře (není však zaručeno).

Nebo přidáte logiku opakování pro případ, že zjistíte uváznutí (SqlException.Number == 1205 ). To je elegantnější, protože nevyžaduje žádné hlubší změny kódu. Ale zablokování má vliv na výkon, takže to dělejte pouze při nízké míře uváznutí.

Pokud vaše paralelní zpracování generuje mnoho aktualizací, můžete INSERT všechny tyto aktualizace do dočasné tabulky (které lze provést souběžně) a po dokončení provedete jednu velkou UPDATE který zkopíruje všechny jednotlivé aktualizační záznamy do hlavní tabulky. Stačí změnit zdroj spojení ve svých ukázkových dotazech.



  1. SQL:Jak mohu získat hodnotu atributu v datovém typu XML?

  2. příkaz UPDATE pro opětovné přiřazení hodnoty sloupce podle číselného vzorce

  3. Oracle uděluje oprávnění ke spuštění

  4. Jak změnit pořadí sloupců v tabulce pomocí dotazu SQL na serveru SQL Server 2005?