Certificazione di compatibilità

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 vengono certificati per SQL Server e Istanza gestita di SQL di Azure, consentendo di distribuire qualsiasi motore di database di SQL Server che possa usare i livelli di compatibilità del database supportati per queste 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. Grazie alla certificazione basata sul livello di compatibilità, gli sviluppatori definiscono i requisiti tecnici per il supporto di un'applicazione 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.

La possibilità di influire negativamente sulle funzionalità e sulle prestazioni rappresenta il principale fattore di rischio per qualsiasi aggiornamento. 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 del piano di query nell'ambito di un aggiornamento in genere rappresentano un rischio se è possibile che alcune modifiche possano essere dannose per una query o un carico di lavoro specifico. 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: se si mantiene invariato un livello di compatibilità del database subito dopo un aggiornamento del motore di database, nella nuova versione si userà lo stesso modello di ottimizzazione delle query adottato prima dell'aggiornamento e la forma del piano di query rimane invariata.

    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.

Importante

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 i nuovi progetti di sviluppo o quando un'applicazione esistente richiede l'uso di nuove funzionalità come l'elaborazione di query intelligenti oltre a nuovi elementi Transact-SQL, pianificare l'aggiornamento del livello di compatibilità del database a quello più recente disponibile in SQL Server e certificare di nuovo l'applicazione per l'uso di questo 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.

Mantenere invariata la forma di un piano di query, tuttavia, non è l'unico fattore che può incidere sulle prestazioni dopo un aggiornamento. Se si sposta il database in un motore di database più recente e si apportano modifiche ambientali, è possibile che vengano introdotti fattori con un impatto immediato sulle prestazioni di una query, anche se la forma del piano di query non cambia tra le varie versioni. Le modifiche ambientali possono essere costituite, ad esempio, dalla disponibilità nel motore di database di una quantità maggiore o minore di risorse di memoria e CPU, da modifiche alle opzioni di configurazione del server o del database o da modifiche alla distribuzione dei dati che influiscono sulle 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 tali miglioramenti includono ad esempio:

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.

Importante

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 qui.

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 colonna compatibility_level di 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 che esisteva prima dell'aggiornamento e il relativo stato di supporto, è consigliabile eseguire la convalida della superficie di attacco funzionale statica del codice dell'applicazione nel database (oggetti di programmabilità come stored procedure, funzioni, trigger e altri) e nell'applicazione (mediante una traccia del carico di lavoro che acquisisce il codice dinamico inviato dall'applicazione).

Questa operazione può essere eseguita facilmente usando lo strumento Microsoft Data Migration Assistant (DMA). L'assenza di errori nell'output dello strumento DMA, relativi a funzionalità mancanti o non compatibili, protegge l'applicazione da regressioni funzionali nella nuova versione di destinazione. Se sono necessarie modifiche per garantire che il database funzioni nella nuova versione, DMA consentirà di individuare le modifiche necessarie e le soluzioni alternative disponibili. Per altre informazioni, vedere Panoramica di Data Migration Assistant.

Suggerimento

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), in una nuova versione di SQL Server o del database SQL di Azure, perché è possibile che il codice dell'applicazione usi istruzioni Transact-SQL non più disponibili e non protette dal livello di compatibilità del database. Ma, quando si passa da una versione più recente, ad esempio SQL Server 2016 (13.x), a SQL Server 2019 (15.x) o al database SQL di Azure, non è necessario preoccuparsi di eventuali istruzioni Transact-SQL non più disponibili. Per altre informazioni sulle istruzioni Transact-SQL sospese, vedere Uso dei livelli di compatibilità per la compatibilità con le versioni precedenti.

Nota

DMA supporta il livello di compatibilità del database 100 e superiore. SQL Server 2005 (9.x) come versione di origine è escluso.

Importante

Microsoft consiglia di eseguire una quantità minima di test per convalidare l'esito positivo di un aggiornamento mantenendo il livello di compatibilità del database precedente. Determinare questa quantità minima di test in base all'applicazione e allo scenario specifici.

Importante

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).
  • Viene usato lo stesso livello di compatibilità del database supportato nell'istanza di SQL Server di destinazione e nell'istanza di SQL Server di origine.
  • Lo stesso database e lo stesso carico di lavoro vengono usati nell'istanza di SQL Server di destinazione e in quella di origine.

Eventuali regressioni della forma del piano di query (rispetto all'istanza di SQL Server di origine) che si dovessero verificare nelle condizioni sopra riportate verranno risolte. A questo scopo, contattare il supporto tecnico Microsoft.

Vedi anche