Gestire lo schema in un'applicazione SaaS che usa più database multi-tenant
Si applica a: Database SQL di Azure
Questa esercitazione esamina le problematiche correlate alla gestione di un insieme di database in un'applicazione SaaS (software come un servizio). Vengono illustrate soluzioni per il fan-out delle modifiche allo schema nell'insieme di database.
Come qualsiasi altra applicazione, l'app SaaS Wingtip Tickets evolverà nel tempo e saranno necessarie modifiche al database. Le modifiche possono influire sui dati di schemi o di riferimento o applicare attività di manutenzione database. Con un'applicazione SaaS che usa un modello di un database per ogni tenant, le modifiche devono essere coordinate in un insieme potenzialmente grande di database tenant. Inoltre, è necessario incorporare queste modifiche nel processo di provisioning del database per assicurare che siano incluse nei nuovi database al momento della creazione.
Due scenari
Questa esercitazione illustra i due scenari seguenti:
- Distribuire gli aggiornamenti dei dati di riferimento per tutti i tenant.
- Ricompilare un indice nella tabella contenente i dati di riferimento.
La funzionalità Processi elastici del database SQL di Azure viene usata per eseguire queste operazioni tra i database tenant. I processi funzionano anche sul database tenant "modello". Nell'app di esempio Wingtip Tickets il database modello viene copiato per effettuare il provisioning di un nuovo database tenant.
In questa esercitazione si apprenderà come:
- Creare un agente processo.
- Eseguire una query T-SQL su più database tenant.
- Aggiornare i dati di riferimento in tutti i database tenant.
- Creare un indice su una tabella in tutti i database tenant.
Prerequisiti
L'app SaaS Wingtip Tickets per database multi-tenant deve essere già stata distribuita:
- Per istruzioni, vedere la prima esercitazione, in cui viene presentata l'app SaaS per database multi-tenant Wingtip Tickets:
Distribuire ed esplorare un'applicazione di database multi-tenant partizionato che usa il database SQL di Azure.- Il processo di distribuzione viene eseguito in meno di cinque minuti.
- È necessario disporre di una versione multi-tenant partizionato di Wingtip installata. Le versioni per autonoma e database per tenant non supportano questa esercitazione.
- Per istruzioni, vedere la prima esercitazione, in cui viene presentata l'app SaaS per database multi-tenant Wingtip Tickets:
La versione più recente di SQL Server Management Studio (SSMS) deve essere installata. Scaricare e installare SSMS.
Azure PowerShell deve essere installato. Per informazioni dettagliate, vedere Introduzione ad Azure PowerShell.
Introduzione ai modelli di gestione dello schema SaaS
Il modello di database multi-tenant partizionato usato in questo esempio consente a un database tenant di contenere uno o più tenant. Questo esempio illustra la possibilità di usare una combinazione di database per più tenant e a tenant singolo, che abilita un modello ibrido di gestione del tenant. La gestione delle modifiche a questi database può essere complessa. Il servizio Processi elastici facilita l'amministrazione e la gestione di un numero elevato di database. I processi consentono di eseguire script Transact-SQL in modo sicuro e affidabile come attività, rispetto a un gruppo di database tenant. Le attività sono indipendenti dall'interazione o dall'input dell'utente. Questo metodo può essere usato per distribuire modifiche dello schema e dei dati di riferimento comuni a tutti i tenant in un'applicazione. Il servizio Processi elastici possono essere usati anche per conservare una copia del modello finale del database. Il modello viene usato per creare nuovi tenant, assicurando che siano sempre in uso lo schema e i dati di riferimento più recenti.
Processi elastici
Nel 2024, i processi elastici sono stati rilasciati come prodotto disponibile a livello generale con nuove funzionalità. Una funzionalità integrata del database SQL di Azure, vedere Processi di database elastico.
Ottenere gli script e il codice sorgente dell'applicazione SaaS di database multi-tenant Wingtip Tickets
Gli script del database multi-tenant SaaS Wingtip Tickets e un codice sorgente dell'applicazione sono disponibili nel repository WingtipTicketsSaaS-MultiTenantDB su GitHub. Vedere le linee guida generali per i passaggi da seguire per scaricare e sbloccare gli script dell'app SaaS Wingtip Tickets.
Creare un database dell'agente processo e un nuovo agente processo
Per questa esercitazione è necessario usare PowerShell per creare il database di agenti processo e l'agente processo. Come il database msdb
usato da SQL Agent, l'agente di processo usa un database nel database SQL di Azure per archiviare le definizioni dei processi, lo stato dei processi e la cronologia. Dopo aver creato l'agente processo, è possibile creare e monitorare i processi immediatamente.
- In PowerShell ISE, apri ...\Learning Modules\Schema Management\Demo-SchemaManagement.ps1.
- Premere F5 per eseguire lo script.
Lo script Demo-SchemaManagement.ps1 chiama lo script Deploy-SchemaManagement.ps1 per creare un database denominato jobagent
nel server di catalogo. Lo script crea quindi l'agente di processo, passando il database jobagent
come parametro.
Creare un processo per distribuire nuovi dati di riferimento a tutti i tenant
Preparazione
Ogni database del tenant include un set di tipi di sedi nella tabella VenueTypes
. Ogni tipo di sede definisce il tipo di eventi ospitati in una sede. Questi tipi di sedi corrispondono alle immagini di sfondo visualizzate nell'app degli eventi del tenant. Questo esercizio illustra come distribuire un aggiornamento a tutti i database per aggiungere due tipi di eventi aggiuntivi: Motorcycle Racing (Gare motociclistiche) e Swimming Club (Club nuoto).
Esaminare prima i tipi di sede inclusi in ogni database tenant. Connettiti a uno dei database tenant in SQL Server Management Studio (SSMS) ed esamina la tabella VenueTypes
. È anche possibile eseguire query su questa tabella nell'editor di query nel portale di Azure, accessibile dalla pagina di database.
- Apri SSMS e connettiti al server tenants:
tenants1-dpt-<user>.database.windows.net
. - Per verificare che Motorcycle Racing e Swimming Clubnon siano attualmente inclusi, esplora il database
contosoconcerthall
nel servertenants1-dpt-<user>
ed esegui una query sulla tabellaVenueTypes
.
Passaggi
L'esercizio prevede ora la creazione di un processo per aggiornare la tabella VenueTypes
in ogni database tenant, aggiungendo i due nuovi tipi di eventi.
Per creare un nuovo processo, usa l'insieme di stored procedure di sistema dei processi create nel database jobagent
. Le stored procedure sono state create quando è stato creato l'agente processo.
In SSMS, connettiti al server tenants:
tenants1-mt-<user>.database.windows.net
.Esplora il database
tenants1
.Esegui una query nella tabella
VenueTypes
per verificare che né Motorcycle Racing né Swimming Club siano ancora nell'elenco risultati.Connettiti al server di catalogo, ovvero
catalog-mt-<user>.database.windows.net
.Connettiti al database
jobagent
nel server di catalogo.In SSMS, apri il file ...\Learning Modules\Schema Management\DeployReferenceData.sql.
Modifica l'istruzione:
set @User = <user>
e sostituisci il valore Utente usato per l'implementazione dell'applicazione del database multi-tenant SaaS Wingtip Tickets.Premere F5 per eseguire lo script.
Osservazione
Osservare gli elementi seguenti nello script DeployReferenceData.sql:
sp_add_target_group crea il nome del gruppo di destinazione DemoServerGroup e aggiunge i membri di destinazione al gruppo.
sp_add_target_group_member aggiunge gli articoli seguenti:
- Un tipo di membro di destinazione del server.
- Si tratta del server
tenants1-mt-<user>
che contiene i database tenant. - Includere il server include i database tenant esistenti in fase di esecuzione del processo.
- Si tratta del server
- Un tipo di membro di destinazione del database per il database modello (
basetenantdb
) presente nel servercatalog-mt-<user>
, - Un tipo di membro di destinazione del database per includere il database
adhocreporting
usato in un'esercitazione successiva.
- Un tipo di membro di destinazione del server.
sp_add_job crea un processo denominato Distribuzione dati di riferimento.
sp_add_jobstep crea il passaggio del lavoro contenente il testo del comando T-SQL per aggiornare la tabella di riferimento,
VenueTypes
.Le restanti viste nello script consentono di confermare l'esistenza degli oggetti e gestire il monitoraggio dell'esecuzione del processo. Usare queste query per esaminare il valore di stato nella colonna lifecycle per determinare quando il processo è stato completato. Il processo aggiorna il database tenant e aggiorna i due database aggiuntivi che contengono la tabella di riferimento.
In SSMS, esplora il database tenant nel server tenants1-mt-<user>
. Esegui una query nella tabella VenueTypes
per verificare che Motorcycle Racing e Swimming Clubsiano ora aggiunti alla tabella. Il conteggio totale dei tipi di eventi deve essere aumentato di due.
Creare un processo per gestire l'indice della tabella di riferimento
In questo esercizio viene creato un processo per ricompilare l'indice sulla chiave primaria della tabella di riferimento su tutti i database tenant. La ricompilazione di un indice è una tipica operazione di gestione del database che può essere eseguita da un amministratore dopo un carico di dati di grandi dimensioni, per migliorare le prestazioni.
In SSMS, connettiti al database
jobagent
nel servercatalog-mt-<user>.database.windows.net
.In SSMS, apri il file ...\Learning Modules\Schema Management\OnlineReindex.sql.
Premere F5 per eseguire lo script.
Osservazione
Nello script OnlineReindex.sql osservare gli elementi seguenti:
sp_add_job
crea un nuovo lavoro denominato Online Reindex PK__VenueTyp__265E44FD7FD4C885.sp_add_jobstep
crea il passaggio del lavoro contenente il testo del comando T-SQL per aggiornare l'indice.Le viste rimaste nello script monitorano l'esecuzione del processo. Usa queste query per esaminare il valore di stato nella colonna
lifecycle
per determinare quando il lavoro viene completato su tutti i membri del gruppo di destinazione.
Risorse aggiuntive
Passaggi successivi
In questa esercitazione si è appreso come:
- Creare un agente processo per eseguire i processi T-SQL in più database
- Aggiornare i dati di riferimento in tutti i database tenant
- Creare un indice su una tabella in tutti i database tenant
Provare quindi a eseguire l'esercitazione sul reporting ad hoc per esaminare l'esecuzione di query distribuite tra database tenant.