Spostamento di dati tra database cloud con scalabilità orizzontaleMoving data between scaled-out cloud databases

Se lo sviluppatore di un'app SaaS (Software as a Service) registra un incremento importante della richiesta dell'app, dovrà far fronte alla domanda.If you are a Software as a Service developer, and suddenly your app undergoes tremendous demand, you need to accommodate the growth. A tale scopo aggiungerà altri database (partizioni).So you add more databases (shards). Come ridistribuire i dati nei nuovi database senza comprometterne l'integrità?How do you redistribute the data to the new databases without disrupting the data integrity? Per spostare dati dai database vincolati ai nuovi database, usare lo strumento di suddivisione-unione .Use the split-merge tool to move data from constrained databases to the new databases.

Lo strumento di suddivisione-unione viene eseguito come servizio Web di Azure.The split-merge tool runs as an Azure web service. Un amministratore o uno sviluppatore usa lo strumento per spostare shardlet (dati di una partizione) tra diversi database (partizioni).An administrator or developer uses the tool to move shardlets (data from a shard) between different databases (shards). Lo strumento usa la gestione delle mappe partizioni per gestire il database di metadati del servizio e per garantire mapping coerenti.The tool uses shard map management to maintain the service metadata database, and ensure consistent mappings.

Panoramica

DownloadDownload

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

DocumentazioneDocumentation

  1. Esercitazione relativa allo strumento divisione-unione del database elasticoElastic database Split-Merge tool tutorial
  2. Configurazione della sicurezza dei servizi di "split and merge"Split-Merge security configuration
  3. Considerazioni sulla sicurezza dello strumento di suddivisione-unioneSplit-merge security considerations
  4. Gestione mappe partizioniShard map management
  5. Migrate existing databases to scale-outMigrate existing databases to scale-out
  6. Strumenti di database elasticiElastic database tools
  7. Glossario sugli strumenti di database elasticiElastic Database tools glossary

Motivi per l'uso dello strumento di suddivisione-unioneWhy use the split-merge tool?

FlessibilitàFlexibility

Le applicazioni devono essere sufficientemente flessibili per superare i limiti di un singolo database SQL di Azure.Applications need to stretch flexibly beyond the limits of a single Azure SQL DB database. Lo strumento consente di spostare i dati nei nuovi database senza compromettere l'integrità.Use the tool to move data as needed to new databases while retaining integrity.

Dividere per crescereSplit to grow

In certi casi è necessario incrementare la capacità complessiva per gestire una crescita esponenziale.You need to increase overall capacity to handle explosive growth. Per fare ciò, creare capacità aggiuntiva con il partizionamento orizzontale e la distribuzione dei dati in un numero incrementale di database, fino a soddisfare le esigenze di capacità.To do so, create additional capacity by sharding the data and by distributing it across incrementally more databases until capacity needs are fulfilled. Questo è un ottimo esempio della funzionalità di suddivisione.This is a prime example of the ‘split’ feature.

Unire per ridurreMerge to shrink

In certi casi è necessario ridurre la capacità, per la natura stagionale dell'attività commerciale.Capacity needs shrink due to the seasonal nature of a business. Lo strumento consente di passare a un numero inferiore di unità di scala quando l'attività rallenta.The tool lets you scale down to fewer scale units when business slows. La funzionalità di unione del servizio di suddivisione-unione della scalabilità elastica permette di soddisfare questo requisito.The ‘merge’ feature in the Elastic Scale split-merge Service covers this requirement.

Gestire gli hotspot mediante lo spostamento di shardletManage hotspots by moving shardlets

A causa della presenza di più tenant per ogni database, l'allocazione di shardlet alle partizioni può provocare colli di bottiglia di capacità in alcune partizioni.With multiple tenants per database, the allocation of shardlets to shards can lead to capacity bottlenecks on some shards. Sarà quindi necessario riallocare gli shardlet o spostare gli shardlet occupati in partizioni nuove o meno usate.This requires re-allocating shardlets or moving busy shardlets to new or less utilized shards.

Concetti e funzionalità principaliConcepts & key features

Servizi ospitati dal clienteCustomer-hosted services

Il servizio di suddivisione-unione viene offerto come servizio ospitato dal cliente.The split-merge is delivered as a customer-hosted service. È necessario distribuire e ospitare il servizio nella sottoscrizione di Microsoft Azure.You must deploy and host the service in your Microsoft Azure subscription. Il pacchetto scaricato da NuGet include un modello di configurazione da completare con le informazioni specifiche per la distribuzione.The package you download from NuGet contains a configuration template to complete with the information for your specific deployment. Per informazioni dettagliate, vedere l' esercitazione relativa alla suddivisione-unione .See the split-merge tutorial for details. Poiché il servizio è in esecuzione nella sottoscrizione Azure, sarà possibile controllare e configurare la maggior parte degli aspetti relativi alla sicurezza del servizio.Since the service runs in your Azure subscription, you can control and configure most security aspects of the service. Il modello predefinito include le opzioni necessarie per configurare SSL, l'autenticazione client basata su certificato, la crittografia per le credenziali archiviate, la protezione DoS e le restrizioni IP.The default template includes the options to configure SSL, certificate-based client authentication, encryption for stored credentials, DoS guarding and IP restrictions. Altre informazioni sugli aspetti relativi alla sicurezza sono disponibili nel documento seguente relativo alla configurazione di sicurezza della suddivisione-unione.You can find more information on the security aspects in the following document split-merge security configuration.

Il servizio distribuito predefinito viene eseguito con un ruolo di lavoro e un ruolo Web.The default deployed service runs with one worker and one web role. Ogni ruolo usa la dimensione di VM A1 in Servizi cloud di Azure.Each uses the A1 VM size in Azure Cloud Services. Benché non sia possibile modificare queste impostazioni durante la distribuzione del pacchetto, è possibile modificarle dopo una distribuzione corretta nel servizio cloud in esecuzione, tramite il portale di Azure.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). Si noti che per motivi tecnici il ruolo di lavoro deve essere configurato solo per un'istanza.Note that the worker role must not be configured for more than a single instance for technical reasons.

Integrazione della mappa partizioniShard map integration

Il servizio di suddivisione-unione interagisce con la mappa partizioni dell'applicazione.The split-merge service interacts with the shard map of the application. Quando si usa il servizio di suddivisione-unione per suddividere o unire intervalli o per spostare shardlet tra le diverse partizioni, il servizio mantiene automaticamente aggiornata la mappa partizioni.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. Per ottenere questo risultato, il servizio si connette al database di gestione delle mappe partizioni dell'applicazione e gestisce gli intervalli e i mapping durante lo svolgimento delle richieste di suddivisione/unione/spostamento.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. Ciò garantisce che la mappa partizioni presenti sempre una visualizzazione aggiornata durante l'esecuzione delle operazioni di suddivisione-unione.This ensures that the shard map always presents an up-to-date view when split-merge operations are going on. Le operazioni di suddivisione, unione e spostamento di shardlet vengono implementate tramite lo spostamento di un batch di shardlet dalla partizione di origine alla partizione di destinazione.Split, merge and shardlet movement operations are implemented by moving a batch of shardlets from the source shard to the target shard. Durante l'operazione di spostamento di shardlet, gli shardlet inclusi nel batch corrente vengono contrassegnati come offline nella mappa partizioni e non sono disponibili per connessioni di routing dipendenti dai dati tramite l'API OpenConnectionForKey .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.

Connessioni a shardlet coerentiConsistent shardlet connections

All'avvio dello spostamento di dati per un nuovo batch di shardlet, eventuali connessioni di routing dipendenti dai dati e fornite dalla mappa partizioni alla partizione in cui sono archiviati gli shardlet verranno terminate e le connessioni successive dalle API della mappa partizioni a questi shardlet verranno bloccate durante lo spostamento dei dati, in modo da evitare incoerenze.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. Verranno terminate anche le connessioni ad altri shardlet nella stessa partizione, ma queste connessioni avranno esito positivo immediato al tentativo successivo.Connections to other shardlets on the same shard will also get killed, but will succeed again immediately on retry. Al termine dello spostamento del batch, gli shardlet verranno contrassegnati di nuovo come online per la partizione di destinazione e i dati di origine verranno rimossi dalla partizione di origine.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. Il servizio esegue questi passaggi per ogni batch, fino al completamento dello spostamento di tutti gli shardlet.The service goes through these steps for every batch until all shardlets have been moved. Si verificheranno quindi alcune operazioni di interruzione delle connessioni durante il completamento dell'operazione di suddivisione/unione/spostamento.This will lead to several connection kill operations during the course of the complete split/merge/move operation.

Gestione della disponibilità di shardletManaging shardlet availability

la limitazione dell'interruzione delle connessioni al batch attuale di shardlet, come illustrato in precedenza, limita anche l'ambito di non disponibilità a un unico batch di shardlet alla volta.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. Questo approccio è preferibile a un approccio in cui la partizione completa rimane offline per tutti gli shardlet corrispondenti durante l'esecuzione di un'operazione di suddivisione o unione.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. La dimensione di un batch, definita come il numero di shardlet distinti da muovere in un determinato momento, è un parametro di configurazione.The size of a batch, defined as the number of distinct shardlets to move at a time, is a configuration parameter. Può essere definita per ogni operazione di suddivisione o unione, in base alle esigenze di disponibilità e prestazioni dell'applicazione.It can be defined for each split and merge operation depending on the application’s availability and performance needs. Si noti che l'intervallo bloccato nella mappa partizioni potrebbe avere dimensioni superiori rispetto a quelle del batch specificato.Note that the range that is being locked in the shard map may be larger than the batch size specified. Ciò è dovuto al fatto che il servizio definisce una dimensione di intervallo in modo che il numero effettivo di valori di chiave di partizionamento orizzontale nei dati corrisponda in modo approssimativo alla dimensione del batch.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. È importante ricordare questo aspetto, in particolare per le chiavi di partizionamento orizzontale popolate in modo sparse.This is important to remember in particular for sparsely populated sharding keys.

Archiviazione dei metadatiMetadata storage

Il servizio di suddivisione-unione usa un database per gestire il proprio stato e per creare log durante l'elaborazione delle richieste.The split-merge service uses a database to maintain its status and to keep logs during request processing. L'utente crea questo database nella propria sottoscrizione e fornisce la stringa di connessione corrispondente nel file di configurazione per la distribuzione del servizio.The user creates this database in their subscription and provides the connection string for it in the configuration file for the service deployment. Gli amministratori dell'organizzazione dell'utente possono anche connettersi a questo database per esaminare lo stato della richiesta e per analizzare le informazioni dettagliate su potenziali errori.Administrators from the user’s organization can also connect to this database to review request progress and to investigate detailed information regarding potential failures.

Rilevamento del partizionamento orizzontaleSharding-awareness

Il servizio di suddivisione-unione riconosce le differenze tra (1) tabelle partizionate, (2) tabelle di riferimento e (3) tabelle normali.The split-merge service differentiates between (1) sharded tables, (2) reference tables, and (3) normal tables. La semantica di un'operazione di suddivisione/unione/spostamento dipende dal tipo di tabella usata e viene definita nel seguente modo:The semantics of a split/merge/move operation depend on the type of the table used and are defined as follows:

  • Tabelle partizionate: le operazioni di suddivisione, unione e spostamento consentono di spostare gli shardlet dalla partizione di origine a quella di destinazione.Sharded tables: Split, merge, and move operations move shardlets from source to target shard. Dopo il completamento corretto della richiesta complessiva, questi shardlet non saranno più presenti nell'origine.After successful completion of the overall request, those shardlets are no longer present on the source. Si noti che le tabelle di destinazione devono esistere nella partizione di destinazione e non devono includere dati nell'intervallo di destinazione prima dell'elaborazione dell'operazione.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.
  • Tabelle di riferimento: per le tabelle di riferimento, le operazioni di suddivisione, unione e spostamento copiano i dati dalla partizione di origine a quella di destinazione.Reference tables: For reference tables, the split, merge and move operations copy the data from the source to the target shard. Si noti tuttavia che nella partizione di destinazione per una determinata tabella non vengono applicate modifiche se questa tabella nella partizione di destinazione include già alcune righe.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. Per permettere l'elaborazione dell'operazione di copia di tabelle di riferimento, è necessario che la tabella sia vuota.The table has to be empty for any reference table copy operation to get processed.
  • Altre tabelle: nell'origine o nella destinazione di un'operazione di suddivisione e unione possono essere presenti altre tabelle.Other Tables: Other tables can be present on either the source or the target of a split and merge operation. Il servizio di suddivisione-unione ignora tali tabelle per eventuali operazioni di spostamento o copia dei dati.The split-merge service disregards these tables for any data movement or copy operations. Si noti, tuttavia, che in caso di vincoli queste tabelle possono interferire con le operazioni.Note, however, that they can interfere with these operations in case of constraints.

Le informazioni relative al confronto tra tabelle di riferimento e tabelle partizionate vengono fornite dalle API SchemaInfo nella mappa partizioni.The information on reference vs. sharded tables is provided by the SchemaInfo APIs on the shard map. Il seguente esempio illustra l'uso di queste API in un determinato oggetto smm del gestore delle mappe partizioni:The following example illustrates the use of these APIs on a given shard map manager object smm:

// 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); 

Le tabelle "area" e "nazione" sono definite come tabelle di riferimento e vengono copiate con operazioni di suddivisione/unione/spostamento.The tables ‘region’ and ‘nation’ are defined as reference tables and will be copied with split/merge/move operations. "cliente" e "ordini" a loro volta sono definite come tabelle partizionate.‘customer’ and ‘orders’ in turn are defined as sharded tables. C_CUSTKEY e O_CUSTKEY fungono da chiave di partizionamento orizzontale.C_CUSTKEY and O_CUSTKEY serve as the sharding key.

Integrità referenzialeReferential Integrity

Il servizio di suddivisione-unione analizza le dipendenze tra le tabelle e usa relazioni chiave esterna-chiave primaria per la gestione temporanea delle operazioni di spostamento delle tabelle di riferimento e degli shardlet.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. Le tabelle di riferimento vengono in genere copiate per prime in ordine di dipendenza, quindi vengono copiati gli shardlet, in base al rispettivo ordine di dipendenza in ogni batch.In general, reference tables are copied first in dependency order, then shardlets are copied in order of their dependencies within each batch. Ciò è necessario per permettere il rispetto dei vincoli di chiave esterna-chiave primaria nella partizione di destinazione all'arrivo di nuovi dati.This is necessary so that FK-PK constraints on the target shard are honored as the new data arrives.

Coerenza della mappa partizioni e completamento finaleShard Map Consistency and Eventual Completion

In caso di errori, il servizio di suddivisione-unione si riattiva dopo eventuali interruzioni e cerca di completare eventuali richieste in corso.In the presence of failures, the split-merge service resumes operations after any outage and aims to complete any in progress requests. È tuttavia possibile che si verifichino situazioni irreversibili, ad esempio nel caso in cui la partizione di destinazione vada persa o sia danneggiata in modo irreparabile.However, there may be unrecoverable situations, e.g., when the target shard is lost or compromised beyond repair. In queste circostanze è possibile che alcuni shardlet che dovevano essere spostati si trovino ancora nella partizione di origine.Under those circumstances, some shardlets that were supposed to be moved may continue to reside on the source shard. Il servizio assicura che i mapping di shardlet vengano aggiornati solo dopo il completamento corretto della copia dei dati necessari nella destinazione.The service ensures that shardlet mappings are only updated after the necessary data has been successfully copied to the target. Gli shardlet vengono eliminati dall'origine solo dopo la copia di tutti i rispettivi dati nella destinazione e dopo l'aggiornamento corretto dei mapping corrispondenti.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. L'operazione di eliminazione si verifica in background, mentre l'intervallo risulta già online nella partizione di destinazione.The deletion operation happens in the background while the range is already online on the target shard. Il servizio di suddivisione-unione assicura sempre la correttezza dei mapping archiviati nella mappa partizioni.The split-merge service always ensures correctness of the mappings stored in the shard map.

Interfaccia utente del servizio di suddivisione-unioneThe split-merge user interface

Il pacchetto del servizio di suddivisione-unione include un ruolo di lavoro e un ruolo Web.The split-merge service package includes a worker role and a web role. Il ruolo Web viene usato per inviare richieste di suddivisione-unione in modo interattivo.The web role is used to submit split-merge requests in an interactive way. I componenti principali dell'interfaccia utente sono i seguenti:The main components of the user interface are as follows:

  • Tipo di operazione: il tipo di operazione è un pulsante di opzione che controlla il tipo di operazione eseguita dal servizio per questa richiesta.Operation Type: The operation type is a radio button that controls the kind of operation performed by the service for this request. È possibile scegliere tra scenari di suddivisione, unione e spostamento.You can choose between the split, merge and move scenarios. È anche possibile annullare un'operazione inviata in precedenza.You can also cancel a previously submitted operation. È possibile usare richieste di suddivisione, unione e spostamento per le mappe partizioni di tipo intervallo.You can use split, merge and move requests for range shard maps. Le mappe partizioni di tipo elenco supportano solo operazioni di spostamento.List shard maps only support move operations.
  • Mappa partizioni: la sezione successiva dei parametri della richiesta include informazioni sulla mappa partizioni e sul database che la ospita.Shard Map: The next section of request parameters covers information about the shard map and the database hosting your shard map. È in particolare necessario specificare il nome del server di database SQL di Azure e del database che ospita la mappa partizioni, le credenziali per la connessione al database di mappe partizioni e infine il nome della mappa partizioni.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. L'operazione accetta attualmente solo un singolo set di credenziali.Currently, the operation only accepts a single set of credentials. È necessario che le credenziali abbiano autorizzazioni sufficienti per apportare le modifiche alla mappa partizioni oltre che i dati utente nelle partizioni.These credentials need to have sufficient permissions to perform changes to the shard map as well as to the user data on the shards.
  • Intervallo di origine (suddivisione e unione): un'operazione di suddivisione e unione elabora un intervallo usando le relative chiavi superiore e inferiore.Source Range (split and merge): A split and merge operation processes a range using its low and high key. Per specificare un'operazione con un valore di chiave superiore non associato, selezionare la casella di controllo "Chiave superiore massima" e lasciare vuoto il campo della chiave superiore.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. Non è necessario che i valori dell'intervallo di chiavi specificati corrispondano esattamente a un mapping e ai relativi limiti nella mappa partizioni.The range key values that you specify do not need to precisely match a mapping and its boundaries in your shard map. Se non si specifica alcun limite dell'intervallo, il servizio dedurrà automaticamente l'intervallo più vicino.If you do not specify any range boundaries at all the service will infer the closest range for you automatically. Per recuperare i mapping attuali in una determinata mappa partizioni, è possibile usare lo script GetMappings.ps1 di PowerShell.You can use the GetMappings.ps1 PowerShell script to retrieve the current mappings in a given shard map.
  • Comportamento origine di suddivisione (suddivisione): per le operazioni di suddivisione, definire il punto in cui si vuole dividere l'intervallo di origine.Split Source Behavior (split): For split operations, define the point to split the source range. Per ottenere questo risultato, si specifica la chiave di partizionamento orizzontale nel punto in cui si deve verificare la suddivisione.You do this by providing the sharding key where you want the split to occur. Usare il pulsante di opzione per indicare se si vuole spostare la parte inferiore dell'intervallo (escludendo la chiave di suddivisione) o la parte superiore (inclusa la chiave di suddivisione).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).
  • Shardlet di origine (spostamento): molte operazioni si differenziano dalle operazioni di suddivisione o unione, poiché non richiedono un intervallo per la descrizione dell'origine.Source Shardlet (move): Move operations are different from split or merge operations as they do not require a range to describe the source. Un'origine per lo spostamento viene identificata semplicemente dal valore della chiave di partizionamento orizzontale che si prevede di spostare.A source for move is simply identified by the sharding key value that you plan to move.
  • Partizione di destinazione (suddivisione): dopo avere specificato le informazioni nell'origine dell'operazione di suddivisione, è necessario indicare la destinazione della copia dei dati specificando il nome del server del database SQL di Azure e del database per la destinazione.Target Shard (split): 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.
  • Intervallo di destinazione (unione): le operazioni di unione spostano gli shardlet in una partizione esistente.Target Range (merge): Merge operations move shardlets to an existing shard. Per identificare la partizione esistente, è necessario specificare i limiti dell'intervallo esistente con cui si vuole ottenere l'unione.You identify the existing shard by providing the range boundaries of the existing range that you want to merge with.
  • Dimensioni del batch: le dimensioni del batch controllano il numero di shardlet che saranno offline contemporaneamente durante lo spostamento dei dati.Batch Size: The batch size controls the number of shardlets that will go offline at a time during the data movement. Si tratta di un valore Integer. È possibile usare valori ridotti se si preferisce evitare periodi di inattività prolungati per gli shardlet.This is an integer value where you can use smaller values when you are sensitive to long periods of downtime for shardlets. I valori più elevati comporteranno un incremento del tempo per cui un determinato shardlet risulterà offline, ma potrebbero migliorare le prestazioni.Larger values will increase the time that a given shardlet is offline but may improve performance.
  • ID operazione (annullamento): se è in corso un'operazione che non è più necessaria, sarà possibile annullarla specificando l'ID operazione corrispondente in questo campo.Operation Id (Cancel): If you have an ongoing operation that is no longer needed, you can cancel the operation by providing its operation ID in this field. L'ID operazione può essere recuperato dalla tabella di stato dell'operazione (vedere la Sezione 8.1) o dall'output nel Web browser in cui è stata inviata la richiesta.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.

Requisiti e limitazioniRequirements and Limitations

L'implementazione corrente del servizio di suddivisione-unione deve rispettare i seguenti requisiti e limitazioni:The current implementation of the split-merge service is subject to the following requirements and limitations:

  • Le partizioni devono esistere ed essere registrate nella mappa partizioni perché sia possibile eseguire un'operazione di suddivisione-unione in tali partizioni.The shards need to exist and be registered in the shard map before a split-merge operation on these shards can be performed.
  • Il servizio attualmente non crea in modo automatico tabelle o altri oggetti di database.The service does not create tables or any other database objects automatically as part of its operations. È quindi necessario che lo schema per tutte le tabelle partizionate e le tabelle di riferimento esista nella partizione di destinazione prima dell'esecuzione di qualsiasi operazione di suddivisione/unione/spostamento.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. È in particolare necessario che le tabelle partizionate siano vuote nell'intervallo in cui l'operazione di suddivisione/unione/spostamento deve aggiungere shardlet.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. In caso contrario, l'operazione non riuscirà a eseguire la verifica di coerenza nella partizione di destinazione.Otherwise, the operation will fail the initial consistency check on the target shard. Si noti anche che i dati di riferimento vengono copiati solo se la tabella di riferimento è vuota e che non sono previste garanzie a livello di coerenza rispetto ad altre operazioni di scrittura concorrenti nelle tabelle di riferimento.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. Si consiglia questo: durante l'esecuzione di operazioni di suddivisione/unione, altre operazioni di scrittura non devono apportare modifiche alle tabelle di riferimento.We recommend this: when running split/merge operations, no other write operations make changes to the reference tables.
  • Per migliorare le prestazioni e l'affidabilità per shardlet di grandi dimensioni, il servizio si basa attualmente sull'identità di riga definita da un indice o una chiave univoca che include la chiave di partizionamento orizzontale.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. Ciò permette al servizio di spostare i dati con un livello di granularità maggiore rispetto al solo valore di chiave di partizionamento orizzontale,This allows the service to move data at an even finer granularity than just the sharding key value. contribuendo quindi a ridurre la quantità massima di spazio di log e i blocchi necessari durante l'operazione.This helps to reduce the maximum amount of log space and locks that are required during the operation. È consigliabile creare un indice univoco o una chiave primaria che include la chiave di partizionamento orizzontale in una determinata tabella se si vuole usare quella tabella con le richieste di suddivisione/unione/spostamento.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. Per motivi di prestazioni, è consigliabile che la chiave di partizionamento orizzontale costituisca la colonna iniziale nella chiave o nell'indice.For performance reasons, the sharding key should be the leading column in the key or the index.
  • Durante l'elaborazione delle richieste è possibile che alcuni dati di shardlet siano presenti sia nella partizione di origine che nella partizione di destinazione.During the course of request processing, some shardlet data may be present both on the source and the target shard. Ciò è attualmente necessario per la protezione in caso di errori durante lo spostamento di shardlet.This is necessary to protect against failures during the shardlet movement. L'integrazione del servizio di suddivisione-unione con la mappa partizioni garantisce che le connessioni tramite le API di routing dipendenti dai dati che usano il metodo OpenConnectionForKey sulla mappa partizioni non rilevino stati intermedi incoerenti.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. Quando ci si connette alle partizioni di origine o di destinazione senza usare il metodo OpenConnectionForKey , è tuttavia possibile che stati intermedi incoerenti risultino visibili durante l'esecuzione di richieste di suddivisione/unione/spostamento.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. È possibile che queste connessioni mostrino risultati parziali o duplicati, in base all'intervallo o alla partizione sottostante per la connessione.These connections may show partial or duplicate results depending on the timing or the shard underlying the connection. Questa limitazione include attualmente le connessioni effettuate dalle query su più partizioni di Scalabilità elastica.This limitation currently includes the connections made by Elastic Scale Multi-Shard-Queries.
  • Il database dei metadati per il servizio di suddivisione-unione non deve essere condiviso tra ruoli diversi.The metadata database for the split-merge service must not be shared between different roles. Ad esempio, un ruolo del servizio di suddivisione-unione in esecuzione in gestione temporanea deve fare riferimento a un database dei metadati diverso rispetto al ruolo di produzione.For example, a role of the split-merge service running in staging needs to point to a different metadata database than the production role.

FatturazioneBilling

Il servizio di suddivisione-unione viene eseguito come servizio cloud nella sottoscrizione Microsoft Azure.The split-merge service runs as a cloud service in your Microsoft Azure subscription. Pertanto all'istanza del servizio vengono applicate tariffe per i servizi cloud.Therefore charges for cloud services apply to your instance of the service. Se non si eseguono spesso operazioni di suddivisione/unione/spostamento, è consigliabile eliminare il servizio cloud di suddivisione-unione,Unless you frequently perform split/merge/move operations, we recommend you delete your split-merge cloud service. in modo da ridurre i costi per le istanze dei servizi cloud in esecuzione o distribuite.That saves costs for running or deployed cloud service instances. È possibile eseguire di nuovo la distribuzione e avviare la configurazione pronta per l'esecuzione quando occorre eseguire operazioni di suddivisione-unione.You can re-deploy and start your readily runnable configuration whenever you need to perform split or merge operations.

MonitoraggioMonitoring

Tabelle di statoStatus tables

Il servizio di suddivisione-unione fornisce la tabella RequestStatus nel database archivio di metadati per il monitoraggio delle richieste completate e in corso.The split-merge Service provides the RequestStatus table in the metadata store database for monitoring of completed and ongoing requests. La tabella include una riga per ogni richiesta di suddivisione-unione inviata a questa istanza del servizio di suddivisione-unione.The table lists a row for each split-merge request that has been submitted to this instance of the split-merge service. Fornisce le seguenti informazioni per ogni richiesta:It gives the following information for each request:

  • Timestamp: ora e data di inizio della richiesta.Timestamp: The time and date when the request was started.
  • OperationId: GUID che identifica in modo univoco la richiesta.OperationId: A GUID that uniquely identifies the request. Questa richiesta può essere usata anche per annullare l'operazione durante l'esecuzione.This request can also be used to cancel the operation while it is still ongoing.
  • Status: stato attuale della richiesta.Status: The current state of the request. per le richieste in corso indica anche la fase attuale dell'esecuzione della richiesta.For ongoing requests, it also lists the current phase in which the request is.
  • CancelRequest: flag che indica se la richiesta è stata annullata.CancelRequest: A flag that indicates whether the request has been canceled.
  • Progress: stima della percentuale di completamento dell'operazione.Progress: A percentage estimate of completion for the operation. Un valore pari a 50 indica che la percentuale di completamento dell'operazione è pari a circa il 50%.A value of 50 indicates that the operation is approximately 50% complete.
  • Details: valore XML che fornisce un report di stato più dettagliato.Details: An XML value that provides a more detailed progress report. Il report di stato viene aggiornato periodicamente durante la copia di set di righe dall'origine alla destinazione.The progress report is periodically updated as sets of rows are copied from source to target. In caso di errori o eccezioni, questa colonna include anche informazioni più dettagliate sull'errore.In case of failures or exceptions, this column also includes more detailed information about the failure.

Diagnostica AzureAzure Diagnostics

Il servizio di suddivisione-unione utilizza la diagnostica Azure basata su Azure SDK 2.5 per il monitoraggio e la diagnostica.The split-merge service uses Azure Diagnostics based on Azure SDK 2.5 for monitoring and diagnostics. È possibile controllare la configurazione della diagnostica come indicato di seguito: Abilitazione della diagnostica nei servizi cloud e nelle macchine virtuali di Azure.You control the diagnostics configuration as explained here: Enabling Diagnostics in Azure Cloud Services and Virtual Machines. Il pacchetto di download include due configurazioni della diagnostica: una per il ruolo Web e una per il ruolo di lavoro.The download package includes two diagnostics configurations - one for the web role and one for the worker role. Queste configurazioni della diagnostica per il servizio seguono le istruzioni fornite dai Dati fondamentali dei servizi cloud di Microsoft Azure.These diagnostics configurations for the service follow the guidance from Cloud Service Fundamentals in Microsoft Azure. Essi includono le definizioni per la registrazione di contatori delle prestazioni, log IIS, registri eventi di Windows e registri eventi dell'applicazione di suddivisione-unione.It includes the definitions to log Performance Counters, IIS logs, Windows Event Logs, and split-merge application event logs.

Distribuire la diagnosticaDeploy Diagnostics

Per abilitare il monitoraggio e la diagnostica utilizzando la configurazione della diagnostica per i ruoli Web e di lavoro forniti dal pacchetto NuGet, eseguire i seguenti comandi utilizzando Azure PowerShell: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-AzureStorageContext -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" 

Altre informazioni su come configurare e distribuire le impostazioni di diagnostica sono disponibili qui: Abilitazione della diagnostica nei servizi cloud e nelle macchine virtuali di Azure.You can find more information on how to configure and deploy diagnostics settings here: Enabling Diagnostics in Azure Cloud Services and Virtual Machines.

Recuperare la diagnosticaRetrieve diagnostics

È possibile accedere con facilità alla diagnostica da Esplora server di Visual Studio, nella sezione dedicata ad Azure della struttura ad albero della finestra di esplorazione.You can easily access your diagnostics from the Visual Studio Server Explorer in the Azure part of the Server Explorer tree. Aprire un'istanza di Visual Studio e nella barra dei menu fare clic su Visualizza, quindi su Esplora server.Open a Visual Studio instance, and in the menu bar click View, and Server Explorer. Fare clic sull'icona di Azure per connettersi alla sottoscrizione Azure.Click the Azure icon to connect to your Azure subscription. Passare ad Azure -> Archiviazione -> -> Tabelle -> WADLogsTable.Then navigate to Azure -> Storage -> -> Tables -> WADLogsTable. Per altre informazioni, vedere Esplorazione delle risorse di archiviazione con Esplora server.For more information, see Browsing Storage Resources with Server Explorer.

WADLogsTable

La tabella WADLogsTable evidenziata nella figura precedente include gli eventi dettagliati del log applicazione del servizio di suddivisione-unione.The WADLogsTable highlighted in the figure above contains the detailed events from the split-merge service’s application log. Si noti che la configurazione predefinita del pacchetto scaricato è destinata a una distribuzione in produzione.Note that the default configuration of the downloaded package is geared towards a production deployment. L'intervallo di estrazione dei log e dei contatori dalle istanze del servizio è quindi lungo (5 minuti).Therefore the interval at which logs and counters are pulled from the service instances is large (5 minutes). Per gli scenari di test e di sviluppo, ridurre l'intervallo, modificando le impostazioni di diagnostica del ruolo Web o del ruolo di lavoro in base alle esigenze specifiche.For test and development, lower the interval by adjusting the diagnostics settings of the web or the worker role to your needs. Fare clic con il pulsante destro del mouse sul ruolo in Esplora server di Visual Studio (vedere sopra), quindi modificare il periodo di trasferimento nella finestra di dialogo relativa alle impostazioni di configurazione di diagnostica: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:

Configurazione

PrestazioniPerformance

In generale i livelli di servizio più elevati ed efficienti del database SQL di Azure offrono prestazioni migliori.In general, better performance is to be expected from the higher, more performant service tiers in Azure SQL Database. Allocazioni di IO, CPU e memoria più elevate per i livelli di servizio superiori risulteranno utili per le operazioni di copia ed eliminazione in blocco usate internamente dal servizio di suddivisione-unione.Higher IO, CPU and memory allocations for the higher service tiers benefit the bulk copy and delete operations that the split-merge service uses. Per questo motivo, aumentare il livello di servizio solo per tali database per un periodo di tempo limitato e definito.For that reason, increase the service tier just for those databases for a defined, limited period of time.

Il servizio esegue anche query di convalida come parte del normale funzionamento.The service also performs validation queries as part of its normal operations. Le query di convalida verificano la presenza imprevista di dati nell'intervallo di destinazione e assicurano che eventuali operazioni di suddivisione/unione/spostamento vengano avviate con uno stato coerente.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. Queste query verranno eseguite in intervalli di chiavi di partizionamento orizzontale definiti dall'ambito dell'operazione e dalla dimensione del batch specificata come parte della definizione della richiesta.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. Le query vengono eseguite in modo ottimale quando è presente un indice che include la chiave di partizionamento orizzontale come colonna iniziale.These queries perform best when an index is present that has the sharding key as the leading column.

Una proprietà di univocità con la chiave di partizionamento orizzontale come colonna iniziale permetterà inoltre al servizio di usare un approccio ottimizzato, che limita l'utilizzo di risorse a livello di spazio di log e di memoria.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. Questa proprietà di univocità è obbligatoria per lo spostamento di quantità elevate di dati, in genere superiori a 1 GB.This uniqueness property is required to move large data sizes (typically above 1GB).

Come eseguire l'aggiornamentoHow to upgrade

  1. Seguire i passaggi in Distribuire un servizio di suddivisione-unione.Follow the steps in Deploy a split-merge service.
  2. Modificare il file di configurazione del servizio cloud per la distribuzione della suddivisione-unione, in modo da riflettere i nuovi parametri di configurazione.Change your cloud service configuration file for your split-merge deployment to reflect the new configuration parameters. È richiesto un nuovo parametro con le informazioni relative al certificato usato per la crittografia.A new required parameter is the information about the certificate used for encryption. Per semplificare questa operazione, è possibile confrontare il file del nuovo modello di configurazione dal download con la configurazione esistente.An easy way to do this is to compare the new configuration template file from the download against your existing configuration. Assicurarsi di aggiungere le impostazioni per "DataEncryptionPrimaryCertificateThumbprint" e "DataEncryptionPrimary" per il ruolo Web e il ruolo di lavoro.Make sure you add the settings for “DataEncryptionPrimaryCertificateThumbprint” and “DataEncryptionPrimary” for both the web and the worker role.
  3. Prima di distribuire l'aggiornamento in Azure, assicurarsi che tutte le operazioni di suddivisione-unione in esecuzione siano state completate.Before deploying the update to Azure, ensure that all currently running split-merge operations have finished. A tale scopo, è possibile eseguire una query nelle tabelle RequestStatus e PendingWorkflows nel database dei metadati di suddivisione-unione per le richieste in corso.You can easily do this by querying the RequestStatus and PendingWorkflows tables in the split-merge metadata database for ongoing requests.
  4. Aggiornare la distribuzione del servizio cloud esistente per il servizio di suddivisione-unione nella sottoscrizione di Azure con il nuovo pacchetto e con il file di configurazione del servizio aggiornato.Update your existing cloud service deployment for split-merge in your Azure subscription with the new package and your updated service configuration file.

Non è necessario eseguire il provisioning di un nuovo database dei metadati per l’aggiornamento della suddivisione-unione.You do not need to provision a new metadata database for split-merge to upgrade. Il database dei metadati esistente verrà aggiornato automaticamente alla nuova versione.The new version will automatically upgrade your existing metadata database to the new version.

Procedure consigliate e risoluzione dei problemiBest practices & troubleshooting

  • Definire un tenant di test e di provare a eseguire le operazioni di suddivisione/unione/spostamento più importanti con il tenant di test in diverse partizioni.Define a test tenant and exercise your most important split/merge/move operations with the test tenant across several shards. Assicurare che tutti metadati siano definiti correttamente nella mappa partizioni e che le operazioni non violino i vincoli o le chiavi esterne.Ensure that all metadata is defined correctly in your shard map and that the operations do not violate constraints or foreign keys.
  • Assicurarsi che le dimensioni dei dati del tenant di test siano superiori alle dimensioni di dati massime del tenant più grande, in modo che non si verifichino problemi correlati alle dimensioni dei dati.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. In questo modo sarà possibile definire un limite massimo per il tempo necessario per lo spostamento di un singolo tenant.This helps you assess an upper bound on the time it takes to move a single tenant around.
  • Assicurarsi che lo schema consenta le eliminazioni.Make sure that your schema allows deletions. Per il servizio di suddivisione-unione è necessario potere rimuovere dati dalla partizione di origine dopo una copia riuscita dei dati nella destinazione.The split-merge service requires the ability to remove data from the source shard once the data has been successfully copied to the target. I trigger di eliminazione , ad esempio, possono impedire al servizio di eliminare i dati nell'origine e possono ostacolare la riuscita delle operazioni.For example, delete triggers can prevent the service from deleting the data on the source and may cause operations to fail.
  • La chiave di partizionamento orizzontale deve essere la colonna iniziale nella definizione della chiave primaria o dell'indice univoco.The sharding key should be the leading column in your primary key or unique index definition. In questo modo si assicurano prestazioni ottimali per le query di convalida della suddivisione o unione e per le operazioni effettive di spostamento ed eliminazione dei dati, che vengono eseguite sempre negli intervalli delle chiavi di partizionamento orizzontale.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.
  • Collocare il servizio di suddivisione-unione nel centro dati e nell’area in cui si trovano i database.Collocate your split-merge service in the region and data center where your databases reside.

Risorse aggiuntiveAdditional resources

Se non si usano gli strumenti di database elastici,Not using elastic database tools yet? vedere la Guida introduttiva.Check out our Getting Started Guide. Se ci sono domande, è possibile visitare il forum sul database SQL mentre è possibile inserire le richieste di nuove funzionalità nel forum relativo a commenti e suggerimenti sul database SQL.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.