Fehler bei der Verwendung des automatischen Modus des Sperrmanagers. Steuerung der Transaktionsdatensperre, Mechanismus

Die Hauptgründe für den Wechsel zu verwalteten Sperren:

  • Der Hauptgrund ist die Empfehlung von 1C:Expert basierend auf Zeugenaussagen oder 1C:TsUP
  • Probleme mit gleichzeitigen Benutzern ()
  • Verwendung von Oracle, PostgreSQL und .

Arbeitsaufwand:

Die Essenz verwalteter Sperren

Beim Arbeiten im automatischen Sperrkontrollmodus stellt 1C:Enterprise einen hohen Grad an Datenisolation in einer Transaktion auf DBMS-Ebene ein. Dadurch können Sie die Möglichkeit, unvollständige oder falsche Daten zu erhalten, ohne besonderen Aufwand seitens der Anwendungsentwickler vollständig ausschließen.

Dies ist ein bequemer und korrekter Ansatz für eine kleine Anzahl aktiver Benutzer. Der Preis für eine einfache Entwicklung ist ein gewisses Maß an redundanter Sperrung auf DBMS-Ebene. Diese Sperren hängen sowohl mit den Besonderheiten der Implementierung von Sperrmechanismen im DBMS selbst als auch mit der Tatsache zusammen, dass das DBMS die physische Bedeutung und Struktur von 1C:Enterprise-Metadatenobjekten nicht berücksichtigen kann (und dies auch nicht tut).

Bei der Arbeit mit hoher Ressourcenkonkurrenz (einer großen Anzahl von Benutzern) machen sich die Auswirkungen redundanter Sperren irgendwann auf die Leistung im Parallelmodus bemerkbar.

Nach dem Übertragen der Konfiguration in den verwalteten Modus wird die zusätzliche Funktionalität des „Lock Managers“ in der Plattform aktiviert und die Datenintegritätskontrolle erfolgt nun nicht mehr auf der DBMS-Seite, sondern auf der 1C-Serverseite. Dies erhöht die Belastung der 1C-Server-Hardware (es werden schnellere Prozessoren und mehr Speicher benötigt) und führt sogar zu einer leichten Verlangsamung (mehrere Prozent), verbessert jedoch die Situation mit Sperren erheblich (weniger Sperren aufgrund von Sperren für ein Objekt usw.). nicht auf eine Kombination von Tabellen, weniger Sperrbereich und in manchen Fällen ist die Lebensdauer von Lesesperren kürzer, d. h. nicht bis zum Ende der Transaktion). Dies verbessert die allgemeine Parallelität.


Neue Konfigurationen von 1C wurden sofort kontrolliert umgesetzt.

  • Frage: Ist es möglich, zuerst ein Audit durchzuführen und dann an FM zu übertragen?

Antwort: Ja, die Prüfung dient als zusätzliche Begründung für die Machbarkeit der Umstellung auf verwaltete Schleusen und dient auch der Beurteilung des Beitrags automatischer Schleusen zur Gesamtverlangsamung und der Frage, ob neben der Umstellung weitere Anstrengungen erforderlich sind.

  • Frage: Welche Art von Zugriff sollte für die Übertragung auf UX bereitgestellt werden – RDP, TeamViewer? Oder kann ich Ihnen die Konfigurationsdatei zusenden?

Antwort: Wir versuchen, uns nicht auf eine bestimmte Fernzugriffstechnologie zu beschränken, das reicht jede Fernzugriffstechnologie. Wenn es für Sie keine Rolle spielt, ist RDP praktischer.
Wir können eine Optimierung basierend auf der gesendeten Konfigurationsdatei durchführen, aber dann können wir einige echte Daten nicht debuggen und Sie müssen sorgfältiger testen. Wenn wir eine Optimierung an einer Kopie der Datenbank durchführen, können wir diese gründlicher testen, bevor wir Ihnen das Ergebnis der Arbeit mitteilen.

  • Frage: Wir haben 10 Vollzeitprogrammierer, die jeden Tag etwas in der Konferenz verändern. Es wird ein gemeinsamer Konfigurationsspeicher verwendet.“ Wie wird die Interaktion bei der Übertragung auf UX organisiert? Oder sollten alle Programmierer in den Urlaub geschickt werden?

Antwort: In der Regel erfolgen unsere Änderungen innerhalb weniger Tage. Der Rest der Zeit wird damit verbracht, die vorgenommenen Änderungen zu testen, auch unter dem Gesichtspunkt der erforderlichen Logik, die durch das Geschäft und nicht durch technische Überlegungen bestimmt wird. Wir Wir können Änderungen an einer separaten Konfigurationsdatei vornehmen cf , und dann wird Ihr Programmierer es in das Repository übertragen. Niemand muss in den Urlaub fahren. Bei anderen Interaktionsmöglichkeiten müssen Sie sich lediglich darauf einigen, welche Objekte Ihre Entwickler erfassen möchten, damit wir einen für beide Parteien geeigneten Arbeitsplan erstellen können. In der Regel müssen Ihre Entwickler nicht die gesamte Konfiguration erfassen oder uns das „Lenkrad“ für einen Tag überlassen.

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 der Benutzer.

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 der Vorgang des Schreibens 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
Um den verwalteten Sperrmodus in einer expliziten Transaktion zu verwenden, müssen Sie den Wert dieses Parameters angeben
Datensperre-Kontrollmodus.

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.
Exklusives Sperren 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 zur Verwaltung der Datensperre In einer Transaktion können Sie veränderbare Daten nicht über das verwendete Datenbankmanagementsystem, sondern über die Plattform sperren. Eine solche Datensperrenverwaltung erfolgt nicht im Hinblick auf die DBMS-Daten, sondern im Hinblick auf den Themenbereich. Dadurch werden Sperren genauer angewendet und die Parallelität der Benutzer erhöht.

Die Konfiguration 1C:Enterprise 8 kann in einem von drei Modi zum Verwalten von Sperren in einer Transaktion betrieben werden:

  • Auto;
  • verwaltet – Standardmodus für neue Konfigurationen;
  • automatisch und kontrolliert.

IN automatischer Modus Die Datensperrenverwaltung nutzt die vom Datenbankverwaltungssystem bereitgestellten wiederholbaren Lese- und serialisierbaren Transaktionsisolationsstufen. Diese Transaktionsisolationsstufen gewährleisten ein konsistentes und konsistentes Lesen von Daten, ohne dass vom Entwickler zusätzliche Sperrverwaltungsaufwände erforderlich sind.

Verwalteter Modus ermöglicht es Ihnen, die Parallelität der Benutzerarbeit im Client-Server-Betriebsmodus zu erhöhen, indem Sie eine niedrigere Ebene der Datenbanktransaktionsisolation (Read Committed) verwenden. Beim Schreiben von Daten in eine Transaktion sperren integrierte Sprachobjekte automatisch die erforderlichen Daten. Der Entwickler muss Datensperren verwalten, wenn die Geschäftslogik ein konsistentes und konsistentes Lesen der Daten in einer Transaktion erfordert.

Automatisch und kontrolliert Im Modus können Sie die Möglichkeit zur Verwaltung von Sperren in einer Transaktion nur für einige Konfigurationsobjekte nutzen. Dieser Modus kann verwendet werden, um die Benutzerparallelität mit einzelnen Anwendungsobjekten (z. B. einigen der am intensivsten genutzten Dokumente) zu optimieren oder um große Konfigurationen schrittweise in den Trazu überführen.

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

Am häufigsten entsteht die Notwendigkeit, Datensperren in einer Transaktion zu verwalten, beim Buchen von Belegen, wenn Sie geänderte Daten lesen und dann in dieselben Tabellen schreiben müssen. Wenn Sie beispielsweise beim Buchen eines Belegs die Salden überwachen.

Speziell für diesen Zweck sind Aufzeichnungssätze von Akkumulationsregistern und Buchführungsregistern vorgesehen BlockForChange.

Wenn Sie die Salden kontrollieren und dann Bewegungen im selben Register erfassen müssen, muss diese Eigenschaft für den Datensatzsatz dieses Registers in der Eigenschaft festgelegt werden Bewegungen.

Die Wirkung dieser Eigenschaft ist die gleiche, als ob der Entwickler die erforderlichen verwalteten Sperren für 1C:Enterprise 8 unabhängig installiert (im Code vorgeschrieben) hätte. Die Plattform installiert die erforderlichen verwalteten Sperren automatisch, wenn dieser Satz von Datensätzen geschrieben wird. Dies hat zur Folge, dass andere verwaltete Transaktionen, die dieselbe Sperre verwenden, nicht mit dem Lesen dieses Registers beginnen können, bis die aktuelle Transaktion abgeschlossen ist.

Nachfolgend finden Sie ein Beispiel für die „manuelle“ Steuerung von Datensperren beim Lesen von Akkumulationsregisterdaten Buchhaltung für Artikel in der Dokumentenverarbeitung Verkaufsrechnung. In diesem Beispiel werden verwaltete Sperren vollständig mithilfe der integrierten Sprache erstellt und festgelegt.

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. Beispielsweise erfolgt die interaktive Buchung eines Dokuments in einem Register 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 Sie ein Dokument über ein beliebiges Register buchen und das Dokument über einen automatischen Tund das Register über einen verwalteten Modus verfügt (in den Konfigurationseigenschaften wird die Option „Automatisch und verwaltet“ 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 bei der Buchung eines Dokuments über ein beliebiges Register das Dokument über einen automatischen Modus zur Verwaltung von Transaktionssperren verfügt und das Register über einen verwalteten Modus verfügt (in den Konfigurationseigenschaften wird die Option „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


 

Es könnte nützlich sein zu lesen: