Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di Azure
Istanza gestita di SQL di Azure
La certificazione di compatibilità consente alle aziende di aggiornare e modernizzare un database SQL Server in locale, nel cloud e in dispositivi perimetrali, eliminando i rischi di compatibilità delle applicazioni.
Lo stesso motore di database supporta sia SQL Server che il database SQL di Azure (incluso il servizio Istanza gestita di SQL di Azure). Questo motore di database condiviso significa che un database utente può essere spostato senza problemi tra SQL Server locale e il database SQL di Azure, mentre il codice dell'applicazione eseguito nel database come Transact-SQL continua a funzionare come nel sistema di origine.
Per ogni nuova versione di SQL Server, il livello di compatibilità predefinito è impostato in base alla versione del motore di database. Tuttavia, il livello di compatibilità delle versioni precedenti viene mantenuto per garantire la compatibilità continua delle applicazioni esistenti. Questa matrice di compatibilità è visibile qui. Pertanto, un'applicazione certificata per interagire con una determinata versione di SQL Server viene in effetti certificata per funzionare con il livello di compatibilità predefinito di tale versione.
Ad esempio, il livello di compatibilità del database 130 è l'impostazione predefinita in SQL Server 2016 (13.x). Dato che i livelli di compatibilità impongono comportamenti specifici funzionali e di ottimizzazione delle query per Transact-SQL, un database certificato per funzionare in SQL Server 2016 (13.x) viene implicitamente certificato per il livello di compatibilità del database 130. Questo database può funzionare così com'è in una versione più recente di SQL Server, ad esempio SQL Server 2019 15.x, e del database SQL di Azure, a condizione che venga mantenuto il livello di compatibilità del database 130.
Si tratta di un principio fondamentale per il modello di operazione di integrazione continua del database SQL di Microsoft Azure. Il motore di database viene costantemente migliorato e aggiornato in Azure, ma poiché i database esistenti mantengono il livello di compatibilità corrente, continuano a funzionare come previsto anche dopo gli aggiornamenti del motore di database sottostante.
Questo è anche il modo in cui SharePoint Server 2016 e SharePoint Server 2019 si certificano su SQL Server e Azure SQL Managed Instance. È possibile distribuire qualsiasi motore di database di SQL Server che utilizza i livelli di compatibilità del database supportati per tali versioni di SharePoint Server. Per altre informazioni, vedere Requisiti hardware e software per SharePoint Server 2016 e Requisiti hardware e software per SharePoint Server 2019.
Gestire i rischi di aggiornamento con la certificazione di compatibilità
L'uso della certificazione di compatibilità è un approccio prezioso per la modernizzazione del database. Quando gli sviluppatori certificano in base al livello di compatibilità, si impostano i requisiti tecnici per un'applicazione da supportare in SQL Server e nel database SQL di Azure, ma separano il ciclo di vita dell'applicazione dal ciclo di vita della piattaforma di database. Questo consente alle aziende di mantenere aggiornato il motore di database di SQL Server in base ai requisiti specifici per i criteri del ciclo di vita, nonché di usare i nuovi miglioramenti per scalabilità e prestazioni che non sono dipendenti dal codice e le applicazioni che si connettono possono mantenere lo stato funzionale tra un aggiornamento e l'altro.
I principali fattori di rischio per qualsiasi aggiornamento sono la possibilità di influire negativamente sulle funzionalità e sui problemi di prestazioni. La certificazione di compatibilità offre una certa tranquillità per la gestione di questi rischi di aggiornamento:
Per quanto riguarda il comportamento di Transact-SQL, qualsiasi modifica significa che la correttezza di un'applicazione deve essere ricertificata. L'impostazione del livello di compatibilità del database garantisce tuttavia la compatibilità con le versioni precedenti di SQL Server solo per il database specificato e non per l'intero server. Mantenere il livello di compatibilità del database così com'è garantisce che le query dell'applicazione esistenti continuino a esibire lo stesso comportamento prima e dopo un aggiornamento del motore di database. Per altre informazioni sul comportamento e sui livelli di compatibilità di Transact-SQL, vedere Uso dei livelli di compatibilità per la compatibilità con le versioni precedenti.
Per quanto riguarda le prestazioni, poiché vengono introdotti miglioramenti per Query Optimizer con ogni versione, è possibile che si verifichino differenze del piano di query tra versioni diverse del motore di database. Le differenze nei piani di query nell'ambito di un aggiornamento di solito si traducono in rischi, quando alcune modifiche potrebbero essere dannose per una specifica query o un carico di lavoro. A sua volta, questo rischio è in genere alla base dell'esigenza della ricertificazione dell'applicazione, che può ritardare gli aggiornamenti e creare complicazioni per ciclo di vita e supporto.
La mitigazione dei rischi di aggiornamento è il motivo per cui i miglioramenti di Query Optimizer vengono vincolati al livello di compatibilità predefinito di una nuova versione (in altre parole, il più alto livello di compatibilità per qualsiasi nuova versione). La certificazione di compatibilità include la protezione della forma del piano di query: il concetto che mantiene un livello di compatibilità del database as-is, subito dopo un aggiornamento del motore di database, si traduce nell'uso dello stesso modello di ottimizzazione delle query nella nuova versione precedente all'aggiornamento e la forma del piano di query non deve essere modificata.
Per altre informazioni, vedere la sezione Che cos'è la forma del piano di query di questo articolo.
Per altre informazioni sui livelli di compatibilità, vedere Uso dei livelli di compatibilità per la compatibilità con le versioni precedenti.
Per un'applicazione esistente già certificata per un determinato livello di compatibilità, aggiornare il motore di database di SQL Server e mantenere il livello di compatibilità del database precedente. Non è necessario ricertificare un'applicazione in questo scenario. Per altre informazioni, vedere Livelli di compatibilità e aggiornamenti del motore di database di seguito in questo articolo.
Per il nuovo lavoro di sviluppo o quando un'applicazione esistente richiede l'uso di nuove funzionalità, ad esempio l'elaborazione di query intelligenti e alcuni nuovi Transact-SQL, pianificare l'aggiornamento del livello di compatibilità del database alla versione più recente disponibile in SQL Server e ricertificare l'applicazione per il funzionamento con tale livello di compatibilità. Per altre informazioni sull'aggiornamento del livello di compatibilità del database, vedere Procedure consigliate per aggiornare il livello di compatibilità del database.
Che cos'è la forma del piano di query?
La forma del piano di query si riferisce alla rappresentazione visiva dei diversi operatori che costituiscono un piano di query. Sono inclusi operatori quali seeks, scans, joins e sorts, nonché le connessioni fra tali operatori, che indicano il flusso di dati e l'ordine delle operazioni da eseguire per produrre il set di risultati desiderato. La forma del piano di query è determinata da Query Optimizer.
Per mantenere prevedibili le prestazioni delle query durante un aggiornamento, è fondamentale garantire che venga usata la stessa forma del piano di query. Questo obiettivo può essere raggiunto evitando di modificare il livello di compatibilità del database subito dopo un aggiornamento, anche se nel motore di database sottostante sono presenti versioni diverse. Se nell'ecosistema di esecuzione delle query non sono state apportate altre modifiche, ad esempio modifiche significative nelle risorse disponibili o nella distribuzione dei dati sottostanti, le prestazioni delle query rimangono invariate.
Tuttavia, mantenere la forma di un piano di query non è l'unico fattore che potrebbe avere implicazioni sulle prestazioni dopo un aggiornamento. Se si sposta il database in un motore di database più recente e si apportano modifiche ambientali, è possibile introdurre fattori che hanno un effetto immediato sulle prestazioni di una query, anche se il piano di query mantiene la stessa forma tra le versioni. Queste modifiche ambientali possono includere il nuovo motore di database con più o meno risorse di memoria e CPU disponibili, modifiche alle opzioni di configurazione del server o del database o modifiche alla distribuzione dei dati che influiscono sulla modalità di creazione di un piano di query. Ecco perché è importante capire che il mantenimento del livello di compatibilità del database protegge effettivamente da modifiche alla forma del piano di query, ma non offre alcuna protezione da altri aspetti ambientali che influiscono sulle prestazioni delle query, tra cui modifiche avviate dall'utente.
Per altre informazioni, vedere Guida sull'architettura di elaborazione delle query.
Vantaggi della certificazione di compatibilità
Esistono diversi vantaggi immediati per la certificazione del database come approccio basato sulla compatibilità anziché come approccio con versione denominata:
Separare la certificazione delle applicazioni dalla piattaforma. Considerata la condivisione del motore di database, per le applicazioni che richiedono solo l'esecuzione di query Transact-SQL non è necessario gestire processi di certificazione distinti per Azure e in locale.
Riduzione dei rischi di aggiornamento perché durante la modernizzazione della piattaforma di database, i cicli di aggiornamento del livello dell'applicazione e del livello piattaforma di database possono essere separati per minori disservizi e una migliore gestione delle modifiche.
Aggiornamento senza modifiche del codice. L'aggiornamento a una nuova versione di SQL Server o del database SQL di Azure può essere eseguito senza modifiche al codice mantenendo lo stesso livello di compatibilità del sistema di origine e non è necessario ripetere la certificazione fino a quando l'applicazione deve usare miglioramenti disponibili solo con livelli di compatibilità del database più alti.
Migliorare la gestibilità e la scalabilità senza che sia necessario apportare modifiche all'applicazione, usando miglioramenti non vincolati al livello di compatibilità del database. In SQL Server questi includono, ad esempio:
Miglioramenti avanzati per il monitoraggio e la risoluzione dei problemi, con nuove viste a gestione dinamica del sistema, eventi estesi e ottimizzazione automatica.
Miglioramento della scalabilità, ad esempio con soft-NUMA automatico, recupero accelerato del database o metadati tempdb ottimizzati per la memoria.
I nuovi database sono ancora impostati sul livello di compatibilità predefinito della versione del motore di database. Tuttavia, quando un database viene ripristinato o collegato da una versione precedente di SQL Server a una nuova versione di SQL Server o del database SQL di Azure, il database mantiene il livello di compatibilità esistente.
Verificare il livello di compatibilità supportato
Prima di trasferire un database a una nuova versione di SQL Server o del database SQL di Azure, verificare che il livello di compatibilità del database sia ancora supportato. La matrice di supporto del livello di compatibilità del database può essere visualizzata negli argomenti del livello di compatibilità ALTER DATABASE.
Se in fase di aggiornamento di un database viene usato un livello di compatibilità inferiore a quello consentito, ad esempio il livello 90 predefinito in SQL Server 2005 (9.x), il database viene automaticamente impostato sul livello più basso di compatibilità consentito (100).
Per determinare il livello di compatibilità corrente, eseguire una query sulla compatibility_level colonna in sys.databases.
Livelli di compatibilità e aggiornamenti del motore di database
Per aggiornare il motore di database alla versione più recente, mantenendo il livello di compatibilità del database esistente prima dell'aggiornamento e il relativo stato di supporto, è necessario eseguire la convalida statica della superficie di attacco funzionale del codice dell'applicazione nel database (oggetti programmabilità, ad esempio stored procedure, funzioni, trigger e altri) e nell'applicazione (usando una traccia del carico di lavoro che acquisisce il codice dinamico inviato dall'applicazione).
Questa operazione può essere eseguita facilmente usando il componente di migrazione di SQL Server in SQL Server Management Studio. L'assenza di errori nell'output del report, relativa alla funzionalità mancante o incompatibile, protegge l'applicazione da eventuali regressioni funzionali nella nuova versione di destinazione. Se sono necessarie modifiche per assicurarsi che il database funzioni nella nuova versione, lo strumento consente di individuare dove sono necessarie le modifiche e quali soluzioni alternative sono disponibili.
Questa convalida funzionale è particolarmente importante quando si sposta un database da una versione legacy (ad esempio, SQL Server 2008 R2 (10.50.x) o SQL Server 2012 (11.x)) a una nuova versione di SQL Server o Azure SQL Database, perché il codice dell'applicazione potrebbe utilizzare codice dismesso Transact-SQL non protetto dal livello di compatibilità del database. Tuttavia, quando si passa da una versione più recente (ad esempio SQL Server 2016 (13.x)) a SQL Server 2022 (16.x) o al database SQL di Azure, non c'è alcuna interruzione Transact-SQL di preoccuparsi. Per altre informazioni sulle istruzioni Transact-SQL sospese, vedere Uso dei livelli di compatibilità per la compatibilità con le versioni precedenti.
Nota
Il componente di migrazione di SQL Server supporta il livello di compatibilità del database 100 e versioni successive. SQL Server 2005 (9.x) come versione di origine è escluso.
È consigliabile eseguire alcuni test minimi per convalidare l'esito positivo di un aggiornamento, mantenendo al tempo stesso il livello di compatibilità del database precedente. Determinare questa quantità minima di test in base all'applicazione e allo scenario specifici.
Protezione del piano di query
Microsoft offre protezione della forma del piano di query quando:
La nuova versione di SQL Server (destinazione) viene eseguita su hardware simile a quello in cui veniva eseguita la versione precedente di SQL Server (origine).
Lo stesso livello di compatibilità del database supportato viene usato sia in SQL Server di destinazione che in SQL Server di origine.
Lo stesso database e lo stesso carico di lavoro vengono usati sia in SQL Server di destinazione che in SQL Server di origine.
Verrà risolta qualsiasi regressione della forma del piano di query (rispetto all'istanza di SQL Server di origine) che si verifica in queste condizioni. In questo caso, contattare il supporto tecnico Microsoft.