OLTP in memoria (ottimizzazione per la memoria)
Novità di SQL Server 2014 (12.x), In-Memory OLTP può migliorare significativamente le prestazioni dell'applicazione del database OLTP. In-Memory OLTP è un motore di database ottimizzato per la memoria integrato nel motore di SQL Server, ottimizzato per OLTP.
di | Per provare SQL Server 2016, Iscriversi a Microsoft Azure e quindi andare qui per creare una macchina virtuale con SQL Server 2016 già installato. Al termine, è possibile eliminare la macchina virtuale. |
Per usare In-Memory OLTP, si definisce una tabella con accesso elevato come ottimizzata per la memoria. Le tabelle ottimizzate per la memoria sono completamente transazionali, durevoli e sono accessibili usando Transact-SQL nello stesso modo delle tabelle basate su disco. Una query può fare riferimento sia alle tabelle ottimizzate per la memoria che alle tabelle basate su disco. Una transazione può aggiornare i dati nelle tabelle ottimizzate per la memoria e in quelle basate su disco. Le stored procedure che fanno riferimento solo alle tabelle ottimizzate per la memoria possono essere compilate in modo nativo nel codice macchina per migliorare ulteriormente le prestazioni. Il motore OLTP In-Memory è progettato per una concorrenza di sessione estremamente elevata per il tipo OLTP di transazioni guidate da un livello intermedio con scalabilità elevata. Per ottenere ciò, vengono usati strutture di dati prive di latch e un controllo della concorrenza ottimistica con più versioni. Il risultato è prevedibile, una bassa latenza inferiore a un millisecondo e una velocità effettiva elevata con scalabilità lineare per le transazioni di database. Il miglioramento effettivo delle prestazioni dipende da molti fattori, ma in genere si possono ottenere miglioramenti delle prestazioni da 5 a 20 volte.
La tabella seguente riepiloga i modelli di carico di lavoro che possono trarre vantaggio dall'uso di In-Memory OLTP:
Scenario di implementazione | Scenario di implementazione | Vantaggi di In-Memory OLTP |
---|---|---|
Elevata frequenza di inserimento dati da più connessioni simultanee. | Principalmente archiviazione di operazioni solo di accodamento. Non è possibile far fronte al carico di lavoro di inserimento. |
Eliminare i conflitti. Ridurre la registrazione. |
Prestazioni di lettura e scalabilità con inserimenti e aggiornamenti di batch periodici. | Operazioni di lettura a elevate prestazioni, soprattutto quando ogni richiesta del server ha più operazioni di lettura da eseguire. Non è possibile soddisfare i requisiti di scalabilità verticale. |
Eliminare i conflitti all'arrivo di nuovi dati. Recupero di dati con latenza più bassa. Ridurre il tempo di esecuzione del codice. |
Elaborazione intensa della logica di business nel server di database. | Carico di lavoro di inserimento, aggiornamento ed eliminazione. Calcolo intenso all'interno delle stored procedure. Conflitti di lettura e scrittura. |
Eliminare i conflitti. Ridurre il tempo di esecuzione del codice in modo da ottenere una riduzione della latenza e un miglioramento della velocità effettiva. |
Bassa latenza. | Richiedere transazioni aziendali a bassa latenza che le tipiche soluzioni di database non riescono a ottenere. | Eliminare i conflitti. Ridurre il tempo di esecuzione del codice. Esecuzione del codice a bassa latenza. Recupero di dati efficiente. |
Gestione dello stato delle sessioni. | Operazioni di inserimento e aggiornamento e ricerche di punti frequenti. Caricamento a elevata scalabilità da numerosi server Web senza stato. |
Eliminare i conflitti. Recupero di dati efficiente. Riduzione o rimozione di operazioni I/O facoltative quando si usano tabelle non durevoli. |
Per altre informazioni sugli scenari in cui In-Memory OLTP determinerà i maggiori miglioramenti delle prestazioni, vedere OLTP in memoria - Modelli di carico di lavoro comuni e considerazioni sulla migrazione.
OLTP in memoria migliora le prestazioni in modo ottimale in OLTP con transazioni con esecuzione rapida.
I modelli di programmazione che In-Memory OLTP miglioreranno includono scenari di concorrenza, ricerche punto, carichi di lavoro in cui sono presenti molti inserimenti e aggiornamenti e logica di business nelle stored procedure.
L'integrazione con SQL Server significa che è possibile avere tabelle ottimizzate per la memoria e tabelle basate su disco nello stesso database ed eseguire query su entrambi i tipi di tabelle.
In SQL Server 2014 (12.x) esistono limitazioni nell'area di attacco Transact-SQL supportata per In-Memory OLTP.
In-Memory OLTP consente di ottenere miglioramenti significativi in termini di prestazioni e scalabilità tramite:
Algoritmi ottimizzati per accedere ai dati residenti in memoria.
Controllo della concorrenza ottimistica che elimina i blocchi logici.
Oggetti senza blocco che eliminano tutti i latch e i blocchi fisici. I thread che eseguono operazioni transazionali non usano blocchi o latch per il controllo della concorrenza.
Stored procedure compilate in modo nativo che comportano un miglioramento significativo delle prestazioni rispetto alle stored procedure interpretate quando si accede a una tabella ottimizzata per la memoria.
Importante
Alcune modifiche di sintassi alle tabelle e alle stored procedure verranno richieste per utilizzare OLTP in memoria. Per altre informazioni, vedere Migrazione a OLTP in memoria. Prima di tentare di eseguire la migrazione di una tabella basata su disco a una tabella ottimizzata per la memoria, vedere Determinare se una tabella o una stored procedure deve essere convertita in In-Memory OLTP per vedere quali tabelle e stored procedure trarranno vantaggio da In-Memory OLTP.
Contenuto della sezione
In questa sezione vengono fornite informazioni sui seguenti concetti:
Argomento | Descrizione |
---|---|
Requisiti per l'utilizzo di tabelle con ottimizzazione per la memoria | Vengono descritti i requisiti hardware e software e le linee guida per l'utilizzo di tabelle ottimizzate per la memoria. |
Uso di OLTP in memoria in un ambiente di VM | Viene illustrato l'utilizzo di OLTP in memoria in un ambiente virtualizzato. |
Esempi di codice di OLTP in memoria | Sono contenuti esempi di codice che illustrano come creare e usare una tabella ottimizzata per la memoria. |
Tabelle ottimizzate per la memoria | Vengono introdotte le tabelle ottimizzate per la memoria. |
Variabili di tabella con ottimizzazione per la memoria | Esempio di codice in cui viene mostrato come usare una variabile di tabella ottimizzata per la memoria anziché una variabile di tabella tradizionale per ridurre l'utilizzo di tempdb. |
Indici in tabelle con ottimizzazione per la memoria | Vengono introdotti indici ottimizzati per la memoria. |
Stored procedure compilate in modo nativo | Vengono illustrate le stored procedure compilate in modo nativo. |
Gestione della memoria per OLTP in memoria | Informazioni e gestione dell'utilizzo della memoria nel sistema. |
Creazione e gestione dell'archiviazione per gli oggetti ottimizzati per la memoria | Vengono illustrati i file di dati e differenziali in cui vengono archiviate le informazioni sulle transazioni nelle tabelle ottimizzate per la memoria. |
Eseguire il backup, ripristinare e recuperare tabelle con ottimizzazione per la memoria | Descrive le operazioni di backup, ripristino e recupero delle tabelle ottimizzate per la memoria. |
Supporto di Transact-SQL per OLTP in memoria | Viene illustrato il supporto Transact-SQL per In-Memory OLTP. |
Supporto della disponibilità elevata per i database OLTP in memoria | Vengono illustrati i gruppi di disponibilità e il clustering di failover in In-Memory OLTP. |
Supporto di SQL Server per OLTP in memoria | Elenco della sintassi e delle funzionalità nuove e aggiornate per il supporto di tabelle ottimizzate per la memoria. |
Migrazione a OLTP in memoria | Viene illustrato come eseguire la migrazione di tabelle basate su disco in tabelle ottimizzate per la memoria. |
Ulteriori informazioni su OLTP in memoria sono disponibili in:
OLTP in memoria: considerazioni sulla migrazione e sui modelli di carico di lavoro comuni
Panoramica dei meccanismi interni OLTP in memoria di SQL Server