1c ist auf verwaltete Sperren umgestiegen. Verwaltung von Transaktionssperren

Das 1C:Enterprise-System ermöglicht Ihnen die Verwendung von zwei Modi für die Arbeit mit der Datenbank: den Modus der automatischen Sperren in einer Transaktion und den Modus der kontrollierten Sperren in einer Transaktion.

Der grundlegende Unterschied zwischen diesen Modi ist wie folgt. Der automatische Sperrmodus erfordert vom Entwickler keine Maßnahmen zur Verwaltung von Sperren in einer Transaktion. Diese Regeln werden von der 1C:Enterprise-Systemplattform durch die Verwendung bestimmter Ebenen der Transaktionsisolation in einem bestimmten DBMS sichergestellt. Diese Betriebsart ist für den Entwickler am einfachsten, allerdings kann in manchen Fällen (z. B. bei intensiver gleichzeitiger Arbeit einer großen Anzahl von Benutzern) die im DBMS verwendete Transaktionsisolationsstufe keine ausreichende Parallelität gewährleisten, was sich in der Form einer Vielzahl von Sperrkonflikten bei der Arbeit von Benutzern.

Beim Betrieb im verwalteten Sperrmodus verwendet das 1C:Enterprise-System eine viel geringere Ebene der Transaktionsisolation im DBMS, was die Parallelität der Benutzer der Anwendungslösung erheblich erhöhen kann. Im Gegensatz zum automatischen Sperrmodus kann diese Stufe der Transaktionsisolation jedoch nicht mehr allein die Einhaltung aller Regeln für die Arbeit mit Daten in einer Transaktion gewährleisten. Daher ist der Entwickler beim Arbeiten im verwalteten Modus verpflichtet, die in der Transaktion gesetzten Sperren selbstständig zu verwalten.

Zusammenfassend sind die Unterschiede beim Arbeiten im automatischen Sperrmodus und im gesteuerten Sperrmodus in der folgenden Tabelle dargestellt:

Festlegen des Sperrmodus in der Konfiguration

Die Konfiguration verfügt über die Eigenschaft „Data Lock Control Mode“. Jedes Konfigurationsanwendungsobjekt verfügt außerdem über die Eigenschaft „Datensperren-Kontrollmodus“.
Der Steuermodus für die Datensperre für die gesamte Konfiguration kann auf „Automatisch“, „Verwaltet“ (Standardeinstellung für eine neue Konfiguration) oder „Automatisch und verwaltet“ eingestellt werden. Die Werte „Automatisch“ und „Verwaltet“ bedeuten, dass der entsprechende Blockierungsmodus für alle Konfigurationsobjekte verwendet wird, unabhängig von den für jedes Objekt festgelegten Werten. Der Wert „Automatisch und verwaltet“ bedeutet, dass für ein bestimmtes Konfigurationsobjekt der in seiner Eigenschaft „Datensperrungs-Kontrollmodus“ angegebene Modus verwendet wird: „Automatisch“ oder „Verwaltet“.
Es ist zu beachten, dass der für ein Metadatenobjekt angegebene Datensperrkontrollmodus für diejenigen Transaktionen festgelegt wird, die vom 1C:Enterprise-System bei der Arbeit mit den Daten dieses Objekts initiiert werden (z. B. beim Ändern der Objektdaten).
Wenn beispielsweise das Schreiben eines Objekts in einer vom Entwickler initiierten Transaktion (der Methode StartTransaction()) ausgeführt wird, wird der Steuermodus für die Datensperre durch den Wert des Parameters Locking Mode bestimmt
Methode StartTransaction() und nicht der Wert der Metadatenobjekteigenschaft Data Lock Control Mode.
Standardmäßig ist der Parameter „Blockierungsmodus“ auf „Datenblockierungs-Kontrollmodus“ eingestellt. Automatisch, also z
Um den verwalteten Sperrmodus in einer expliziten Transaktion zu verwenden, müssen Sie den Wert dieses Parameters angeben
Datensperre-Steuerungsmodus. Verwaltet.

Arbeiten mit verwalteten Sperren mithilfe der integrierten Sprache

Um Sperren in einer Transaktion zu verwalten, wird das integrierte Sprachobjekt DataLock verwendet. Eine Instanz dieses Objekts kann mit einem Konstruktor erstellt werden und ermöglicht die Beschreibung der erforderlichen Sperrräume und Sperrmodi. Um alle erstellten Sperren festzulegen, verwenden Sie die Lock()-Methode des DataLock-Objekts. Wenn diese Methode in einer Transaktion (explizit oder implizit) ausgeführt wird, werden Sperren erworben und automatisch freigegeben, wenn die Transaktion endet. Wenn die Lock()-Methode außerhalb einer Transaktion ausgeführt wird, werden keine Sperren erworben.

Es werden Bedingungen festgelegt, damit der Feldwert dem angegebenen Wert entspricht oder innerhalb des angegebenen Bereichs liegt.
Bedingungen können auf zwei Arten festgelegt werden:

  • durch explizite Angabe des Feldnamens und -werts (SetValue()-Methode des DataLockElement-Objekts);
  • durch Angabe einer Datenquelle, die die erforderlichen Werte enthält (DataSource-Eigenschaft des DataLockElement-Objekts).

Für jedes Sperrelement kann einer von zwei Sperrmodi eingestellt werden:

  • geteilt,
  • außergewöhnlich.

Die Kompatibilitätstabelle für verwaltete Sperren sieht folgendermaßen aus:

Der Shared-Locking-Modus bedeutet, dass gesperrte Daten bis zum Ende der aktuellen Transaktion nicht durch eine andere Transaktion geändert werden können.
Exklusive Sperrung bedeutet, dass gesperrte Daten bis zum Ende der aktuellen Transaktion nicht von einer anderen Transaktion geändert werden können und auch nicht von einer anderen Transaktion gelesen werden können, die eine gemeinsame Sperre für die Daten hält.

Merkmale des Betriebs im Modus „Automatisch und kontrolliert“.

Beim Arbeiten im automatischen und kontrollierten Blockiersteuerungsmodus sollten zwei Merkmale berücksichtigt werden:

Unabhängig vom für eine bestimmte Transaktion angegebenen Modus installiert das System den entsprechenden verwalteten Modus
Blockierung.
Der Sperrkontrollmodus wird durch die Transaktion auf höchster Ebene bestimmt. Mit anderen Worten: Wenn zum Zeitpunkt des Transaktionsstarts eine andere Transaktion gestartet wurde, kann die gestartete Transaktion nur in dem Modus ausgeführt werden, der für die bereits laufende Transaktion eingestellt ist.

Betrachten wir die aufgeführten Funktionen genauer.

Das erste Merkmal besteht darin, dass das System beim Schreiben von Daten in dieser Transaktion zusätzlich entsprechende verwaltete Sperren installiert, selbst wenn für eine Transaktion der automatische Sperrverwaltungsmodus verwendet wird. Daraus folgt, dass Transaktionen, die im verwalteten Sperrmodus ausgeführt werden, möglicherweise mit Transaktionen in Konflikt stehen, die im automatischen Sperrverwaltungsmodus ausgeführt werden.

Das zweite Merkmal besteht darin, dass der Sperrverwaltungsmodus, der für ein Metadatenobjekt in der Konfiguration angegeben oder explizit beim Starten einer Transaktion (als Parameter der StartTransaction()-Methode) angegeben wird, nur ein „gewünschter“ Modus ist. Der tatsächliche Sperrverwaltungsmodus, in dem die Transaktion ausgeführt wird, hängt davon ab, ob es sich um den ersten Aufruf zum Starten einer Transaktion handelt oder ob zu diesem Zeitpunkt bereits eine andere Transaktion in dieser Sitzung des 1C:Enterprise-Systems gestartet wurde.

Wenn Sie beispielsweise Sperren beim Schreiben von Registersätzen beim Buchen eines Dokuments verwalten müssen, muss der verwaltete Sperrmodus sowohl für das Register selbst als auch für das Dokument eingestellt werden, da das Schreiben von Registersätzen in der Transaktion durchgeführt wird beim Schreiben des Dokuments geöffnet.

Mechanismus Transaktionssperren Wird für den konkurrierenden Benutzerzugriff auf das DBMS verwendet.
Eine Transaktion ist eine Art kontinuierlicher Vorgang, bei dem sich der Zustand der Datenbank ändert. Dies ist das Mindestmaß an Veränderung: Sie können keine halbe Transaktion durchführen; Wenn die Transaktion nicht abgeschlossen wird, wird die Datenbank auf ihren ursprünglichen Zustand zurückgesetzt.
Da eine Transaktion ein Datenarray erfasst, gibt es beim Zugriff auf dieses Array eine Nuance: Beispielsweise ändert eine Transaktion die Daten und eine andere versucht, sie zu lesen. Das Leseergebnis kann falsch sein, weil enthält nicht die neuesten Änderungen. Daher funktioniert die Transaktionsisolation auf DBMS-Ebene. Folgende Isolationsstufen sind möglich:

  • Unverbindlich lesen- Während eine Transaktion das Array ändert, kann eine andere es nicht ändern, aber lesen. Niedrigster Isolationsgrad.
  • Lesen Sie engagiert- Während eine Transaktion das Array ändert, kann eine andere es nicht ändern oder lesen
  • Wiederholbare Lektüre- Während eine Transaktion das Array liest, kann eine andere es nicht ändern, aber lesen
  • Serialisierbar- Während eine Transaktion das Array liest, kann eine andere es nicht ändern oder lesen. Alle Vorgänge sind sequentiell. Maximaler Isolationsgrad.

Wenn die 1C:Enterprise-Konfiguration auf eingestellt ist automatischer Sperrmodus, dann wird die Transaktionsisolationsstufe vom DBMS ausgewählt. Im Fall von MS SQL handelt es sich dabei um wiederholbare Lese- oder Serialisierbarkeitsebenen, d. h. die Datenisolation liegt nahezu am Maximum. Dies löst Probleme mit der Datenkorrektheit, kann jedoch bei intensiver Benutzerarbeit zu Blockaden auf DBMS-Ebene führen. Daher verfügt 1C:Enterprise über eine eigene Funktionalität zum Arbeiten mit Sperren, die durch die Aktivierung des verwalteten Sperrmodus aktiviert wird. In diesem Fall lautet die Transaktionsisolationsstufe für MS SQL „Lesen festgeschrieben“. Die Plattform selbst isoliert die Daten, ohne auf das DBMS angewiesen zu sein.

Der verwaltete Sperrmodus ist in den Konfigurationseigenschaften aktiviert:

Außerdem kann der Sperrmodus für bestimmte Konfigurationsobjekte festgelegt werden:

Wenn die gesamte Konfiguration auf den automatischen Sperrmodus eingestellt ist, funktionieren alle Transaktionen für alle Register im automatischen Modus, unabhängig vom Modus, der für das Konfigurationsobjekt festgelegt ist. Bei „Verwaltet“ befinden sich alle Transaktionen ebenfalls im Status „Verwaltet“. Wenn der Konfigurationsmodus auf „Automatisch und kontrolliert“ eingestellt ist, wird der Modus für jedes Objekt durch seine Einstellungen bestimmt.

Es gibt einen Punkt für den automatischen und kontrollierten Modus. Eine einzelne Transaktion für einen Benutzer kann aus Sicht der Plattform mehrere Transaktionen darstellen. Das interaktive Verbuchen eines Dokuments in ein Register macht beispielsweise möglich zwei Transaktionen – eine Aufzeichnung des Dokuments selbst und innerhalb dieser Transaktion eine Aufzeichnung einer Reihe von Zeilen nach Register. Abhängig vom Sperrverwaltungsmodus für das Dokument selbst und dem Register, das es verschiebt, sind vier Situationen möglich:

  1. Dokumentenmodus Automatisch, Registermodus Automatisch ->
  2. Dokumentenmodus Verwaltet, Registermodus Verwaltet -> Aufzeichnung nach Register im verwalteten Modus
  3. Dokumentenmodus Automatisch, Registermodus Gesteuert -> Registerweise Aufzeichnung im Automatikmodus
  4. Dokumentenmodus Verwaltet, Registermodus Automatisch -> Ausnahme (Fehler)

Frage 06.59 der Prüfung 1C: Platform Professional. Wenn ein Dokument über ein beliebiges Register gebucht wird und das Dokument über einen automatischen Transaktionssperren-Verwaltungsmodus und das Register über einen verwalteten Modus verfügt (die Option „Automatisch und verwaltet“ wird in den Konfigurationseigenschaften verwendet), führt eine solche Buchung zu Folgendem:

Die richtige Antwort ist die zweite, wir ermitteln sie anhand der ersten Transaktion, wenn sie automatisch erfolgt, dann erfolgt alles automatisch.

Frage 06.60 der Prüfung 1C: Platform Professional. Wenn bei der Buchung eines Dokuments über ein beliebiges Register das Dokument über einen verwalteten Modus zur Verwaltung von Transaktionssperren verfügt und das Register über einen automatischen Modus verfügt (in den Konfigurationseigenschaften wird die Option „Automatisch und verwaltet“ verwendet), führt eine solche Buchung zu Folgendem:

  1. zu einer Fehlersituation
  2. Die gesamte Transaktion wird automatisch abgeschlossen
  3. Die gesamte Transaktion wird kontrolliert abgewickelt

Die richtige Antwort ist die erste, die wir anhand der ersten Transaktion bestimmen. Wenn sie kontrolliert wird, handelt es sich um einen Fehler.

Frage 06.61 der Prüfung 1C: Platform Professional. Wenn ein Dokument über ein beliebiges Register gebucht wird und das Dokument über einen automatischen Modus zur Verwaltung von Transaktionssperren verfügt und das Register über einen verwalteten Modus verfügt (die Option „Verwaltet“ wird in den Konfigurationseigenschaften verwendet), führt eine solche Buchung zu Folgendem:

  1. zu einer Fehlersituation
  2. Die gesamte Transaktion wird automatisch abgeschlossen
  3. Die gesamte Transaktion wird kontrolliert abgewickelt

Die Vorteile der Umstellung auf verwaltete Sperren in 1C 8.3 wurden mehr als einmal erwähnt – dies steigert die Effizienz und Produktivität der Geräte erheblich.

Wenn Sie einen Partner benötigen, der Ihre Konfiguration in den verwalteten Schließmodus überführt, kontaktieren Sie uns einfach! Einzelheiten - .

Der Prozess selbst ist nicht so schwierig. Allerdings ist der Prozess recht heikel. Der Wechsel in einen kontrollierten Modus durch eine unqualifizierte Person kann die Situation noch verschlimmern.

Im Folgenden analysieren wir die Methode des Übergangs vom automatischen zum kontrollierten Blockiermodus.

Die gesamte Technik lässt sich in 7 kurze Punkte zusammenfassen:

Stellen Sie den Sperrmodus in der Koauf „Verwaltet und automatisch“ um:

Holen Sie sich 267 Video-Lektionen zu 1C kostenlos:

Ein Objekt in den verwalteten Modus versetzen

Es ist notwendig, mit den am meisten „geladenen“ Dokumenten zu beginnen. Schalten Sie das Dokument in den verwalteten Sperrmodus um:

Übertragen von Registern in den verwalteten Modus

Es ist notwendig, ALLE 1C-Register (Sammlung, Abrechnung, Information, Berechnung), die Bewegungen mit diesem Dokument erzeugen, in den kontrollierten Sperrmodus zu überführen:

Finden Sie alle Transaktionen mit diesen Objekten

Sie müssen alle Transaktionen mit diesen Metadatenobjekten finden. Sowohl offensichtlich als auch nicht offensichtlich.

Explizit sind solche, die im Code über die Methode „StartTransaction()“ aufgerufen werden.

NICHT explizite – solche, die in Objekthandlern aufgerufen werden – „Writing“, „Writing Processing“ usw.

Programmcode in einer Transaktion korrigieren

Für explizite Transaktionen müssen Sie den Parameter „Data Locking Control Mode. Managed“ an den Methodenparameter „Start Transaction()“ übergeben.

Für NICHT explizite Transaktionen setzen Sie Sperren mithilfe des Systemobjekts „Datensperre“.

Beispiel für die Verwendung von Blockierung:

Lock = NewDataLock;
Locking Element = Locking.Add("Accumulation Register.GoodsInWarehouses");
Blockierendes Element.SetValue("Quality", Directories.Quality.FindByCode("1"));
LockElement.Mode = DataLockMode.Exclusive;
Locking Element.DataSource = DocumentObject.ReturnableContainer;
Sperren Element.UseFromDataSource("Nomenclature", "Nomenclature");
LockElement.UseFromDataSource("Warehouse", "Warehouse");
Lock.Lock();

Ersetzen Sie das Design ZUR ÄNDERUNG

Beschleunigen Sie 1C durch Drücken einiger Tasten 2. Kontrollierte Sperren. 4. September 2011

Wenn Sie die Methode zum Übertragen der Konfiguration auf verwaltete Sperren von 1C lesen, können Sie dort viele interessante und beängstigende Dinge finden. Eigentlich ist es ganz einfach: Ändern Sie in den Konfigurationseigenschaften den Datenblockierungsmodus – „Verwaltet“. Alle. Herzlichen Glückwunsch – Sie haben gerade auf verwaltete Schlösser umgestellt. Tatsächlich ist alles etwas komplizierter – aber nicht viel.

Zunächst ein kurzer theoretischer Exkurs – warum eine Blockierung erforderlich ist: Wer Zugriff hat, kann ihn natürlich hier lesen: http://kb.1c.ru/articleView.jsp?id=30 1C hat sich die Mühe gemacht, einen einigermaßen zugänglichen Artikel zu schreiben zum Thema Datensperre. Für diejenigen, die keinen Zugang haben, beschreibe ich kurz und knapp, warum Schlösser benötigt werden:

Beispiel 1. Wenn Sie nach der Aktivierung kontrollierter Sperren nichts tun und gleichzeitig mit der parallelen Verarbeitung von 2 Dokumenten beginnen (eines davon ist noch einen Bruchteil einer Sekunde früher), dann erhalten wir ungefähr das folgende Bild:

Transaktion 1 Transaktion 2 Status der Salden
Start | 1 PC
| Start 1 PC
| | 1 PC
Bilanzen lesen | 1 PC
| Bilanzen lesen 1 PC
| | 1 PC
Abschreibung von Guthaben | 0 Stk
| Abschreibung von Guthaben -1 PC
Fertigstellung |
Fertigstellung

Was ist hier los? Die Rückstandskontrolle ist fehlgeschlagen. Dem zweiten Dokument gelang es, den Rest zu lesen, bevor es dem ersten gelang, sie aufzuschreiben. Gleichzeitig sah ich, dass nur noch ein Artikel übrig war, und schrieb ihn nach dem ersten in aller Ruhe ab. Erwähnenswert ist, dass es hier tatsächlich weiterhin zu Verstopfungen kommen wird. 2 Dokumente können nicht gleichzeitig Salden abschreiben; dies ist für die logische Integrität der Datenbank notwendig, für die Lösung des Anwendungsproblems in diesem Beispiel jedoch kaum sinnvoll.

Jetzt versuchen wir, die Situation zu korrigieren. Im Code zur Ausführung des Dokuments geben wir die Installation einer exklusiven kontrollierten Sperre unmittelbar vor dem Auslesen der Salden an:

Nachdem wir nun herausgefunden haben, warum Schlösser benötigt werden, müssen wir nur noch kontrollierte Schlösser dort installieren, wo sie benötigt werden: nämlich - nur dort, wo eine Rückstandskontrolle durchgeführt wird. Wenn ein Manager in Ihrer Datenbank das Recht hat, ein Dokument zu buchen, unabhängig davon, ob ein Produkt (Geld) auf Lager ist oder nicht, warum ist dann eine Sperrung erforderlich? Sie können sie einfach nicht installieren oder sie registrieren und bis zu besseren Zeiten auskommentieren. Wenn Sie Salden überwachen, sind es in der Regel 3-4 Register, also maximal 10. Die Kontrolle kann sowohl in allgemeinen Prozeduren und Funktionen als auch in Modulen des RN-Datensatzes ausgesetzt werden. Der Code ist äußerst einfach. Öffnen Sie den Syntaxassistenten und sehen Sie nach:

Sperren = NewDataLock;
LockElement = Sperre. Hinzufügen( „Sammelregister. Waren in Lagern“) ;
Sperrelement. SetValue("Quality", Directories. Quality. FindByCode("1" ) );
Sperrelement. Modus = DataLockMode. Außergewöhnlich;
Sperrelement. DataSource = DocumentObject. MehrwegContainer;
Sperrelement. UseFromDataSource("Nomenclature" , "Nomenclature" ) ​​​​;
Sperrelement. UseFromDataSource("Warehouse" , "Warehouse" );
Blockierung. Block() ;

Eigentlich ist alles sofort klar – wir blockieren „Waren in Lagern“, legen 1 Dimension explizit fest, übernehmen die Werte der anderen 2 aus der Datenquelle – dem PM-Dokument.

Diejenigen, die Bücher zu 8.2 gelesen haben, erinnern sich wahrscheinlich an die „Neue Buchungslogik“ – bei der Salden kontrolliert werden, nachdem Dokumentbewegungen aufgezeichnet wurden. Sie fragen sich, warum das so ist? Aber lassen Sie uns dieselbe Platte neu zeichnen, sodass die Kontrolle über Gleichgewicht und Blockierung nach der Aufzeichnung der Bewegungen erfolgt:

Transaktion 1 Transaktion 2 Status der Salden
Start | 1 PC
| Start 1 PC
| | 1 PC
Abschreibung von Guthaben | 0 Stk
| Abschreibung von Guthaben -1 PC
Sperren | -1 PC
Bilanzen lesen Blockversuch -1 PC
| Warten auf dem Block -1 PC
| Warten auf dem Block -1 PC
Fertigstellung Warten auf dem Block -1 PC
Sperren -1 PC
Bilanzen lesen -1 PC
| -1 PC
Ablehnung 0 Stk

Der Unterschied ist optisch nicht signifikant – wir erhalten eine Leistungssteigerung aufgrund der Tatsache, dass zum Zeitpunkt des Abschreibens von Salden (das Schreiben in die Datenbank, was tatsächlich Zeit kostet) noch keine Sperrung erfolgt. Die Sperrung erfolgt später am Ende der Transaktion, wo die Kontrolle negativer Salden erfolgt; dies entspricht vollständig der Geschäftslogik der Anwendung.

Wenn Sie wissen, warum Sperren erforderlich sind, können Sie diese entsprechend den von Ihnen gelösten Geschäftsproblemen wirklich verwalten. DBMS werden unter der Annahme entwickelt, maximalen Datenschutz zu gewährleisten. Wenn Sie beispielsweise Bankgeschäfte tätigen, sollte die Sperrung überall und auf maximalem Niveau erfolgen. Es ist besser, unnötige Datensätze zu blockieren, als zuzulassen, dass Daten inkonsistent sind.

Wenn Sie Brötchen oder Kugelschreiber verkaufen, werden Sie wahrscheinlich nicht so viele Blockierungen benötigen. Durch Mängel und Fehleinstufungen aufgrund menschlichen Verschuldens verlieren Sie hunderte Male mehr, als wenn zwei Benutzer gleichzeitig zwei identische Versanddokumente bearbeiten würden.

Um zwischen solch unterschiedlichen Aufgaben zu variieren, haben DBMS Isolationsstufen entwickelt. Durch Festlegen der Transaktionsisolationsstufe können Sie dem DBMS mitteilen, welche Sperren in verschiedenen Fällen (beim Schreiben und beim Lesen einer Transaktion) verhängt werden sollen; in verschiedenen Fällen S (Sie können lesen oder schreiben) oder X (Sie können weder lesen noch schreiben). Schreibsperren werden verhängt.

Im automatischen Modus verfügen Sie also fast immer über die Isolationsstufe SERIALIZABLE, die bei Bedarf und bei Nichtbedarf X-Sperren durchführt, was Ihr Leben erheblich ruinieren wird

Und in einer verwalteten Version haben Sie READ COMMITED, das die S-Sperre beim Lesen anwendet und sofort aufhebt, und die X-Sperre nur beim Schreiben. Das schwierigste Level. Mit einer schnell angelegten S-Sperre können Sie lediglich überprüfen, ob irgendwo eine im vorherigen Artikel, dann nicht Beim Lesen wird es sogar S-Sperren geben, sodass auf DBMS-Ebene beim Schreiben nur das Schreiben blockiert wird – was richtig und für die Datenkonsistenz notwendig ist.

Was Sie mit verwalteten Sperren tun, liegt ganz bei Ihnen. Aber ich würde empfehlen, die Installation nicht zu überstürzen. Ich habe Unternehmen kennengelernt, die über einen automatischen Sperrmodus verfügten, und das Wort „durch Sperren gequält“ war sogar aus dem Mund des Generaldirektors zu hören, und gleichzeitig wurde die Kontrolle negativer Salden deaktiviert....



Verwandte Veröffentlichungen