Accesso alle tabelle con ottimizzazione per la memoria utilizzando codice Transact-SQL interpretato

Si applica a:SQL ServerDatabase SQL di Azure

Salvo poche eccezioni, è possibile accedere alle tabelle ottimizzate per la memoria usando qualsiasi query Transact-SQL o operazione DML (selezione, inserimento, aggiornamento o eliminazione), batch ad hoc e moduli SQL quali stored procedure, funzioni con valori di tabella, trigger e viste.

Per Transact-SQL interpretato si intendono i batch o le stored procedure Transact-SQL diversi da una stored procedure compilata in modo nativo. L'accesso Transact-SQL interpretato a tabelle ottimizzate per la memoria è denominato accesso di interoperabilità.

A partire da SQL Server 2016 (13.x), le query in Transact-SQL interpretato possono analizzare le tabelle ottimizzate per la memoria in parallelo, invece che solo in modalità seriale.

È inoltre possibile accedere alle tabelle con ottimizzazione per la memoria tramite una stored procedure compilata in modo nativo. Le stored procedure compilate in modo nativo sono consigliate in caso di operazioni OLTP critiche per le prestazioni.

L'accesso Transact-SQL interpretato è consigliato per questi scenari:

  • Interrogazioni ad hoc e attività amministrative.

  • Query di reporting, che in genere usano costrutti non disponibili nelle stored procedure compilate in modo nativo, come le funzioni di finestra, talvolta denominate funzioni OVER.

  • Per eseguire la migrazione di parti dell'applicazione critiche per le prestazioni a tabelle ottimizzate per la memoria, con modifiche minime al codice dell'applicazione o addirittura nessuna. È possibile che si ottengano dei miglioramenti delle prestazioni dalla migrazione delle tabelle. Se quindi si esegue la migrazione di stored procedure a stored procedure compilate in modo nativo, è possibile che si ottengano miglioramenti ulteriori.

  • Quando un'istruzione Transact-SQL non è disponibile per le stored procedure con compilazione nativa.

Tuttavia, i seguenti costrutti Transact-SQL non sono supportati nelle stored procedure Transact-SQL interpretate che accedono ai dati in una tabella con ottimizzazione per la memoria.

Area Non supportato
Accesso a tabelle TRUNCATE TABLE

MERGE (tabella ottimizzata per la memoria come destinazione)

Cursori dinamici e keyset (vengono automaticamente convertiti in cursori statici).

Accesso tramite moduli CLR, utilizzando la connessione contestuale.

Riferimento a una tabella ottimizzata per la memoria da una vista indicizzata.
Tra database Interrogazioni tra database

Transazioni tra database

Server collegati

Suggerimenti di tabella

Per ulteriori informazioni sugli hint di tabella, vedere Hint di tabella (Transact-SQL). Lo SNAPSHOT è stato aggiunto per il supporto di OLTP in memoria.

Gli hint di tabella seguenti non sono supportati quando si accede a una tabella ottimizzata per la memoria utilizzando Transact-SQL interpretato.

HOLDLOCK

PAGLOCK

READUNCOMMITTED

TABLOCKXX

IGNORE_CONSTRAINTS

READCOMMITTED

ROWLOCK

UPDLOCK

IGNORE_TRIGGERS

READCOMMITTEDLOCK

SPATIAL_WINDOW_MAX_CELLS = intero

XLOCK

NOWAIT

READPAST

TABLOCK

Quando si accede a una tabella ottimizzata per la memoria da una transazione esplicita o implicita usando Transact-SQL interpretato, è necessario eseguire almeno una delle operazioni seguenti:

Un hint di tabella per il livello di isolamento non è necessario per le tabelle ottimizzate per la memoria a cui accedono query eseguite in modalità auto-commit.