Senior
Worker pracuje dlho (2 minúty), transakcia zostáva v databáze pri páde — čo robiť?
sobes.tech AI
Odpoveď od AI
Ak pracovník pracuje dlho (okolo 2 minúty) a pri páde zostáva transakcia v databáze, znamená to, že transakcia nebola správne ukončená (commit/rollback), a databáza drží zámky.
Čo robiť:
- Použite kontext s časovým limitom v Go na obmedzenie doby trvania transakcie. Napríklad:
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
err := db.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
// operácie
return nil
})
-
Riešte chyby a zabezpečte rollback pri zlyhaní.
-
Skontrolujte logy databázy na zaseknuté transakcie a v prípade potreby ich manuálne ukončite.
-
Zvážte použitie heartbeat alebo health check mechanizmu pre pracovníka, aby pri páde boli úlohy automaticky reštartované.
-
Optimalizujte prácu pracovníka, aby transakcie nezostávali dlho — možno rozdeľte úlohu na menšie časti.
Je dôležité sledovať dobu života transakcií a správne ich ukončiť, aby sa predišlo blokovaniu a zaseknutým stavom.