Introduzione
La progettazione di SQL Server implica un mapping uno a molti tra il motore di database (istanza) e i database ospitati nell'istanza. Significa che puoi distribuire diversi database su un'istanza del server SQL. Secondo la documentazione Microsoft, puoi avere fino a 32767 database su una singola istanza di SQL Server. Naturalmente, ci saranno limitazioni, come le risorse sul server, la gestione della concorrenza su TempDB, il traffico di rete, ecc.
I database distribuiti in un'istanza di SQL Server possono essere database di sistema o database utente. I database di sistema vengono installati con l'istanza. In questo articolo, discuteremo lo scopo di ciascun database di sistema. Inoltre, chiariremo di cosa ti devi occupare quando gestisci i database di sistema su SQL Server.
Panoramica dei database di sistema
I database di sistema fanno parte di molti processi che si verificano quando si installa un'istanza di SQL Server. Per impostazione predefinita, questi database vengono creati nei seguenti percorsi:
%Programmi%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA
e
%programmi%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log
Il percorso può essere diverso. Durante l'installazione di SQL Server, è possibile specificare la posizione dei file del database di sistema.
Per elencare tutti i database di sistema in un'istanza, è possibile richiamare il codice nel Listato 1. Il Listato 2 può essere utilizzato per determinare la posizione dei file di dati associati ai database di sistema. Tieni presente che in entrambi gli script utilizziamo un filtro che restituisce database con database_id pari a 5 o superiore a 5.
I database di sistema "visibili" essenziali hanno database_ids 1,2,3,4:si riferiscono rispettivamente a master, tempdb, model e msdb. C'è anche un database "invisibile" chiamato database delle risorse e altri database di sistema creati quando abiliti funzionalità come la replica.
-- Listing 1: System Databases
select
name
,database_id
,create_date
,state_desc
,recovery_model_desc
,log_reuse_wait_desc
,physical_database_name
,is_db_chaining_on
,is_broker_enabled
,is_mixed_page_allocation_on
from sys.databases
where database_id<5;
-- Listing 2: System Database Files
select
name
,database_id
,DB_NAME(database_id)
,name
,physical_name
,type_desc
from sys.master_files
where database_id<5;
Figura 1:database di sistema
Il database principale
Il database master è il primo database aperto all'avvio di SQL Server, contenente i seguenti dati:
- I record della struttura/configurazione dell'istanza e di tutti gli altri database.
- Le viste di gestione più dinamiche necessarie per monitorare l'istanza.
Pertanto, dispone delle informazioni necessarie per l'apertura di tutti gli altri database. Ecco perché deve essere il primo ad aprire. La domanda è come farlo.
I parametri di avvio di SQL Server contengono due voci che definiscono le posizioni dei dati del database master e dei file di registro. I parametri di avvio predefiniti includono solo tre righe:la terza è il percorso del file di registro degli errori. All'avvio di SQL Server, deve essere in grado di scrivere nel file di registro degli errori.
Il database principale si apre per primo. Le informazioni archiviate nel database master, comprese le configurazioni definite utilizzando sp_configure, si applicano per aprire altri database e completare il processo di avvio dell'istanza.
Figura 3:parametri di avvio di SQL Server
Esistono diversi modi per conoscere gli oggetti di sistema utili di SQL Server, come le viste e le funzioni a gestione dinamica.
Ad esempio, espandere le viste o i nodi di programmabilità per il database master in Esplora oggetti. Lì, rivedi i nomi di questi oggetti e ottieni maggiori dettagli da Books Online.
Puoi anche migrare gli accessi da un'istanza all'altra. Per questo, ripristina un backup del database master nell'istanza di destinazione. Descriveremo la tecnica specifica in un articolo separato.
Figura 4:Navigazione tra gli oggetti del database principale
Il database tempDB
Il database tempDB è responsabile dell'archiviazione di dati temporanei come i risultati intermedi di operazioni pesanti. Potrebbe contenere ricostruzioni di indici, versioni di riga di database configurati con livelli di isolamento e altre funzionalità che dipendono dal controllo delle versioni delle righe, come READ_COMMITTED_SNAPSHOT.
La maggior parte delle persone considererebbe tempDB un potenziale collo di bottiglia delle prestazioni, poiché le funzioni di ogni database utente in un'istanza dipendono da tempDB.
L'ottimizzazione di tempDB dovrebbe essere un esercizio deliberato. Tuttavia, a partire da SQL Server 2016, è possibile impostare tempDB in modo accurato durante l'installazione di SQL Server. Un articolo precedente descrive in dettaglio come configurare e monitorare tempDB.
Il database modello
È possibile trattare il database del modello come un modello. Ogni database utente creato in un'istanza di SQL Server prende la configurazione del database modello. Ha la stessa dimensione e le stesse impostazioni di crescita automatica, le stesse posizioni dei file, ecc. Tuttavia, è possibile specificare tali impostazioni deliberatamente in un modo diverso nell'istruzione CREATE DATABASE.
In sostanza, se hai un'applicazione che crea un database da solo con le impostazioni predefinite, potresti voler configurare il database del modello. Ti assicura di avere un certo controllo sul risultato di questi database creati automaticamente.
Proviamo un po' con questo, usando il codice nel Listato 3.
-- Listing 3: Using the Model Database
select
name
,database_id
,DB_NAME(database_id) database_name
,name
,physical_name
,type_desc
,size/1024*8 [size (MB)]
,growth/1024*8 [size (MB)]
from sys.master_files
where DB_NAME(database_id)='model' or DB_NAME(database_id) like 'EXP%';
GO
create database EXP_BEFORE;
GO
USE [master]
GO
ALTER DATABASE [model] MODIFY FILE ( NAME = N'modeldev', SIZE = 102400KB , FILEGROWTH = 131072KB )
GO
ALTER DATABASE [model] MODIFY FILE ( NAME = N'modellog', SIZE = 102400KB )
GO
create database EXP_AFTER;
GO
select
name
,database_id
,DB_NAME(database_id) database_name
,name
,physical_name
,type_desc
,size/1024*8 [size (MB)]
,growth/1024*8 [size (MB)]
from sys.master_files
where DB_NAME(database_id)='model' or DB_NAME(database_id) like 'EXP%';
GO
Il codice esegue i seguenti passaggi:
- Interroga i sys.master_files per determinare le impostazioni utilizzate nel database del modello
- Crea un database
- Modifica le impostazioni di crescita del file di database del modello e di crescita automatica
- Crea un altro database
- Interroga sys.master_files di nuovo
Prestare attenzione alla singola frase per la creazione del database:"CREA DATABASE". In questo modo, raccoglie le impostazioni appartenenti al database del modello. I risultati mostrano che la seconda volta che abbiamo emesso il comando CREATE DATABASE, il database EXP_AFTER ha acquisito una dimensione del file di 96 GB e una crescita automatica di 128 MB (vedi Figura 5).
Figura 5:utilizzo del database modello
Vale anche la pena ricordare che non tutte le impostazioni del database vengono prelevate automaticamente dal database del modello. Ad esempio, MIXED_PAGE_ALLOCATION impostato su OFF quando crei un nuovo database, anche se è attivo nel modello e in altri database di sistema.
Il database msdb
Puoi considerare msdb un database di SQL Server Agent. Memorizza tutti i dati relativi ai lavori, alla posta del database, agli operatori e all'automazione. Sono presenti anche i dati relativi alla spedizione del registro delle transazioni, alla replica, ecc. Puoi verificarlo eseguendo set di query nel Listato 4 nella tua istanza. Ad esempio, nel msdb sono presenti oggetti relativi all'automazione.
-- Listing 4: Querying msdb Objects
-- Jobs, Alerts, Operators sit in the msdb database ...
select * from msdb..sysjobs
select * from msdb..sysalerts
select * from msdb..sysoperators
select * from msdb..sysmail_allitems
-- ... NOT in the master database
select * from master..sysjobs
select * from master..sysalerts
select * from master..sysoperators
select * from master..sysmail_allitems
È possibile apprendere molte informazioni sugli oggetti nei database msdb estraendoli ed esaminandoli nella documentazione in linea di SQL ServerSQL Server. L'approccio è lo stesso del database master.
È possibile migrare lavori, operatori e così via da un'istanza di SQL Server a un'altra. Per questo, prendi il backup del database msdb dall'istanza di origine e ripristinalo nell'istanza di destinazione. Ne parleremo in un altro articolo.
Epilogo
In questo articolo, abbiamo fornito una rapida panoramica dei database di sistema.
I database di sistema vengono forniti con un'installazione di SQL Server per impostazione predefinita. La comprensione dei vari database di sistema e dei relativi ruoli è un ottimo aiuto per la gestione dell'istanza di SQL Server.
Puoi ottenere maggiori informazioni su ciò che memorizzano e capire come gestirli da Libri in linea e altri articoli su CodingSight.
Riferimenti
- Database di sistema
- Database e archiviazione di MS SQL Server
- Concatenamento di proprietà di database incrociati