Re: Locks: Sicheres hochzählen in multiuserumgebung




Hallo MIke,

mike schrieb:
ist bei update User1 set counter=(select counterfrom User1 where ID=4)+1
where ID=4

wie schon geschrieben, wäre diese Anweisung anders besser geschrieben.

nicht die gefahr, dass wenn zwei aufrüfe gleichzeitig kommen, beide denselben wert zunächst auslesen aus der table (da zunächst noch ein shared lock ist), und dann beide hintereinander auf denselben wert updaten (da ja dann exclusive lock), und der zähler dann nur um 1 erhöht wurde, anstatt um 2 ?

Schau Dir das mal genauer via Profiler an.
Bei obiger Syntax wird bereits zu Beginn ein "U"pdate Lock gesetzt,
was jeden weiteren schreibende Zugriff durch andere blockiert.

> Oder wartet der zweite user mit dem select bis das update des 1. users
> fertig ist ?

Würde ein zweiter eine äquivalente Anweisung (quasi) gleichzeitig
ausführen, müsste er schon deswegen warten, bis der Rest der Anweisung
abgeschlossen ist.

Nur "umständlicher" läuft das ganze ab. Es werden in dem Falle sieben
Sperren benötigt, im Gegensatz zu dreien bei der "normalen" Aktualisierung.

> wirkliche gleichzeitigkeit kann es ja nciht geben oder ?

Nein nicht wirklich - auch wenn mehrere CPU/Cores das gleiche genau
zur gleichen Zeit tun könn(t)en.
Und dafür existieren die Sperren, denn sie verhindern den überschneidenden
Zugriff auf eine Ressource. Und damit das einigermaßen effizient geschieht,
existieren die unterschiedlichen Sperrtypen.

Und deswegen spricht man von einer atomaren Einheit ("A" in "ACID"),
auch wenn es sich in der Ausführung faktisch um mehrere Schritte handelt.

Gruß Elmar
.



Relevant Pages

  • RE: lock cells based on interior color
    ... corresponding row to lock) and the second column is Q7:Q37 (if its value ... "Mike H" wrote: ... format and lock the cells based on that. ...
    (microsoft.public.excel.misc)
  • Re: Emergency stop with ABS - when to depress clutch?
    ... Mike G wrote: ... "That assumes that, in the absence of ABS, you'd *always* lock the ... always lock the wheels by doing this. ...
    (uk.rec.driving)
  • Re: How to prevent locks?
    ... Then you're probably best of with a "logical lock". ... When User1 accesses a record, ... Then when User1 leaves the record, you delete the tblLocks record. ...
    (microsoft.public.access.forms)
  • Re: How to prevent locks?
    ... Then you're probably best of with a "logical lock". ... When User1 accesses a record, ... Then when User1 leaves the record, you delete the tblLocks record. ...
    (microsoft.public.access.forms)
  • Re: Disable a computer from locking out
    ... you can turn off the Lock Workstation as a policy. ... "Mike D" wrote: ...
    (microsoft.public.windowsxp.general)