Heim >Datenbank >MySQL-Tutorial >Ausführliche Erläuterung des SQL Server 2016 Snapshot Agent-Prozesses
In diesem Artikel finden Sie eine detaillierte Analyse des SQL Server 2016-Snapshot-Agent-Prozesses und ein Beispiel dafür, worauf Sie achten müssen. Folgen Sie dem Editor, um zu lernen. Wir werden eine Instanzdatentabelle von SQL Server 2016 verwenden, um Ihnen eine detaillierte Analyse der beim Snapshot-Agent-Prozess aufgetretenen Probleme und Lösungen sowie eine detaillierte Erläuterung des Snapshot-Generierungsprozesses zu geben. Im Folgenden finden Sie den vollständigen Inhalt:
Übersicht
Der Snapshot-Agent bereitet das Schema und die anfänglichen Datendateien veröffentlichter Tabellen und anderer Objekte vor, speichert Snapshot-Dateien und zeichnet Synchronisierungsinformationen in der Verteilungsdatenbank auf. Der Snapshot-Agent wird auf dem Verteilungsserver ausgeführt. Die SQL Server 2016-Version hat einige bessere Optimierungen für den Snapshot-Agenten vorgenommen. Als Nächstes erfahren Sie mehr über den Snapshot-Ausführungsprozess.
1. Snapshot-Proxy-Datei
Beim Ausführen eines Snapshot-Jobs werden 4 Dateitypen im angegebenen Snapshot-Verzeichnis generiert.
BCP-Datei: die Datendatei des Veröffentlichungsobjekts.
IDX-Datei: Indexerstellungsskriptdatei
PRE-Datei: Snapshot-Skriptdatei kopieren.
SCH-Datei: Architekturerstellungsskriptdatei
2. Standard-Snapshot-Agent-Konfigurationsdatei
-BcpBachSize: Die maximale Anzahl von Datensatzzeilen für jede BCP-Operationskopie. Der Standardwert beträgt 100.000 Zeilen.
-HistoryVerboseLevel: Gibt die Größe des während des Snapshot-Vorgangs aufgezeichneten Verlaufs an.
-LoginTimeout: Anzahl der Sekunden, die gewartet werden soll, bevor die Anmeldung abläuft. Der Standardwert beträgt 15 Sekunden.
-QueryTimeOut: Anzahl der Sekunden, die gewartet werden soll, bevor bei der Abfrage das Zeitlimit überschritten wird. Der Standardwert beträgt 1800 Sekunden
Hinweis: Sie können den Snapshot-Agenten konfigurieren, indem Sie mit der rechten Maustaste auf die Snapshot-Agent-Snapshot-Agent-Konfigurationsdatei klicken.
3. Vergleichen Sie verschiedene Versionen von Snapshot-Agenten
Der nächste Schritt besteht darin, 200 Millionen Datensatztabellen zu testen und zu vergleichen, um Snapshots zu erstellen
1. Vergleich der Anzahl der BCP-Dateien
2008R2
2016SP1
Hier konzentrieren wir uns auf BCP-Dateien, da beim Anwenden von Snapshots auf den Abonnenten BCP-Dateien als Basiseinheit verwendet werden. Das heißt, egal wie groß Ihre BCP-Datei ist, sie wird sofort in großen Mengen an den Abonnenten gesendet Je größer die BCP-Datei, desto länger dauert jede Anwendung. Wenn eine BCP-Datei zu groß ist, schlägt das Einfügen in den Abonnenten möglicherweise fehl.
Wie Sie auf dem Bild oben sehen können, gibt es auch 2008R2 mit insgesamt 8 BCP-Dateien, und die größte BCP-Datei ist 2016 nur wenige Megabyte groß hat 16 BCP-Dateien, und die ersten 15 sind alle etwa 50 Millionen Daten, was relativ gleichmäßig ist. Schauen Sie sich als Nächstes den Datensatzvergleich jeder BCP-Datei in der folgenden Abbildung an.
2. Vergleich des detaillierten Prozesses der Snapshot-Generierung
2008r2
2016SP1
Aus dem Vergleich der generierten BCP-Dateidatensätze:
2008R2: Die ersten 7 Dateien enthalten jeweils etwa 700.000 Datensätze, und die letzte Datei enthält 110 Millionen Datensätze .
2016: Die ersten 15 Dateien verzeichneten jeweils etwa 7 Millionen, und die letzte Datei verzeichnete 780.000.
Erklärung:
Die ungefähre Anzahl der in jeder der ersten 7 Dateien von 2008R2 gespeicherten Datensätze beträgt 700.000. Die verbleibenden Datensätze werden in der letzten Datei gespeichert, also die Anzahl der Tabellendatensätze ist besser für 2008R2 geeignet und liegt bei etwa 6 Millionen.
Die ungefähre Anzahl der in jeder der ersten 15 Dateien im Jahr 2016 gespeicherten Datensätze beträgt 7 Millionen. Die verbleibenden Datensätze werden in der letzten Datei im Jahr 2016 gespeichert.
Allgemeiner Nachteil: Nachdem die Tabellendatensätze die „angemessene Anzahl replizierter Tabellendatensätze“ überschreiten, werden alle verbleibenden Daten in der letzten BCP-Datei gespeichert.
3. Verteilungsvergleich
Werfen wir einen Blick auf den detaillierten Verteilungsprozess
Sie können jedes Mal aus der 2008R2-Verteilung sehen Der Aufzeichnungsprozess BULK basiert auf BCP-Dateien. Das Kopieren der letzten BCP-Datei dauerte etwa 22 Minuten, und jede der vorherigen Dateien dauerte mehr als zehn Sekunden, oder weil meine aktuelle Tabelle nur drei Felder und keinen Index außer dem Primärschlüssel hat. Ansonsten dauert die Zeit einfach länger.
4. Snapshot-Generierungsprozess
Der Replikations-Snapshot-Agent ist eine ausführbare Datei, die zum Vorbereiten von Snapshot-Dateien (die veröffentlichte Tabellen und Datenbankobjekte enthalten) verwendet wird Schema und Daten), speichert diese Dateien dann im Snapshot-Ordner und zeichnet den Synchronisierungsauftrag in der Verteilungsdatenbank auf.
Sie können den gesamten Snapshot-Generierungsprozess anhand des Bildes oben verstehen.
5. Syntax
snapshot [ -?] -Publisher server_name[\instance_name] -Publication publication_name [-70Subscribers] [-BcpBatchSize bcp_batch_size] [-DefinitionFile def_path_and_file_name] [-Distributor server_name[\instance_name]] [-DistributorDeadlockPriority [-1|0|1] ] [-DistributorLogin distributor_login] [-DistributorPassword distributor_password] [-DistributorSecurityMode [0|1] ] [-DynamicFilterHostName dynamic_filter_host_name] [-DynamicFilterLogin dynamic_filter_login] [-DynamicSnapshotLocation dynamic_snapshot_location] [-EncryptionLevel [0|1|2]] [-FieldDelimiter field_delimiter] [-HistoryVerboseLevel [0|1|2|3] ] [-HRBcpBlocks number_of_blocks ] [-HRBcpBlockSize block_size ] [-HRBcpDynamicBlocks ] [-KeepAliveMessageInterval keep_alive_interval] [-LoginTimeOut login_time_out_seconds] [-MaxBcpThreads number_of_threads ] [-MaxNetworkOptimization [0|1]] [-Output output_path_and_file_name] [-OutputVerboseLevel [0|1|2] ] [-PacketSize packet_size] [-ProfileName profile_name] [-PublisherDB publisher_database] [-PublisherDeadlockPriority [-1|0|1] ] [-PublisherFailoverPartner server_name[\instance_name] ] [-PublisherLogin publisher_login] [-PublisherPassword publisher_password] [-PublisherSecurityMode [0|1] ] [-QueryTimeOut query_time_out_seconds] [-ReplicationType [1|2] ] [-RowDelimiter row_delimiter] [-StartQueueTimeout start_queue_timeout_seconds] [-UsePerArticleContentsView use_per_article_contents_view]
Parameter
-?
Alle verfügbaren Parameter ausgeben.
-Publisher Servername[Instanzname]
Der Name des Veröffentlichungsservers. Geben Sie server_name für die Standardinstanz von Microsoft SQL Server auf diesem Server an. Geben Sie server_name für die SQL Server-Standardinstanz ServernameInstanzname Instanzname auf diesem Server an.
-Veröffentlichung Veröffentlichung
Der Name der Veröffentlichung. Dieser Parameter ist nur wirksam, wenn die Veröffentlichung so eingestellt ist, dass Snapshots immer für neue oder neu initialisierte Abonnements verfügbar sind.
-70Subscribers
Dieser Parameter ist erforderlich, wenn Abonnenten SQL Server Version 7.0 ausführen.
-BcpBatchSize bcp-Batch Größe
Die Anzahl der Zeilen, die bei einem Massenkopiervorgang gesendet werden. Bei der Ausführung eines BCP im Betrieb ist die Stapelgröße die Anzahl der Zeilen, die als eine Transaktion an den Server gesendet werden sollen, und die Anzahl der Zeilen, die gesendet werden müssen, bevor der Verteilungsagent eine BCP-Fortschrittsmeldung aufzeichnet. Bei der Durchführung eines BCP-Out-Vorgangs wird eine feste Stapelgröße von 1000 verwendet. Ein Wert von 0 bedeutet, dass keine Nachrichten protokolliert werden.
-DefinitionFile def_path_and_file_name
Der Pfad zur Agentendefinitionsdatei. Die Agentendefinitionsdatei enthält die Befehlszeilenparameter für den Agenten. Der Inhalt der Datei wird als ausführbare Datei analysiert. Verwenden Sie doppelte Anführungszeichen ("), um Parameterwerte anzugeben, die beliebige Zeichen enthalten.
-Distributor Servername[Instanzname]
Distributor Geben Sie den server_name SQL Server auf diesem Server an. Geben Sie den server_name auf der server_nameinstance_ 🎜>-DistributorDeadlockPriority [-1|0|1]Die Priorität des Snapshot-Agenten, der eine Verbindung zum Verteilungsserver herstellt, wenn ein Deadlock auftritt. Dieser Parameter wird angegeben, um das Problem zwischen dem Snapshot-Agenten und der Benutzeranwendung während der Snapshot-Generierung zu lösen
0 (Standard)
Keine Priorität zugewiesen .
1
Wenn auf dem Verteilungsserver ein Deadlock auftritt, hat der Snapshot-Agent Vorrang. >Anmeldename, der beim Herstellen einer Verbindung zum Verteilungsserver mithilfe der SQL Server-Authentifizierung verwendet wird
-DistributorPassword
distributor_password Beim Herstellen einer Verbindung zum Verteilungsserver mithilfe der SQL Server-Authentifizierung.-DistributorSecurityMode [0|1]
Wird zum Festlegen des Werts verwendet HOST_NAME (Transact-SQL) im Filter beim Erstellen eines dynamischen Snapshots, wenn beispielsweise die Teilmengenfilterklausel rep_id = HOST_NAME() für ein Projekt angegeben ist und die DynamicFilterHostName-Eigenschaft vor dem Aufruf des Merge-Agenten auf „FBJones“ festgelegt ist, Es werden nur Zeilen mit „FBJones“ in der Spalte „rep_id“ kopiert.
-DynamicFilterLogin
dynamic_filter_loginwird verwendet, um den Wert für SUSER_SNAME (Transact-SQL) beim Filtern festzulegen, wenn ein dynamischer Snapshot erstellt wird. Wenn beispielsweise die Teilmengenfilterklausel user_id = SUSER_SNAME() für ein Projekt angegeben ist und die DynamicFilterLogin-Eigenschaft auf „rsmith“ festgelegt ist, bevor die Run-Methode des SQLSnapshot-Objekts aufgerufen wird, werden nur Zeilen mit „rsmith“ in der Spalte „user_id“ einbezogen der Schnappschuss.
-DynamicSnapshotLocation dynamic_snapshot_location
Der Ort, an dem dynamische Snapshots generiert werden sollen.
-EncryptionLevel [ 0 |. 1 | 2 ]Der vom Snapshot-Agent verwendete Grad der Secure Sockets Layer (SSL)-Verschlüsselung.
EncryptionLevel-Wert
Beschreibung
0
Gibt an, SSL nicht zu verwenden.
1
Gibt die Verwendung von SSL an, aber der Proxy überprüft nicht, ob das SSL-Serverzertifikat von einem vertrauenswürdigen Aussteller signiert ist.
2
Geben Sie die Verwendung von SSL an und überprüfen Sie das Zertifikat.
-FieldDelimiter field_delimiter
Ein Zeichen oder eine Zeichenfolge, die zum Markieren des Endes eines Felds in SQL Server-Massenkopierdatendateien verwendet wird. Der Standardwert ist n
-HistoryVerboseLevel [ 1|. 3]
Gibt die Größe des während des Snapshot-Vorgangs aufgezeichneten Verlaufs an. Wählen Sie 1, um die Auswirkungen der historischen Protokollierung auf die Leistung zu minimieren.
HistoryVerboseLevel-Wert
Beschreibung
0
Fortschrittsmeldungen werden in die Konsole oder Ausgabedatei geschrieben. Zeichnet den Verlauf nicht in der Verteilungsdatenbank auf.
1
Aktualisiert immer die vorherige Verlaufsnachricht mit demselben Status (gestartet, in Bearbeitung, erfolgreich usw.). Wenn kein vorheriger Datensatz mit demselben Status vorhanden ist, wird ein neuer Datensatz eingefügt.
2 (Standard)
Fügen Sie einen neuen Verlaufseintrag ein, es sei denn, der Datensatz ist eine Leerlaufmeldung oder eine Auftragsmeldung mit langer Laufzeit. In diesem Fall wird der vorherige Datensatz aktualisiert.
3
Fügen Sie immer einen neuen Datensatz ein, es sei denn, er bezieht sich auf eine Leerlaufnachricht.
-HRBcpBlocks number_of_blocks
Die Anzahl der BCP-Datenblöcke, die zwischen dem Writer-Thread und dem Reader-Thread in der Warteschlange stehen. Der Standardwert ist 50. HRBcpBlocks werden nur in Oracle-Releases verwendet.
Bemerkungen
Dieser Parameter wird verwendet, um die Leistung von bcp über Oracle Publisher zu optimieren.
-HRBcpBlockSizeblock_size
Die Größe jedes BCP-Datenblocks in KB. Der Standardwert ist 64 KB. HRBcpBlocks werden nur in Oracle-Releases verwendet.
Bemerkungen
Dieser Parameter wird verwendet, um die Leistung von bcp über Oracle Publisher zu optimieren.
-HRBcpDynamicBlocks
Gibt an, ob die Größe jedes BCP-Datenblocks dynamisch wachsen kann. HRBcpBlocks werden nur in Oracle-Releases verwendet.
Bemerkungen
Dieser Parameter wird verwendet, um die Leistung von bcp über Oracle Publisher zu optimieren.
-KeepAliveMessageInterval keep_alive_interval
Die Zeit in Sekunden, die der Snapshot-Agent wartet, bevor er eine „Warten auf Back-End-Nachricht“ in der MSsnapshot_history-Tabelle protokolliert. Der Standardwert beträgt 300 Sekunden.
-LoginTimeOut login_time_out_seconds
Die Anzahl der Sekunden, die gewartet werden muss, bevor die Anmeldung abläuft. Der Standardwert beträgt 15 Sekunden.
-MaxBcpThreads number_of_threads
Gibt die Anzahl der Massenkopiervorgänge an, die parallel ausgeführt werden können. Die maximale Anzahl gleichzeitiger Threads und ODBC-Verbindungen ist der kleinere von MaxBcpThreads oder der Anzahl der Massenkopieranforderungen, die in Synchronisierungstransaktionen in der Verteilungsdatenbank angezeigt werden. Der Wert von MaxBcpThreads muss größer als 0 sein und es gibt keine fest codierte Obergrenze. Der Standardwert ist 1.
- MaxNetworkOptimization [ 0|1]
Ob irrelevante Löschvorgänge an den Abonnenten gesendet werden sollen. Ein unabhängiger Löschvorgang ist ein DELETE-Befehl, der an den Abonnenten für Zeilen gesendet wird, die nicht zur Abonnentenpartition gehören. Irrelevante Löschvorgänge haben keinen Einfluss auf die Datenintegrität oder -konvergenz, können jedoch unnötigen Netzwerkverkehr verursachen. Der Standardwert von MaxNetworkOptimization ist 0. Wenn Sie MaxNetworkOptimization auf 1 setzen, wird die Wahrscheinlichkeit unabhängiger Löschvorgänge minimiert, wodurch der Netzwerkverkehr reduziert und die Netzwerkoptimierung maximiert wird. Wenn mehrere Ebenen von Join-Filtern und komplexen Teilmengenfiltern vorhanden sind, kann das Festlegen dieses Parameters auf 1 auch die Speicherung von Metadaten erhöhen und zu einer Verringerung der Publisher-Leistung führen. Sie sollten Ihre Replikationstopologie sorgfältig bewerten und MaxNetworkOptimization nur dann auf 1 setzen, wenn der Netzwerkverkehr, der durch unabhängige Löschvorgänge verursacht wird, unannehmbar hoch ist.
Hinweise
Das Setzen dieses Parameters auf 1 ist nur dann sinnvoll, wenn die Synchronisierungsoptimierungsoption für Zusammenführungspublikationen (@keep_partition_changes Parameter von sp_addmergepublication (Transact-SQL)) auf true gesetzt ist.
-Output output_path_and_file_name
Der Pfad zur Proxy-Ausgabedatei. Wenn kein Dateiname angegeben wird, wird diese Ausgabe an die Konsole gesendet. Wenn der angegebene Dateiname bereits existiert, wird die Ausgabe an die Datei angehängt.
-OutputVerboseLevel [ 0|2]
Gibt an, ob die Ausgabe ausführlichen Inhalt liefern soll.
OutputVerboseLevel-Wert
Beschreibung
0
Es werden nur Fehlermeldungen ausgegeben.
1 (Standard)
Alle Fortschrittsberichtsmeldungen ausgeben (Standard).
2
Gibt alle Fehlermeldungen und Fortschrittsberichtsmeldungen aus, was beim Debuggen nützlich ist.
-PacketSize packet_size
Die Paketgröße in Bytes, die vom Snapshot-Agent beim Herstellen einer Verbindung mit SQL Server verwendet wird. Der Standardwert beträgt 8192 Byte.
Hinweise
Ändern Sie die Paketgröße nicht, es sei denn, Sie sind sicher, dass dadurch die Leistung verbessert wird. Für die meisten Anwendungen ist die Standardpaketgröße der optimale Wert.
-ProfileName profile_name
Gibt das Proxy-Profil an, das für Proxy-Parameter verwendet wird. Wenn ProfileName NULL ist, wird das Agentenprofil deaktiviert. Wenn ProfileName nicht angegeben ist, wird das Standardprofil für diesen Agententyp verwendet.
-PublisherDB publisher_database
Der Name der Veröffentlichungsdatenbank. Oracle Publisher unterstützt diesen Parameter nicht.
-PublisherDeadlockPriority [-1|0|1]
Die Priorität für den Snapshot-Agent, eine Verbindung zum Herausgeber herzustellen, wenn ein Deadlock auftritt. Dieser Parameter wird angegeben, um ein Deadlock-Problem zu beheben, das während der Snapshot-Generierung zwischen dem Snapshot-Agent und der Benutzeranwendung auftritt.
PublisherDeadlockPriority Value
Beschreibung
-1
Im Falle eines Deadlocks auf dem Publisher hat die Anwendung Vorrang, nicht der Snapshot-Agent.
0 (Standard)
Keine Priorität zugewiesen.
1
Wenn beim Herausgeber ein Deadlock auftritt, hat der Snapshot-Agent Vorrang.
-PublisherFailoverPartner Servername[Instanzname]
Gibt die SQL Server-Failover-Partnerinstanz an, die an einer Datenbankspiegelungssitzung mit der Veröffentlichung teilnimmt Datenbank.
-PublisherLogin publisher_login
Der Anmeldename, der beim Herstellen einer Verbindung zum Herausgeber mithilfe der SQL Server-Authentifizierung verwendet werden soll.
-PublisherPassword publisher_password
Das Kennwort, das bei der Verbindung mit dem Herausgeber mithilfe der SQL Server-Authentifizierung verwendet werden soll. .
-PublisherSecurityMode [ 0|.
Gibt den Sicherheitsmodus des Herausgebers an. Ein Wert von 0 gibt die SQL Server-Authentifizierung an (Standardeinstellung) und ein Wert von 1 gibt den Windows-Authentifizierungsmodus an.
-QueryTimeOut query_time_out_seconds
Die Anzahl der Sekunden, die gewartet werden muss, bevor die Abfrage abläuft. Der Standardwert beträgt 1800 Sekunden.
-ReplicationType [ 1| 2]
Gibt den Typ der Replikation an. Ein Wert von 1 bedeutet Transaktionsreplikation und ein Wert von 2 bedeutet Merge-Replikation.
-RowDelimiter row_delimiter
Ein Zeichen oder eine Zeichenfolge, die zum Markieren des Endes einer Zeile in SQL Server-Massenkopierdatendateien verwendet wird. Der Standardwert ist n<,@g>n.
-StartQueueTimeout start_queue_timeout_seconds
Wenn die Anzahl der gleichzeitig ausgeführten dynamischen Snapshot-Prozesse den durch das @max_concurrent_dynamic_snapshots-Attribut von sp_addmergepublication (Transact-SQL) festgelegten Grenzwert erreicht, Die maximale Anzahl an Sekunden, die der Snapshot-Agent wartet. Wenn der Snapshot-Agent nach der maximalen Anzahl von Sekunden immer noch wartet, wird der Snapshot-Agent beendet. Ein Wert von 0 bedeutet, dass der Agent auf unbestimmte Zeit wartet, obwohl dies abgebrochen werden kann.
- UsePerArticleContentsView use_per_article_contents_view
Dieser Parameter ist veraltet und wird aus Gründen der Abwärtskompatibilität unterstützt.
Datenintegrität der SQL-Server-Datenbank
Zusammenfassung der Verwendung häufig verwendeter Funktionen in der SQL Server-Methode
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung des SQL Server 2016 Snapshot Agent-Prozesses. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!