Accesso alle tabelle con ottimizzazione per la memoria utilizzando codice Transact-SQL interpretato
Si applica a: SQL Server Database SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)
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.
Transact-SQL interpretato fa riferimento a batch o stored procedure Transact-SQL diverse da stored procedure compilate 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:
Query ad hoc e attività amministrative.
Query di report che in genere usano costrutti non disponibili nelle stored procedure compilate in modo nativo, come le funzioni finestra , anche note come 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 stored procedure compilate in modo nativo.
Tuttavia, i costrutti Transact-SQL seguenti non sono supportati in stored procedure Transact-SQL interpretate mediante le quali si accede ai dati in una tabella ottimizzata per la memoria.
Area | Non supportato |
---|---|
Accesso a tabelle | TRUNCATE TABLE MERGE (tabella ottimizzata per la memoria come destinazione) Cursori Dynamic e Keyset (diventano automaticamente Static). Accesso dai moduli CLR, utilizzando la connessione del contesto. Riferimento a una tabella ottimizzata per la memoria da una vista indicizzata. |
Tra database | Query tra database Transazioni tra database Server collegati |
Hint di tabella
Per ulteriori informazioni sugli hint di tabella, vedere Hint di tabella (Transact-SQL). È stato aggiunto SNAPSHOT per supportare 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 = integer
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:
Specificare un hint di tabella del livello di isolamento come SNAPSHOT, REPEATABLEREAD o SERIALIZABLE.
Impostare l'opzione di database MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT su ON.
Un hint di tabella del livello di isolamento non è necessario per le tabelle ottimizzate per la memoria a cui accedono query in esecuzione in modalità autocommit.