Verschieben von Daten zwischen horizontal hochskalierten ClouddatenbankenMoving data between scaled-out cloud databases

Wenn Sie Software- oder Dienstentwickler sind, und plötzlich eine enorme Nachfrage nach Ihrer App entsteht, müssen Sie das Wachstum anpassen.If you are a Software as a Service developer, and suddenly your app undergoes tremendous demand, you need to accommodate the growth. So fügen Sie weitere Datenbanken (Shards) hinzu.So you add more databases (shards). Wie verteilen Sie die Daten ohne Unterbrechung der Datenintegrität neu auf die neuen Datenbanken?How do you redistribute the data to the new databases without disrupting the data integrity? Verschieben Sie Daten mit dem Split-Merge-Tool aus eingeschränkten Datenbanken in die neuen Datenbanken.Use the split-merge tool to move data from constrained databases to the new databases.

Das Split-Merge-Tool wird als Azure-Webdienst ausgeführt.The split-merge tool runs as an Azure web service. Ein Administrator oder Entwickler verwendet das Tool zum Verschieben von Shardlets (Daten aus einem Shard) zwischen verschiedenen Datenbanken (Shards).An administrator or developer uses the tool to move shardlets (data from a shard) between different databases (shards). Das Tool verwendet die Shard-Zuordnungsverwaltung, um die Dienstmetadatendatenbank zu verwalten und konsistente Zuordnungen sicherzustellen.The tool uses shard map management to maintain the service metadata database, and ensure consistent mappings.

Übersicht

DownloadDownload

Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMergeMicrosoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge

DokumentationDocumentation

  1. Lernprogramm zum Split-Merge-Tool für elastische DatenbankenElastic database Split-Merge tool tutorial
  2. Split-Merge-SicherheitskonfigurationSplit-Merge security configuration
  3. Split-Merge-SicherheitsüberlegungenSplit-merge security considerations
  4. Shard-ZuordnungsverwaltungShard map management
  5. Migrieren von vorhandenen Datenbanken zu horizontaler HochskalierungMigrate existing databases to scale-out
  6. Tools für elastische DatenbankenElastic database tools
  7. Tools für elastische Datenbanken – GlossarElastic Database tools glossary

Warum sollten Sie das Split-Merge-Tool verwenden?Why use the split-merge tool

  • FlexibilitätFlexibility

    Anwendungen müssen die Flexibilität über die Grenzen einer einzelnen Azure SQL DB-Datenbank hinaus ausdehnen.Applications need to stretch flexibly beyond the limits of a single Azure SQL DB database. Verwenden Sie das Tool nach Bedarf, um Daten in neue Datenbanken zu verschieben und dabei die Integrität beizubehalten.Use the tool to move data as needed to new databases while retaining integrity.

  • Teilen, um zu wachsenSplit to grow

    Wenn die Gesamtkapazität erhöht werden soll, um explosionsartiges Wachstum in den Griff zu bekommen, schaffen Sie zusätzliche Kapazität durch Partitionieren der Daten und deren Verteilung über eine zunehmend größere Anzahl von Datenbanken, bis die Kapazitätsanforderungen erfüllt sind.To increase overall capacity to handle explosive growth, create additional capacity by sharding the data and by distributing it across incrementally more databases until capacity needs are fulfilled. Dies ist ein hervorragendes Beispiel für das Split-Feature.This is a prime example of the split feature.

  • Zusammenführen zum VerkleinernMerge to shrink

    Die Kapazität muss aufgrund saisonaler Schwankungen des Geschäftsbetriebs verkleinert werden.Capacity needs shrink due to the seasonal nature of a business. Mit dem Tool können Sie auf eine geringere Anzahl Einheiten zentral herunterskalieren, wenn das Geschäft nachlässt.The tool lets you scale down to fewer scale units when business slows. Die Funktion "merge" des Split-Merge-Diensts von Elastic Scale geht auf dieses Szenario ein.The ‘merge’ feature in the Elastic Scale split-merge Service covers this requirement.

  • Verwalten von Hotspots durch Verschieben von ShardletsManage hotspots by moving shardlets

    Wenn mehrere Mandanten in einer Datenbank verwaltet werden, kann die Zuweisung von Shardlets zu Shards bei einigen Shards zu Kapazitätsengpässen führen.With multiple tenants per database, the allocation of shardlets to shards can lead to capacity bottlenecks on some shards. Dann müssen Shards neu zugewiesen oder stark in Anspruch genommene Shardlets in neue oder weniger genutzte Shards verschoben werden.This requires re-allocating shardlets or moving busy shardlets to new or less utilized shards.

Konzepte und wichtige FeaturesConcepts & key features

  • Von Kunden gehostete DiensteCustomer-hosted services

    Split-Merge wird als vom Kunden gehosteter Dienst bereitgestellt.The split-merge is delivered as a customer-hosted service. Sie müssen den Dienst in Ihrem Microsoft Azure-Abonnement bereitstellen und hosten.You must deploy and host the service in your Microsoft Azure subscription. Das Paket, das Sie von NuGet herunterladen, enthält eine Vorlage, die mit den Informationen für Ihre Bereitstellung ausgefüllt werden muss.The package you download from NuGet contains a configuration template to complete with the information for your specific deployment. Weitere Informationen finden Sie im Split-Merge-Tutorial .See the split-merge tutorial for details. Da der Dienst im Azure-Abonnement ausgeführt wird, können Sie die meisten Sicherheitsaspekte des Diensts steuern und konfigurieren.Since the service runs in your Azure subscription, you can control and configure most security aspects of the service. Die Standardvorlage enthält die Optionen zum Konfigurieren von SSL, der zertifikatbasierten Clientauthentifizierung, der Verschlüsselung für gespeicherte Anmeldeinformationen, des DoS-Schutzes und von IP-Einschränkungen.The default template includes the options to configure SSL, certificate-based client authentication, encryption for stored credentials, DoS guarding and IP restrictions. Weitere Informationen zu Sicherheitsaspekten finden Sie im folgenden Dokument Split-Merge-Sicherheitskonfiguration.You can find more information on the security aspects in the following document split-merge security configuration.

    Der standardmäßig bereitgestellte Dienst wird mit einer Workerrolle und einer Webrolle ausgeführt.The default deployed service runs with one worker and one web role. Für beide wird die VM-Größe A1 in Azure Cloud Services verwendet.Each uses the A1 VM size in Azure Cloud Services. Sie können diese Einstellungen zwar nicht bei der Bereitstellung des Pakets ändern, nach einer erfolgreichen Bereitstellung können die Einstellungen jedoch im ausgeführten Clouddienst (über das Azure-Portal) geändert werden.While you cannot modify these settings when deploying the package, you could change them after a successful deployment in the running cloud service, (through the Azure portal). Beachten Sie, dass die Workerrolle aus technischen Gründen nicht für mehr als eine einzelne Instanz konfiguriert werden darf.Note that the worker role must not be configured for more than a single instance for technical reasons.

  • Integration in ShardzuordnungShard map integration

    Der Split-Merge-Dienst interagiert mit der Shardzuordnung der Anwendung.The split-merge service interacts with the shard map of the application. Wenn der Split-Merge-Dienst zum Teilen oder Zusammenführen von Bereichen oder zum Verschieben von Shardlets zwischen Shards verwendet wird, aktualisiert der Dienst automatisch die Shardzuordnung.When using the split-merge service to split or merge ranges or to move shardlets between shards, the service automatically keeps the shard map up-to-date. Zu diesem Zweck stellt der Dienst eine Verbindung mit der Verwaltungsdatenbank für die Shard-Zuordnung der Anwendung her und verwaltet die Bereiche und Zuordnungen, während Split/Merge/Move-Anforderungen ausgeführt werden.To do so, the service connects to the shard map manager database of the application and maintains ranges and mappings as split/merge/move requests progress. Dadurch wird sichergestellt, dass die Shard-Zuordnung während der Ausführung von Split-Merge-Vorgängen immer eine aktuelle Ansicht zeigt.This ensures that the shard map always presents an up-to-date view when split-merge operations are going on. Split-, Merge- und Move-Vorgänge werden implementiert, indem ein Batch von Shardlets von der Quell-Shard in die Ziel-Shard verschoben wird.Split, merge and shardlet movement operations are implemented by moving a batch of shardlets from the source shard to the target shard. Während des Verschiebens werden die Shardlets, die im aktuellen Batch enthalten sind, in der Shard-Zuordnung als offline markiert und stehen für datenabhängige Routingverbindungen mit der OpenConnectionForKey -API nicht zur Verfügung.During the shardlet movement operation the shardlets subject to the current batch are marked as offline in the shard map and are unavailable for data-dependent routing connections using the OpenConnectionForKey API.

  • Konsistente ShardletverbindungenConsistent shardlet connections

    Wenn die Datenverschiebung für einen neuen Batch von Shardlets gestartet wird, werden alle von der Shardzuordnung bereitgestellten datenabhängigen Routingverbindungen mit der Shard getrennt, in der das Shardlet gespeichert ist. Nachfolgende Verbindungen von den Shardzuordnungs-APIs mit diesen Shardlets werden beim Ausführen der Datenverschiebung blockiert, um Inkonsistenzen zu vermeiden.When data movement starts for a new batch of shardlets, any shard-map provided data-dependent routing connections to the shard storing the shardlet are killed and subsequent connections from the shard map APIs to the shardlets are blocked while the data movement is in progress in order to avoid inconsistencies. Verbindungen mit anderen Shardlets in der gleichen Shard werden auch beendet, werden jedoch bei einem erneuten Versuch sofort hergestellt.Connections to other shardlets on the same shard will also get killed, but will succeed again immediately on retry. Nachdem der Batch verschoben worden ist, werden die Shardlets für die Ziel-Shard wieder als online markiert, und die Quelldaten werden aus der Quell-Shard entfernt.Once the batch is moved, the shardlets are marked online again for the target shard and the source data is removed from the source shard. Der Dienst durchläuft diese Schritte für jeden Batch, bis alle Shardlets verschoben worden sind.The service goes through these steps for every batch until all shardlets have been moved. Dies führt dazu, dass im Lauf eines Split/Merge/Move-Vorgangs mehrmals Verbindungen getrennt werden.This will lead to several connection kill operations during the course of the complete split/merge/move operation.

  • Verwalten der ShardletverfügbarkeitManaging shardlet availability

    Durch die Beschränkung der oben beschriebenen Trennung von Verbindungen auf den aktuellen Batch von Shardlets, wird der Bereich der Nichtverfügbarkeit zu einem gegebenen Zeitpunkt jeweils auf eine Gruppe von Shardlets beschränkt.Limiting the connection killing to the current batch of shardlets as discussed above restricts the scope of unavailability to one batch of shardlets at a time. Dieses Vorgehen wird einem Ansatz vorgezogen, bei dem die komplette Shard während des gesamten Split- oder Merge-Vorgangs für alle zugehörigen Shardlets offline bleibt.This is preferred over an approach where the complete shard would remain offline for all its shardlets during the course of a split or merge operation. Die Batchgröße, die als Anzahl unterschiedlicher Shardlets, die gleichzeitig verschoben werden sollen, definiert ist, ist ein Konfigurationsparameter.The size of a batch, defined as the number of distinct shardlets to move at a time, is a configuration parameter. Sie kann für jeden Split- und Merge-Vorgang von der Verfügbarkeit und den Leistungsanforderungen der Anwendung abhängig definiert werden.It can be defined for each split and merge operation depending on the application’s availability and performance needs. Beachten Sie, dass der Bereich, der in der Shard-Zuordnung blockiert wird, unter Umständen größer als die angegebene Batchgröße ist.Note that the range that is being locked in the shard map may be larger than the batch size specified. Dies ist so, weil der Dienst die Bereichsgröße so wählt, dass die tatsächliche Anzahl der Sharding-Schlüsselwerte in den Daten ungefähr der Batchgröße entspricht.This is because the service picks the range size such that the actual number of sharding key values in the data approximately matches the batch size. Dies ist besonders bei spärlich belegten Sharding-Schlüsseln zu beachten.This is important to remember in particular for sparsely populated sharding keys.

  • MetadatenspeicherungMetadata storage

    Der Split-Merge-Dienst verwendet eine Datenbank, um seinen Status zu verwalten und Protokolle während der Anforderungsverarbeitung zu speichern.The split-merge service uses a database to maintain its status and to keep logs during request processing. Der Benutzer erstellt diese Datenbank in seinem Abonnement und stellt die zugehörige Verbindungszeichenfolge in der Konfigurationsdatei für die Dienstbereitstellung bereit.The user creates this database in their subscription and provides the connection string for it in the configuration file for the service deployment. Administratoren der Organisation des Benutzers können auch eine Verbindung mit dieser Datenbank herstellen, um die Bearbeitung der Anforderung zu überprüfen und detaillierte Informationen zu möglichen Fehlern zu untersuchen.Administrators from the user’s organization can also connect to this database to review request progress and to investigate detailed information regarding potential failures.

  • Sharding-UnterstützungSharding-awareness

    Der Split-Merge-Dienst unterscheidet zwischen (1) partitionierten Tabellen, (2) Verweistabellen und (3) normalen Tabellen.The split-merge service differentiates between (1) sharded tables, (2) reference tables, and (3) normal tables. Die Semantik eines Split/Merge/Move-Vorgangs hängt vom Typ der verwendeten Tabelle ab und wird wie folgt definiert:The semantics of a split/merge/move operation depend on the type of the table used and are defined as follows:

    • ShardtabellenSharded tables

      Mit Split-, Merge- und Move-Vorgängen werden Shardlets vom Quell- zum Ziel-Shard verschoben.Split, merge, and move operations move shardlets from source to target shard. Nach dem erfolgreichen Abschluss der gesamten Anforderung sind diese Shardlets nicht mehr in der Quelle vorhanden.After successful completion of the overall request, those shardlets are no longer present on the source. Beachten Sie, dass die Zieltabellen in der Ziel-Shard vorhanden sein müssen und vor der Verarbeitung des Vorgangs keine Daten im Zielbereich enthalten dürfen.Note that the target tables need to exist on the target shard and must not contain data in the target range prior to processing of the operation.

    • VerweistabellenReference tables

      Bei Verweistabellen werden die Daten mit Split-, Merge- und Move-Vorgängen aus dem Quell- in den Ziel-Shard kopiert.For reference tables, the split, merge and move operations copy the data from the source to the target shard. Beachten Sie jedoch, dass die Ziel-Shard für eine bestimmte Tabelle nicht geändert wird, wenn in der Ziel-Shard in dieser Tabelle bereits Zeilen vorhanden sind.Note, however, that no changes occur on the target shard for a given table if any row is already present in this table on the target. Die Tabelle muss leer sein, damit Kopiervorgänge aus der Verweistabelle verarbeitet werden.The table has to be empty for any reference table copy operation to get processed.

    • Andere TabellenOther Tables

      Andere Tabellen können für die Quelle oder das Ziel eines Split- und Merge-Vorgangs vorhanden sein.Other tables can be present on either the source or the target of a split and merge operation. Der Split-Merge-Dienst ignoriert diese Tabellen bei Datenverschiebungen oder Kopiervorgängen.The split-merge service disregards these tables for any data movement or copy operations. Beachten Sie jedoch, dass sie diese Vorgänge bei Einschränkungen beeinträchtigen können.Note, however, that they can interfere with these operations in case of constraints.

      Die Informationen zu Verweistabellen und Shardtabellen werden von den SchemaInfo-APIs für die Shardzuordnung bereitgestellt.The information on reference vs. sharded tables is provided by the SchemaInfo APIs on the shard map. Das folgende Beispiel veranschaulicht die Verwendung dieser APIs anhand eines bestimmten Shardzuordnungs-Manager-Objekts:The following example illustrates the use of these APIs on a given shard map manager object:

      // Create the schema annotations
      SchemaInfo schemaInfo = new SchemaInfo();
      
      // Reference tables
      schemaInfo.Add(new ReferenceTableInfo("dbo", "region"));
      schemaInfo.Add(new ReferenceTableInfo("dbo", "nation"));
      
      // Sharded tables
      schemaInfo.Add(new ShardedTableInfo("dbo", "customer", "C_CUSTKEY"));
      schemaInfo.Add(new ShardedTableInfo("dbo", "orders", "O_CUSTKEY"));
      // Publish
      smm.GetSchemaInfoCollection().Add(Configuration.ShardMapName, schemaInfo);
      

      Die Tabellen "region" und "nation" sind als Verweistabellen definiert und werden mit Split/Merge/Move-Vorgängen kopiert.The tables ‘region’ and ‘nation’ are defined as reference tables and will be copied with split/merge/move operations. "customer" und "orders" sind dagegen als partitionierte Tabellen definiert.‘customer’ and ‘orders’ in turn are defined as sharded tables. C_CUSTKEY und O_CUSTKEY dienen als Shardingschlüssel.C_CUSTKEY and O_CUSTKEY serve as the sharding key.

  • Referenzielle IntegritätReferential Integrity

    Der Split-Merge-Dienst analysiert Abhängigkeiten zwischen Tabellen und verwendet Fremdschlüssel und Primärschlüsselbeziehungen, um die Vorgänge für das Verschieben von Verweistabellen und Shardlets bereitzustellen.The split-merge service analyzes dependencies between tables and uses foreign key-primary key relationships to stage the operations for moving reference tables and shardlets. Im Allgemeinen werden zuerst die Verweistabellen in der Reihenfolge ihrer Abhängigkeit kopiert, und dann werden die Shardlets in der Reihenfolge ihrer Abhängigkeiten innerhalb der einzelnen Batches kopiert.In general, reference tables are copied first in dependency order, then shardlets are copied in order of their dependencies within each batch. Dies ist erforderlich, damit Fremdschlüssel-Primärschlüssel-Einschränkungen für die Ziel-Shard berücksichtigt werden, wenn neue Daten eingehen.This is necessary so that FK-PK constraints on the target shard are honored as the new data arrives.

  • Konsistenz und Fertigstellung der ShardzuordnungShard Map Consistency and Eventual Completion

    Bei Fehlern nimmt der Split-Merge-Dienst die Vorgänge nach einem Ausfall wieder auf und versucht, die aktuell ausstehenden Anforderungen abzuschließen.In the presence of failures, the split-merge service resumes operations after any outage and aims to complete any in progress requests. Allerdings können nicht behebbare Fehler auftreten, z. B. wenn die Ziel-Shard verloren geht oder irreparabel beschädigt wird.However, there may be unrecoverable situations, e.g., when the target shard is lost or compromised beyond repair. Unter diesen Umständen können sich einige Shardlets, die verschoben werden sollten, weiterhin in der Quell-Shard befinden.Under those circumstances, some shardlets that were supposed to be moved may continue to reside on the source shard. Der Dienst stellt sicher, dass Shardlet-Zuordnungen erst aktualisiert werden, nachdem die erforderlichen Daten erfolgreich in das Ziel kopiert wurden.The service ensures that shardlet mappings are only updated after the necessary data has been successfully copied to the target. Shardlets werden erst dann in der Quelle gelöscht, nachdem alle Daten in das Ziel kopiert und die zugehörigen Zuordnungen erfolgreich aktualisiert wurden.Shardlets are only deleted on the source once all their data has been copied to the target and the corresponding mappings have been updated successfully. Der Löschvorgang erfolgt im Hintergrund, während der Bereich bereits in der Ziel-Shard online ist.The deletion operation happens in the background while the range is already online on the target shard. Der Split-Merge-Dienst stellt immer die Richtigkeit der in der Shard-Zuordnung gespeicherten Zuordnungen sicher.The split-merge service always ensures correctness of the mappings stored in the shard map.

Split-Merge-BenutzeroberflächeThe split-merge user interface

Das Split-Merge-Dienstpaket enthält eine Workerrolle und eine Webrolle.The split-merge service package includes a worker role and a web role. Mit der Webrolle werden Split-Merge-Anforderungen interaktiv gesendet.The web role is used to submit split-merge requests in an interactive way. Die Benutzeroberfläche enthält die folgenden Hauptkomponenten:The main components of the user interface are as follows:

  • Operation TypeOperation Type

    Dies ist ein Optionsfeld, das die Art des Vorgangs steuert, der vom Dienst für diese Anforderung ausgeführt wird.The operation type is a radio button that controls the kind of operation performed by the service for this request. Sie können zwischen Teilungs-, Zusammenführungs- und Verschiebungsszenarien wählen.You can choose between the split, merge and move scenarios. Sie können auch einen zuvor gesendeten Vorgang abbrechen.You can also cancel a previously submitted operation. Sie können Anforderungen für Shard-Zuordnungen teilen, zusammenführen und verschieben.You can use split, merge and move requests for range shard maps. Die Liste der Shard-Zuordnungen unterstützt nur Verschiebevorgänge.List shard maps only support move operations.

  • Shard MapShard Map

    Der nächste Abschnitt von Anforderungsparametern enthält Informationen zu der Shardzuordnung und der Datenbank, in der Ihre Shardzuordnung gehostet wird.The next section of request parameters covers information about the shard map and the database hosting your shard map. Sie müssen den Namen des Azure SQL-Datenbank-Servers und der Datenbank, in der die Shard-Zuordnung gehostet wird, die Anmeldeinformationen zum Herstellen einer Verbindung mit der Shard-Zuordnungsdatenbank und schließlich den Namen der Shard-Zuordnung angeben.In particular, you need to provide the name of the Azure SQL Database server and database hosting the shardmap, credentials to connect to the shard map database, and finally the name of the shard map. Der Vorgang akzeptiert momentan nur einen einzigen Satz von Anmeldeinformationen.Currently, the operation only accepts a single set of credentials. Diese Anmeldeinformationen müssen über ausreichende Berechtigungen verfügen, um die Shard-Zuordnung und die Benutzerdaten in den Shards ändern zu können.These credentials need to have sufficient permissions to perform changes to the shard map as well as to the user data on the shards.

  • Source Range (Split und Merge)Source Range (split and merge)

    Ein Split- und Merge-Vorgang verarbeitet einen Bereich mithilfe seines niedrigen und hohen Schlüssels.A split and merge operation processes a range using its low and high key. Um einen Vorgang mit einem unbegrenzt hohen Schlüsselwert anzugeben, aktivieren Sie das Kontrollkästchen "High key is max", und lassen Sie das Feld für den hohen Schlüssel leer.To specify an operation with an unbounded high key value, check the “High key is max” check box and leave the high key field empty. Die von Ihnen angegebenen Bereichsschlüsselwerte müssen nicht genau mit einer Zuordnung und ihren Grenzen in Ihrer Shard-Zuordnung übereinstimmen.The range key values that you specify do not need to precisely match a mapping and its boundaries in your shard map. Wenn Sie keine Bereichsgrenzen angeben, leitet der Dienst den nächsten Bereich automatisch für Sie ab.If you do not specify any range boundaries at all the service will infer the closest range for you automatically. Sie können mit dem PowerShell-Skript GetMappings.ps1 die aktuellen Zuordnungen aus einer gegebenen Shard-Zuordnungen abrufen.You can use the GetMappings.ps1 PowerShell script to retrieve the current mappings in a given shard map.

  • Split Source Behavior (Split)Split Source Behavior (split)

    Definieren Sie bei Split-Vorgängen, an welcher Stelle der Quellbereich geteilt werden soll.For split operations, define the point to split the source range. Hierzu geben Sie den Sharding-Schlüssel an, an dem die Aufteilung erfolgen soll.You do this by providing the sharding key where you want the split to occur. Definieren sie mit dem Optionsfeld, ob der untere Teil des Bereichs (exklusive Aufteilungsschlüssel) oder der obere Teil (inklusive Aufteilungsschlüssel) verschoben werden soll.Use the radio button specify whether you want the lower part of the range (excluding the split key) to move, or whether you want the upper part to move (including the split key).

  • Source Shardlet (Move)Source Shardlet (move)

    Move-Vorgänge unterscheiden sich von Split- oder Merge-Vorgängen, da hier kein Bereich zum Beschreiben der Quelle angegeben werden muss.Move operations are different from split or merge operations as they do not require a range to describe the source. Die Quelle für das Verschieben wird einfach durch den Sharding-Schlüsselwert identifiziert, der verschoben werden soll.A source for move is simply identified by the sharding key value that you plan to move.

  • Target Shard (Split)Target Shard (split)

    Nachdem Sie die Informationen zur Quelle des Split-Vorgangs angegeben haben, müssen Sie definieren, wohin die Daten kopiert werden sollen, indem Sie den Azure SQL-Datenbankserver und den Datenbanknamen des Ziels angeben.Once you have provided the information on the source of your split operation, you need to define where you want the data to be copied to by providing the Azure SQL Db server and database name for the target.

  • Target Range (Merge)Target Range (merge)

    Merge-Vorgänge verschieben Shardlets in einen vorhandenen Shard.Merge operations move shardlets to an existing shard. Sie identifizieren die vorhandene Shard durch Angabe der Bereichsgrenzen des vorhandenen Bereichs, mit dem zusammengeführt werden soll.You identify the existing shard by providing the range boundaries of the existing range that you want to merge with.

  • Batch SizeBatch Size

    Die Batchgröße steuert die Anzahl der Shardlets, die während der Datenverschiebung gleichzeitig offline geschaltet werden.The batch size controls the number of shardlets that will go offline at a time during the data movement. Dies ist ein ganzzahliger Wert, wobei Sie kleinere Werte angeben können, wenn Sie lange Ausfallzeiten für Shardlets vermeiden möchten.This is an integer value where you can use smaller values when you are sensitive to long periods of downtime for shardlets. Bei Angabe größerer Werte vergrößert sich der Zeitraum, über den ein bestimmtes Shardlet offline ist, die Leistung kann dadurch jedoch verbessert werden.Larger values will increase the time that a given shardlet is offline but may improve performance.

  • Operation ID (Cancel)Operation ID (Cancel)

    Wenn Sie einen laufenden Vorgang nicht mehr benötigen, können Sie ihn abbrechen, indem Sie in diesem Feld die Vorgangs-ID angeben.If you have an ongoing operation that is no longer needed, you can cancel the operation by providing its operation ID in this field. Sie können die Vorgangs-ID der Anforderungsstatustabelle (siehe Abschnitt 8.1) oder der Ausgabe in dem Webbrowser entnehmen, mit dem Sie die Anforderung übermittelt haben.You can retrieve the operation ID from the request status table (see Section 8.1) or from the output in the web browser where you submitted the request.

Anforderungen und EinschränkungenRequirements and Limitations

Die aktuelle Implementierung des Split-Merge-Diensts unterliegt den folgenden Anforderungen und Einschränkungen:The current implementation of the split-merge service is subject to the following requirements and limitations:

  • Die Shards müssen vorhanden und in der Shardzuordnung registriert sein, damit ein Split-Merge-Vorgang für diese Shards ausgeführt werden kann.The shards need to exist and be registered in the shard map before a split-merge operation on these shards can be performed.
  • Der Dienst erstellt derzeit nicht automatisch Tabellen oder andere Datenbankobjekte im Rahmen der Vorgänge.The service does not create tables or any other database objects automatically as part of its operations. Dies bedeutet, dass das Schema für alle Shardtabellen und Verweistabellen im Zielshard vorhanden sein muss, bevor ein Teilungs-/Zusammenführungs-/Verschiebevorgang ausgeführt werden kann.This means that the schema for all sharded tables and reference tables needs to exist on the target shard prior to any split/merge/move operation. Sharding-Tabellen müssen insbesondere in dem Bereich leer sein, in dem die neuen Shardlets durch einen Split/Merge/Move-Vorgang hinzugefügt werden sollen.Sharded tables in particular are required to be empty in the range where new shardlets are to be added by a split/merge/move operation. Andernfalls schlägt die anfänglichen Konsistenzprüfung der Ziel-Shard für den Vorgang fehl.Otherwise, the operation will fail the initial consistency check on the target shard. Beachten Sie außerdem, dass Verweisdaten nur kopiert werden, wenn die Verweistabelle leer ist, und dass die Konsistenz in Bezug auf andere gleichzeitige Schreibvorgänge in den Verweistabellen nicht garantiert wird.Also note that reference data is only copied if the reference table is empty and that there are no consistency guarantees with regard to other concurrent write operations on the reference tables. Es wird empfohlen, dass beim Ausführen von Split/Merge-Vorgängen keine anderen Schreibvorgänge Änderungen an den Verweistabellen vornehmen.We recommend this: when running split/merge operations, no other write operations make changes to the reference tables.
  • Der Dienst verwendet die Zeilenidentität, die durch einen eindeutigen Index oder Schlüssel mit dem Shardingschlüssel gegeben ist, zur Verbesserung der Leistung und Zuverlässigkeit für große Shardlets.The service relies on row identity established by a unique index or key that includes the sharding key to improve performance and reliability for large shardlets. Dadurch kann der Dienst Daten sogar in noch feineren Unterteilungen als den Sharding-Schlüsselwert verschieben.This allows the service to move data at an even finer granularity than just the sharding key value. Dadurch lassen sich die maximale Größe des für Protokolle erforderlichen Speicherplatzes und die Anzahl von Sperren verringern, die während des Vorgangs erforderlich sind.This helps to reduce the maximum amount of log space and locks that are required during the operation. Ziehen Sie das Erstellen eines eindeutigen Index oder eines Primärschlüssels unter Einbeziehung des Sharding-Schlüssels für eine bestimmte Tabelle in Betracht, wenn Sie diese Tabelle mit Split/Merge/Move-Anforderungen verwenden möchten.Consider creating a unique index or a primary key including the sharding key on a given table if you want to use that table with split/merge/move requests. Um die Leistung zu verbessern, sollte der Sharding-Schlüssel die führende Spalte im Schlüssel bzw. Index bilden.For performance reasons, the sharding key should be the leading column in the key or the index.
  • Während der Verarbeitung der Anforderung können in Quell- und Ziel-Shard Shardlet-Daten vorhanden sein.During the course of request processing, some shardlet data may be present both on the source and the target shard. Dies ist zum Schutz vor Ausfällen während der Shardletverschiebung erforderlich.This is necessary to protect against failures during the shardlet movement. Durch die Integration von Split-Merge in die Shardzuordnung wird sichergestellt, dass in Verbindungen, die mit der OpenConnectionForKey -Methode über die APIs für datenabhängiges Routing für die Shardzuordnung hergestellt werden, keine inkonsistenten Zwischenzustände auftreten.The integration of split-merge with the shard map ensures that connections through the data-dependent routing APIs using the OpenConnectionForKey method on the shard map do not see any inconsistent intermediate states. Wenn eine Verbindung mit dem Quell- oder Ziel-Shard allerdings nicht unter Verwendung der OpenConnectionForKey -Methode hergestellt wird, können während der Ausführung von Split/Merge/Move-Anforderungen inkonsistente Zwischenzustände auftreten.However, when connecting to the source or the target shards without using the OpenConnectionForKey method, inconsistent intermediate states might be visible when split/merge/move requests are going on. Abhängig vom Zeitpunkt oder der Shard, die der Verbindung zugrunde liegt, können in diesen Verbindungen unvollständige oder doppelte Ergebnisse angezeigt werden.These connections may show partial or duplicate results depending on the timing or the shard underlying the connection. Diese Einschränkung betrifft derzeit auch die Verbindungen, die durch Elastic Scale Multi-Shard-Abfragen hergestellt werden.This limitation currently includes the connections made by Elastic Scale Multi-Shard-Queries.
  • Die Metadatendatenbank für den Split-Merge-Dienst darf nicht von verschiedenen Rollen gemeinsam verwendet werden.The metadata database for the split-merge service must not be shared between different roles. Beispielsweise muss eine Rolle des Split-Merge-Diensts, die in der Staging-Umgebung ausgeführt wird, auf eine andere Metadatendatenbank als die Produktionsrolle verweisen.For example, a role of the split-merge service running in staging needs to point to a different metadata database than the production role.

AbrechnungBilling

Der Split-Merge-Dienst wird als Clouddienst in Ihrem Microsoft Azure-Abonnement ausgeführt.The split-merge service runs as a cloud service in your Microsoft Azure subscription. Daher gelten Gebühren für Clouddienste für Ihre Instanz des Diensts.Therefore charges for cloud services apply to your instance of the service. Sofern Sie nicht häufig Split/Merge/Move-Vorgänge ausführen, wird empfohlen, den Split-Merge-Clouddienst zu löschen.Unless you frequently perform split/merge/move operations, we recommend you delete your split-merge cloud service. Dadurch werden Kosten für laufende oder bereitgestellte Clouddienstinstanzen gespart.That saves costs for running or deployed cloud service instances. Sie können ihn erneut bereitstellen und Ihre sofort ausführbare Konfiguration starten, wenn Sie Split- oder Merge-Vorgänge ausführen müssen.You can re-deploy and start your readily runnable configuration whenever you need to perform split or merge operations.

ÜberwachungMonitoring

StatustabellenStatus tables

Der Split-Merge-Dienst stellt die RequestStatus -Tabelle in der Metadatenspeicher-Datenbank zum Überwachen abgeschlossener und laufender Anforderungen bereit.The split-merge Service provides the RequestStatus table in the metadata store database for monitoring of completed and ongoing requests. Die Tabelle enthält eine Zeile für jede Split-Merge-Anforderung, die an diese Instanz des Split-Merge-Diensts übermittelt wurde.The table lists a row for each split-merge request that has been submitted to this instance of the split-merge service. Sie stellt für jede Anforderung die folgende Informationen bereit:It gives the following information for each request:

  • TimestampTimestamp

    Uhrzeit und Datum, die zu dem Zeitpunkt galten, als die Anforderung gestartet wurde.The time and date when the request was started.

  • OperationIdOperationId

    Eine GUID, die die Anforderung eindeutig identifiziert.A GUID that uniquely identifies the request. Diese Anforderung kann auch verwendet werden, um den Vorgang während der Ausführung abzubrechen.This request can also be used to cancel the operation while it is still ongoing.

  • StatusStatus

    Der aktuelle Status der Anforderung.The current state of the request. Bei laufenden Anforderungen wird auch die aktuelle Phase der Anforderung angegeben.For ongoing requests, it also lists the current phase in which the request is.

  • CancelRequestCancelRequest

    Ein Flag, das angibt, ob die Anforderung abgebrochen wurde.A flag that indicates whether the request has been canceled.

  • ProgressProgress

    Ein Prozentwert, der angibt, zu welchem Anteil der Vorgang schätzungsweise fertiggestellt ist.A percentage estimate of completion for the operation. Der Wert 50 gibt an, dass der Vorgang etwa zu 50 % abgeschlossen ist.A value of 50 indicates that the operation is approximately 50% complete.

  • DetailsDetails

    Ein XML-Wert, der einen ausführlicheren Statusbericht bereitstellt.An XML value that provides a more detailed progress report. Der Statusbericht wird regelmäßig aktualisiert, wenn Zeilen aus der Quelle in das Ziel kopiert werden.The progress report is periodically updated as sets of rows are copied from source to target. Bei Fehlern oder Ausnahmen enthält diese Spalte auch detaillierte Informationen zu diesem Fehler.In case of failures or exceptions, this column also includes more detailed information about the failure.

Azure-DiagnoseAzure Diagnostics

Der Split-Merge-Dienst verwendet die Azure-Diagnose basierend auf Azure SDK 2.5 zur Überwachung und Diagnose.The split-merge service uses Azure Diagnostics based on Azure SDK 2.5 for monitoring and diagnostics. Sie können die Diagnosekonfiguration wie im folgenden Artikel beschrieben steuern: Aktivieren der Diagnose in Azure Cloud Services und Virtual Machines.You control the diagnostics configuration as explained here: Enabling Diagnostics in Azure Cloud Services and Virtual Machines. Das Downloadpaket umfasst zwei Diagnosekonfigurationen – eine für die Webrolle und eine für die Workerrolle.The download package includes two diagnostics configurations - one for the web role and one for the worker role. Sie enthalten die Definitionen zum Protokollieren von Leistungsindikatoren und die Definitionen für IIS-Protokolle, Windows-Ereignisprotokolle und Split-Merge-Anwendungsereignisprotokolle.It includes the definitions to log Performance Counters, IIS logs, Windows Event Logs, and split-merge application event logs.

Bereitstellen der DiagnoseDeploy Diagnostics

Hinweis

Dieser Artikel wurde aktualisiert und beinhaltet jetzt das neue Az-Modul von Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. Sie können das AzureRM-Modul weiterhin verwenden, das bis mindestens Dezember 2020 weiterhin Fehlerbehebungen erhält.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Weitere Informationen zum neuen Az-Modul und zur Kompatibilität mit AzureRM finden Sie unter Introducing the new Azure PowerShell Az module (Einführung in das neue Az-Modul von Azure PowerShell).To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Anweisungen zur Installation des Az-Moduls finden Sie unter Install Azure PowerShell (Installieren von Azure PowerShell).For Az module installation instructions, see Install Azure PowerShell.

Wichtig

Das PowerShell Azure Resource Manager-Modul wird von Azure SQL-Datenbank weiterhin unterstützt, aber alle zukünftigen Entwicklungen erfolgen für das Az.Sql-Modul.The PowerShell Azure Resource Manager module is still supported by Azure SQL Database, but all future development is for the Az.Sql module. Informationen zu diesen Cmdlets finden Sie unter AzureRM.Sql.For these cmdlets, see AzureRM.Sql. Die Argumente für die Befehle im Az-Modul und den AzureRm-Modulen sind im Wesentlichen identisch.The arguments for the commands in the Az module and in the AzureRm modules are substantially identical.

Führen Sie die folgenden Befehle mit Azure PowerShell aus, um die Überwachung und Diagnose anhand der mit dem NuGet-Paket bereitgestellten Diagnosekonfiguration für die Web- und Workerrolle zu aktivieren:To enable monitoring and diagnostics using the diagnostic configuration for the web and worker roles provided by the NuGet package, run the following commands using Azure PowerShell:

    $storage_name = "<YourAzureStorageAccount>"
    $key = "<YourAzureStorageAccountKey"
    $storageContext = New-AzStorageContext -StorageAccountName $storage_name -StorageAccountKey $key  
    $config_path = "<YourFilePath>\SplitMergeWebContent.diagnostics.xml"
    $service_name = "<YourCloudServiceName>"
    Set-AzureServiceDiagnosticsExtension -StorageContext $storageContext -DiagnosticsConfigurationPath $config_path -ServiceName $service_name -Slot Production -Role "SplitMergeWeb"
    $config_path = "<YourFilePath>\SplitMergeWorkerContent.diagnostics.xml"
    $service_name = "<YourCloudServiceName>"
    Set-AzureServiceDiagnosticsExtension -StorageContext $storageContext -DiagnosticsConfigurationPath $config_path -ServiceName $service_name -Slot Production -Role "SplitMergeWorker"

Weitere Informationen zum Konfigurieren und Bereitstellen von Diagnoseeinstellungen finden Sie hier: Aktivieren der Diagnose in Azure Cloud Services und Virtual Machines.You can find more information on how to configure and deploy diagnostics settings here: Enabling Diagnostics in Azure Cloud Services and Virtual Machines.

Abrufen der DiagnoseRetrieve diagnostics

Sie können im Server-Explorer von Visual Studio im Azure-Teil der Server-Explorer-Struktur ganz einfach auf die Diagnose zugreifen.You can easily access your diagnostics from the Visual Studio Server Explorer in the Azure part of the Server Explorer tree. Öffnen Sie eine Visual Studio-Instanz, und klicken Sie in der Menüleiste auf "Ansicht" und "Server-Explorer".Open a Visual Studio instance, and in the menu bar click View, and Server Explorer. Klicken Sie auf das Azure-Symbol, um eine Verbindung mit Ihrem Azure-Abonnement herzustellen.Click the Azure icon to connect to your Azure subscription. Navigieren Sie dann zu „Azure“ -> „Speicher“ -> „<your storage account>“ -> „Tabellen“ -> „WADLogsTable“.Then navigate to Azure -> Storage -> <your storage account> -> Tables -> WADLogsTable. Weitere Informationen finden Sie unter Server-Explorer.For more information, see Server Explorer.

WADLogsTable

Die in der obigen Abbildung hervorgehobene Tabelle WADLogsTable enthält die detaillierten Ereignisse aus dem Anwendungsprotokoll des Split-Merge-Diensts.The WADLogsTable highlighted in the figure above contains the detailed events from the split-merge service’s application log. Beachten Sie, dass die Standardkonfiguration des heruntergeladenen Pakets auf die Bereitstellung in einer Produktionsumgebung ausgerichtet ist.Note that the default configuration of the downloaded package is geared towards a production deployment. Daher ist das Intervall, in dem Protokolle und Leistungsindikatoren von den Dienstinstanzen abgerufen werden, groß (5 Minuten).Therefore the interval at which logs and counters are pulled from the service instances is large (5 minutes). Für Test- und Entwicklungsumgebungen verkleinern Sie das Intervall, indem Sie die Diagnoseeinstellungen der Web- oder Workerrolle an Ihre Anforderungen anpassen.For test and development, lower the interval by adjusting the diagnostics settings of the web or the worker role to your needs. Klicken Sie im Server-Explorer von Visual Studio (siehe oben) mit der rechten Maustaste auf die Rolle, und passen Sie dann im Dialogfeld für die Konfigurationseinstellungen der Diagnose den Übertragungszeitraum an:Right-click on the role in the Visual Studio Server Explorer (see above) and then adjust the Transfer Period in the dialog for the Diagnostics configuration settings:

Konfiguration

LeistungPerformance

Im Allgemeinen ist von den höheren, leistungsstärkeren Dienstebenen in Azure SQL-Datenbank eine bessere Leistung zu erwarten.In general, better performance is to be expected from the higher, more performant service tiers in Azure SQL Database. Die vom Split-Merge-Dienst verwendeten Vorgänge für Massenkopieren und -löschung profitieren von höheren E/A-, CPU- und Speicherressourcenzuteilungen für die höheren Dienstebenen.Higher IO, CPU and memory allocations for the higher service tiers benefit the bulk copy and delete operations that the split-merge service uses. Aus diesem Grund erhöhen Sie die Dienstebene nur für diese Datenbanken für einen definierten, begrenzten Zeitraum.For that reason, increase the service tier just for those databases for a defined, limited period of time.

Der Dienst führt im Rahmen der normalen Vorgänge auch Überprüfungsabfragen aus.The service also performs validation queries as part of its normal operations. Mit diesen Überprüfungsabfragen wird geprüft, ob Daten unerwartet im Zielbereich vorhanden sind, und sichergestellt, dass alle Split/Merge/Move-Vorgänge in einem konsistenten Zustand gestartet werden.These validation queries check for unexpected presence of data in the target range and ensure that any split/merge/move operation starts from a consistent state. Für diese Abfragen werden Sharding-Schlüsselbereiche verwendet, die durch den Umfang des Vorgangs und die Batchgröße, die als Teil der Anforderungsdefinition angegeben wird, definiert werden.These queries all work over sharding key ranges defined by the scope of the operation and the batch size provided as part of the request definition. Diese Abfragen funktionieren am besten, wenn ein Index vorhanden ist, in dem der Shardingschlüssel die führende Spalte bildet.These queries perform best when an index is present that has the sharding key as the leading column.

Darüber hinaus ermöglicht die Eindeutigkeit des Shardingschlüssels als führender Spalte dem Dienst den Einsatz eines optimierten Ansatzes, der den Ressourcenverbrauch im Hinblick auf Speicherplatz und Arbeitsspeicher beschränkt.In addition, a uniqueness property with the sharding key as the leading column will allow the service to use an optimized approach that limits resource consumption in terms of log space and memory. Diese Eindeutigkeitseigenschaft ist zum Verschieben großer Datenmengen (in der Regel über 1 GB) erforderlich.This uniqueness property is required to move large data sizes (typically above 1GB).

AktualisierenHow to upgrade

  1. Führen Sie die Schritte in Lernprogramm zum Split-Merge-Tool für elastische Datenbankenaus.Follow the steps in Deploy a split-merge service.
  2. Ändern Sie Ihre Clouddienst-Konfigurationsdatei für Ihre Split-Merge-Bereitstellung, um die neuen Konfigurationsparameter widerzuspiegeln.Change your cloud service configuration file for your split-merge deployment to reflect the new configuration parameters. Ein neuer erforderliche Parameter stellt die Informationen zum Zertifikat dar, das für die Verschlüsselung verwendet wird.A new required parameter is the information about the certificate used for encryption. Dies kann einfach über den Vergleich der im Download enthaltenen neuen Konfigurationsvorlagendatei mit der vorhandenen Konfiguration erreicht werden.An easy way to do this is to compare the new configuration template file from the download against your existing configuration. Stellen Sie sicher, dass Sie die Einstellungen für "DataEncryptionPrimaryCertificateThumbprint" und "DataEncryptionPrimary" für die Web- und die Workerrolle hinzufügen.Make sure you add the settings for “DataEncryptionPrimaryCertificateThumbprint” and “DataEncryptionPrimary” for both the web and the worker role.
  3. Bevor Sie das Update in Azure bereitstellen, stellen Sie sicher, dass alle aktuell ausgeführten Split-Merge-Vorgänge abgeschlossen wurden.Before deploying the update to Azure, ensure that all currently running split-merge operations have finished. Sie können dazu einfach die Tabellen "RequestStatus" und "PendingWorkflows" in der Split-Merge-Metadatendatenbank nach laufenden Anforderungen abfragen.You can easily do this by querying the RequestStatus and PendingWorkflows tables in the split-merge metadata database for ongoing requests.
  4. Aktualisieren Sie Ihre vorhandene Clouddienstbereitstellung für Split-Merge im Azure-Abonnement mit dem neuen Paket und der aktualisierten Dienstkonfigurationsdatei.Update your existing cloud service deployment for split-merge in your Azure subscription with the new package and your updated service configuration file.

Für das Upgrade von Split-Merge müssen Sie keine neue Metadatendatenbank bereitstellen.You do not need to provision a new metadata database for split-merge to upgrade. Die neue Version aktualisiert die vorhandene Metadatendatenbank automatisch auf die neue Version.The new version will automatically upgrade your existing metadata database to the new version.

Bewährte Methoden und ProblembehandlungBest practices & troubleshooting

  • Definieren Sie einen Testmandanten, und probieren Sie Ihre wichtigsten Split/Merge/Move-Vorgänge mit dem Testmandanten über mehrere Shards hinweg aus.Define a test tenant and exercise your most important split/merge/move operations with the test tenant across several shards. Stellen Sie sicher, dass alle Metadaten in der Shard-Zuordnung ordnungsgemäß definiert sind und dass die Vorgänge keine Einschränkungen oder Fremdschlüssel verletzen.Ensure that all metadata is defined correctly in your shard map and that the operations do not violate constraints or foreign keys.
  • Verwenden Sie für den Testmandanten eine Datengröße, welche die maximale Größe des größten Mandanten überschreitet, um sicherzustellen, dass keine Probleme im Zusammenhang mit der Datengröße auftreten.Keep the test tenant data size above the maximum data size of your largest tenant to ensure you are not encountering data size related issues. Damit können Sie den Zeitraum einschätzen, der zum Verschieben eines einzelnen Mandanten maximal benötigt wird.This helps you assess an upper bound on the time it takes to move a single tenant around.
  • Stellen Sie sicher, dass Ihr Schema Löschungen zulässt.Make sure that your schema allows deletions. Der Split-Merge-Dienst erfordert, dass Daten aus der Quell-Shard entfernt werden können, nachdem sie erfolgreich an das Ziel kopiert wurden.The split-merge service requires the ability to remove data from the source shard once the data has been successfully copied to the target. Beispielsweise können delete-Trigger verhindern, dass der Dienst Daten aus der Quelle löscht, was dazu führen kann, dass Vorgänge nicht erfolgreich ausgeführt werden können.For example, delete triggers can prevent the service from deleting the data on the source and may cause operations to fail.
  • Der Sharding-Schlüssel sollte die führende Spalte im Primärschlüssel oder der eindeutigen Indexdefinition bilden.The sharding key should be the leading column in your primary key or unique index definition. Damit wird die beste Leistung für die Split- oder Merge-Überprüfungsabfragen und die tatsächlichen Verschiebe- und Löschvorgänge der Daten sichergestellt, die immer auf Sharding-Schlüsselbereichen basieren.That ensures the best performance for the split or merge validation queries, and for the actual data movement and deletion operations which always operate on sharding key ranges.
  • Ordnen Sie den Split-Merge-Dienst der Region und dem Rechenzentrum zu, in denen sich Ihre Datenbanken befinden.Collocate your split-merge service in the region and data center where your databases reside.

Zusätzliche RessourcenAdditional resources

Verwenden Sie noch keine elastischen Datenbanktools?Not using elastic database tools yet? Sehen Sie sich unseren Leitfaden zu den ersten Schritten an.Check out our Getting Started Guide. Bei Fragen erreichen Sie uns im Forum für SQL-Datenbank, Featureanforderungen können Sie im Feedbackforum für SQL-Datenbank einreichen.For questions, please reach out to us on the SQL Database forum and for feature requests, please add them to the SQL Database feedback forum.