Sobes.tech
Senior

Tööline töötab kaua (2 minutit), tehing jääb andmebaasi, kui süsteem kukub — mida teha?

sobes.tech AI

Vastus AI-lt

Kui töötaja töötab pikka aega (umbes 2 minutit) ja langemise korral jääb tehing andmebaasi, tähendab see, et tehing ei lõpetatud korrektselt (commit/rollback), ning andmebaas hoiab lukke.

Mida teha:

  1. Kasuta konteksti koos ajapiiranguga Go-s, et piirata tehingu täitmise aega. Näiteks:
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()

err := db.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
    // operatsioonid
    return nil
})
  1. Haldage vigu ja tagage rollback ebaõnnestumise korral.

  2. Kontrollige andmebaasi logisid ummikus olevate tehingute jaoks ning lõpetage need käsitsi, kui vaja.

  3. Kaaluge heartbeat või tervise kontrolli mehhanismi kasutamist töötaja jaoks, et langemise korral ülesanded automaatselt taaskäivituksid.

  4. Optimeerige töötaja tööd, et tehingud ei kestaks liiga kaua — võib-olla jagada ülesanne väiksemateks osadeks.

Oluline on jälgida tehingute eluea pikkust ja neid õigesti lõpetada, et vältida lukke ja seiskunud olekuid.