Accesso alle tabelle con ottimizzazione per la memoria utilizzando codice Transact-SQL interpretatoAccessing Memory-Optimized Tables Using Interpreted Transact-SQL

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2014)sìDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2014)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Salvo poche eccezioni, è possibile accedere alle tabelle con ottimizzazione per la memoria utilizzando qualsiasi query Transact-SQLTransact-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.With only a few exceptions, you can access memory-optimized tables using any Transact-SQLTransact-SQL query or DML operation (select, insert, update, or delete), ad hoc batches, and SQL modules such as stored procedures, table-value functions, triggers, and views.

Transact-SQLTransact-SQL interpretato fa riferimento a batch o stored procedure Transact-SQLTransact-SQL diverse da stored procedure compilate in modo nativo.Interpreted Transact-SQLTransact-SQL refers to Transact-SQLTransact-SQL batches or stored procedures other than a natively compiled stored procedure. L'accesso Transact-SQLTransact-SQL interpretato a tabelle con ottimizzazione per la memoria è denominato accesso di interoperabilità.Interpreted Transact-SQLTransact-SQL access to memory-optimized tables is referred to as interop access.

A partire da SQL Server 2016SQL Server 2016, le query in Transact-SQLTransact-SQL interpretato possono analizzare le tabelle con ottimizzazione per la memoria in parallelo, invece che solo in modalità seriale.Starting with SQL Server 2016SQL Server 2016, queries in interpreted Transact-SQLTransact-SQL can scan memory-optimized tables in parallel, instead of just in serial mode.

È inoltre possibile accedere alle tabelle con ottimizzazione per la memoria tramite una stored procedure compilata in modo nativo.Memory-optimized tables can also be accessed using a natively compiled stored procedure. Le stored procedure compilate in modo nativo sono consigliate in caso di operazioni OLTP critiche per le prestazioni.Natively compiled stored procedures are recommended for performance-critical OLTP operations.

L'accesso Transact-SQLTransact-SQL interpretato è consigliato per questi scenari:Interpreted Transact-SQLTransact-SQL access is recommended for these scenarios:

  • Query ad hoc e attività amministrative.Ad hoc queries and administrative tasks.

  • 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 .Reporting queries, which typically use constructs not available in natively compiled stored procedures (such as window functions, sometimes referred to as OVER functions).

  • Per eseguire la migrazione di parti dell'applicazione critiche per le prestazioni a tabelle con ottimizzazione per la memoria, con modifiche minime al codice dell'applicazione o addirittura nessuna.To migrate performance-critical parts of your application to memory-optimized tables, with minimal (or no) application code changes. È possibile che si ottengano dei miglioramenti delle prestazioni dalla migrazione delle tabelle.You can potentially see performance improvements from migrating tables. Se quindi si esegue la migrazione di stored procedure a stored procedure compilate in modo nativo, è possibile che si ottengano miglioramenti ulteriori.If you then migrate stored procedures to natively compiled stored procedures, you may see further performance improvement.

  • Quando un'istruzione Transact-SQLTransact-SQL non è disponibile per stored procedure compilate in modo nativo.When a Transact-SQLTransact-SQL statement is not available for natively compiled stored procedures.

Tuttavia, i costrutti Transact-SQLTransact-SQL seguenti non sono supportati in stored procedure Transact-SQLTransact-SQL interpretate mediante le quali si accede ai dati in una tabella con ottimizzazione per la memoria.However, the following Transact-SQLTransact-SQL constructs are not supported in interpreted Transact-SQLTransact-SQL stored procedures that access data in a memory-optimized table.

AreaArea Non supportatoUnsupported
Accesso a tabelleAccess to tables TRUNCATE TABLETRUNCATE TABLE

MERGE (tabella con ottimizzazione per la memoria come destinazione)MERGE (memory-optimized table as target)

Cursori Dynamic e Keyset (diventano automaticamente Static).Dynamic and keyset cursors (these automatically degrade to static).

Accesso dai moduli CLR, utilizzando la connessione del contesto.Access from CLR modules, using the context connection.

Riferimento a una tabella con ottimizzazione per la memoria da una vista indicizzata.Referencing a memory-optimized table from an indexed view.
Tra databaseCross-database Query tra databaseCross-database queries

Transazioni tra databaseCross-database transactions

Server collegatiLinked servers

Hint di tabellaTable Hints

Per ulteriori informazioni sugli hint di tabella, vedereFor more information about table hints, see. Hint di tabella (Transact-SQL).Table Hints (Transact-SQL). È stato aggiunto SNAPSHOT per supportare OLTP in memoriaIn-Memory OLTP.The SNAPSHOT was added to support OLTP in memoriaIn-Memory OLTP.

Gli hint di tabella seguenti non sono supportati quando si accede a una tabella con ottimizzazione per la memoria utilizzando Transact-SQLTransact-SQLinterpretato.The following table hints are not supported when accessing a memory-optimized table using interpreted Transact-SQLTransact-SQL.

HOLDLOCKHOLDLOCK IGNORE_CONSTRAINTSIGNORE_CONSTRAINTS IGNORE_TRIGGERSIGNORE_TRIGGERS NOWAITNOWAIT
PAGLOCKPAGLOCK READCOMMITTEDREADCOMMITTED READCOMMITTEDLOCKREADCOMMITTEDLOCK READPASTREADPAST
READUNCOMMITTEDREADUNCOMMITTED ROWLOCKROWLOCK SPATIAL_WINDOW_MAX_CELLS = integerSPATIAL_WINDOW_MAX_CELLS = integer TABLOCKTABLOCK
TABLOCKXXTABLOCKXX UPDLOCKUPDLOCK XLOCKXLOCK

Quando si accede a una tabella con ottimizzazione per la memoria da una transazione esplicita o implicita usando Transact-SQLTransact-SQLinterpretato, è necessario eseguire almeno una delle operazioni seguenti:When accessing a memory-optimized table from an explicit or implicit transaction using interpreted Transact-SQLTransact-SQL, you must do at least one of the following:

Un hint di tabella del livello di isolamento non è necessario per le tabelle con ottimizzazione per la memoria a cui accedono query in esecuzione in modalità di commit automatico.An isolation level table hint is not required for memory-optimized tables accessed by queries running in auto-commit mode.

Vedere ancheSee Also

Supporto di Transact-SQL per OLTP in memoriaTransact-SQL Support for In-Memory OLTP

Migrazione a OLTP in memoriaMigrating to In-Memory OLTP