Forum » Programiranje » [MariaDB] Dva "tipa" DELETA-anja v transakcijah in zmanjšanje možnosti za mrtvi zaklep.
[MariaDB] Dva "tipa" DELETA-anja v transakcijah in zmanjšanje možnosti za mrtvi zaklep.
HotBurek ::
Dobro jutro, fantje in dekline.
Evo, nov dan, nov izzv.
V prejšnem mesecu (natančneje včeraj zvečer) sem v dnevniških zapisih zasledil sledeč zapis:
MySQLdb._exceptions.OperationalError: (1213, 'Deadlock found when trying to get lock; try restarting transaction')
Odločil sem se, da bom na klientu implementiral "retry few times on fail". Vsaj tako bi naj bila sugerirala dokumentacija.
... MySQL documentation suggest that in case of a deadlock the client should retry automatically. you can add this logic to your client code. (Say, 3 retries on this particular error before giving up).
Vir: https://stackoverflow.com/questions/233...
A ta isti vir navaja nekaj drugega, kar me dejansko zanima.
Ali je res, da če imamo transakcijo, v kateri brišemo podatke (ukaz DELETE), in bi radi zmanjšal pojavnost mrtvega zaklepa, da je bolje izbrati opcijo B napram opciji A. In če, zakaj?
Opcija A:
Opcija B
Sicer pa sta na zgoraj omenjenem viru dva komentarja, ki sta si malo da ne nasprotujča:
A delete based on a select on a huge table is very slower than a simple delete
Thanks you so much, dude. The 'sort statements' tip fixed my dead lock issues.
V vednost. V mojem primeru brišem nekaj 10 vrstic.
Evo, nov dan, nov izzv.
V prejšnem mesecu (natančneje včeraj zvečer) sem v dnevniških zapisih zasledil sledeč zapis:
MySQLdb._exceptions.OperationalError: (1213, 'Deadlock found when trying to get lock; try restarting transaction')
Odločil sem se, da bom na klientu implementiral "retry few times on fail". Vsaj tako bi naj bila sugerirala dokumentacija.
... MySQL documentation suggest that in case of a deadlock the client should retry automatically. you can add this logic to your client code. (Say, 3 retries on this particular error before giving up).
Vir: https://stackoverflow.com/questions/233...
A ta isti vir navaja nekaj drugega, kar me dejansko zanima.
Ali je res, da če imamo transakcijo, v kateri brišemo podatke (ukaz DELETE), in bi radi zmanjšal pojavnost mrtvega zaklepa, da je bolje izbrati opcijo B napram opciji A. In če, zakaj?
Opcija A:
DELETE FROM `tabela` WHERE `country` = 'xk';
Opcija B
DELETE FROM `tabela` WHERE `id` IN ( SELECT `id` FROM `tabela` WHERE `country` = 'xk' ORDER BY `id` ASC );
Sicer pa sta na zgoraj omenjenem viru dva komentarja, ki sta si malo da ne nasprotujča:
A delete based on a select on a huge table is very slower than a simple delete
Thanks you so much, dude. The 'sort statements' tip fixed my dead lock issues.
V vednost. V mojem primeru brišem nekaj 10 vrstic.
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
- spremenilo: HotBurek ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [baze podatkov] - Kako začeti?Oddelek: Programiranje | 3086 (2073) | pegasus |
» | sqlOddelek: Programiranje | 1014 (719) | Miha 333 |
» | SQL vprasanje (strani: 1 2 )Oddelek: Programiranje | 8369 (5048) | BivšiUser2 |
» | problem v C#Oddelek: Programiranje | 1970 (1685) | dvojka |
» | Izvorna koda mojega par dnevnega dela; ce jo malo pokomentirate :) (strani: 1 2 )Oddelek: Programiranje | 6447 (4792) | Microsoft |