Re: Locks: Sicheres hochzählen in multiuserumgebung
- From: Elmar Boye <ElmarB@xxxxxxx>
- Date: Tue, 25 Nov 2008 15:18:29 +0100
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
.
- Follow-Ups:
- Re: Locks: Sicheres hochzählen in multiuserumgebung
- From: Christoph Ingenhaag
- Re: Locks: Sicheres hochzählen in multiuserumgebung
- References:
- Locks: Sicheres hochzählen in multiuserumgebung
- From: mike
- Re: Locks: Sicheres hochzählen in multiuserumgebung
- From: Henry Habermacher
- Re: Locks: Sicheres hochzählen in multiuserumgebung
- From: Elmar Boye
- Re: Locks: Sicheres hochzählen in multiuserumgebung
- From: mike
- Locks: Sicheres hochzählen in multiuserumgebung
- Prev by Date: Re: Fehler SQLVDI trotz Hotfix
- Next by Date: Re: Fehlermeldung bei Datensicherung
- Previous by thread: Re: Locks: Sicheres hochzählen in multiuserumgebung
- Next by thread: Re: Locks: Sicheres hochzählen in multiuserumgebung
- Index(es):
Relevant Pages
|