sql >> Databáze >  >> RDS >> Oracle

spor o řádky Oracle způsobující chyby uváznutí v aplikaci JMS s vysokou propustností

Zablokování znamená, že každé vlákno se pokouší aktualizovat více řádků v jedné transakci a že tyto aktualizace jsou prováděny v různém pořadí napříč vlákny. Nejjednodušší možnou odpovědí by proto bylo upravit kód tak, aby zprávy v rámci stejné transakce byly aplikovány v určitém definovaném pořadí (tj. v pořadí primárního klíče). To by zajistilo, že se nikdy nedostanete do uváznutí, i když byste stále dostávali blokovací zámky, zatímco jedno vlákno čeká, až jiné vlákno potvrdí svou transakci.

Když uděláme krok zpět, zdá se nepravděpodobné, že byste skutečně chtěli, aby mnoho vláken aktualizovalo stejný řádek v tabulce, když nemůžete předvídat pořadí aktualizací. Zdá se vysoce pravděpodobné, že by to vedlo ke spoustě ztracených aktualizací a poněkud nepředvídatelnému chování. Co přesně vaše aplikace dělá, že by takové věci byly rozumné? Děláte něco jako aktualizaci agregovaných tabulek po vložení řádků do tabulky podrobností (tj. aktualizaci počtu zobrazení příspěvku kromě protokolování informací o konkrétním zobrazení)? Pokud ano, musí být tyto operace skutečně synchronní? Nebo byste mohli počet zhlédnutí pravidelně aktualizovat v jiném vlákně agregováním zhlédnutí za posledních N sekund?



  1. Výstup XML přes PHP a SQL

  2. Je možné uložit hodnotu jednoho vybraného sloupce a použít ji pro další?

  3. HttpWebRequest běží poprvé pomalu v SQLCLR

  4. Jak nakonfigurovat vlastní MySQL NHibernate Batcher?