Indagine sulle aree iniziali di OLTP in memoriaSurvey of Initial Areas in In-Memory OLTP

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

Questo articolo è per gli sviluppatori che hanno premura di imparare in poco tempo le basi delle caratteristiche di prestazione di OLTP in memoria di Microsoft SQL Server e Database SQL di Azure.This article is for the developer who is in a hurry to learn the basics of the In-Memory OLTP performance features of Microsoft SQL Server and Azure SQL Database.

Per OLTP in memoria, questo articolo illustra gli argomenti seguenti:For In-Memory OLTP, this article provides the following:

  • Spiegazione concise delle funzionalità.Quick explanations of the features.
  • Esempi di codice di base che implementano le funzionalità.Core code samples that implement the features.

SQL Server e Database SQL presentano solo alcune piccole variazioni nel supporto delle tecnologie in memoria.SQL Server and SQL Database have only minor variations in their support of In-Memory technologies.

In ambiti informali, alcuni blogger chiamano la funzionalità OLTP in memoria Hekaton.In the wild some bloggers refer to the In-Memory OLTP as Hekaton.

Vantaggi delle funzionalità in memoriaBenefits of In-Memory Features

SQL Server fornisce funzionalità in memoria che possono migliorare notevolmente le prestazioni di molti sistemi di applicazione.SQL Server provides In-Memory features that can greatly improve the performance of many application systems. In questa sezione vengono descritte le considerazioni più semplici.The most straight forward considerations are described in this section.

Funzionalità per OLTP (Online Transactional Processing, elaborazione transazionale Online)Features for OLTP (Online Transactional Processing)

Le funzionalità OLTP sono più adatte ai sistemi che devono elaborare un numero elevato di SQL INSERT allo stesso tempo.Systems which must processes large numbers of SQL INSERTs concurrently are excellent candidates for the OLTP features.

  • Le statistiche mostrano che il miglioramento nella velocità di elaborazione aumenta da 5 a 20 volte se si usano le funzionalità in memoria.Our benchmarks show that speed improvements from 5 times to 20 times faster are achievable by adoption of the In-Memory features.

Sono più adatti ai sistemi che elaborano complessi calcoli in Transact-SQL.Systems which process heavy calculations in Transact-SQL are excellent candidates.

  • Una stored procedure dedicata a calcoli elevati e complessi può essere eseguita fino a 99 volte più veloce.A stored procedure that is dedicated to heavy calculations can run up to 99 times faster.

È consigliabile leggere gli articoli seguenti che offrono alcune dimostrazioni di miglioramento delle prestazioni con OLTP in memoria:Later you might visit the following articles which offer demonstrations of performance gains from In-Memory OLTP:

Funzionalità per l'analisi operativaFeatures for Operational Analytics

L'analisi in memoria si riferisce agli SQL SELECT che aggregano dati transazionali, tipicamente con l'inclusione di una clausola GROUP BY.In-Memory Analytics refers to SQL SELECTs which aggregate transactional data, typically by inclusion of a GROUP BY clause. Il tipo di indice denominato columnstore è fondamentale per l'analisi operativa.The index type called columnstore is central to operational analytics.

Ci sono due scenari principali:There are two major scenarios:

  • Analisi operativa dei batch si riferisce ai processi di aggregazione che vengono eseguiti dopo gli orari di lavoro oppure su dispositivi secondari che dispongono di copie dei dati transazionali.Batch Operational Analytics refers to aggregation processes that run either after business hours or on secondary hardware which has copies of the transactional data.
  • Analisi operativa in tempo reale si riferisce a processi di aggregazione che vengono eseguiti durante gli orari di lavoro e sui dispositivi hardware primari usati per i carichi di lavoro transazionali.Real-time Operational Analytics refers to aggregration processes that run during business hours and on the primary hardware which is used for transactional workloads.

Questo articolo è incentrato su OLTP e non sull'analisi.The present article focuses on OLTP, and not on Analytics. Per informazioni sulle funzionalità di analisi introdotte dagli indici columnstore in SQL, vedere:For information on how columnstore indexes bring Analytics to SQL, see:

Nota

Un video di due minuti relativo alle funzionalità in memoria è disponibile alla pagina sulle tecnologie in memoria per il database SQL di Azure.A two minute video about the In-Memory features is available at Azure SQL Database - In-Memory Technologies. Il video è stato pubblicato nel dicembre 2015.The video is dated December 2015.

columnstoreColumnstore

Una sequenza di accurati post di blog spiega in modo elegante gli indici columnstore da diverse prospettive.A sequence of excellent blog posts elegantly explains columnstore indexes from several perspectives. La maggior parte dei post descrive ulteriormente il concetto di analisi operativa, supportata da columnstore.The majority of the posts describe further the concept of real-time operational analytics, which columnstore supports. Questi post sono stati redatti da Sunil Agarwal, un Program Manager Microsoft, nel mese di marzo 2016.These posts were authored by Sunil Agarwal, a Program Manager at Microsoft, in March 2016.

Analisi operativa in tempo realeReal-time Operational Analytics

  1. Analisi operativa in tempo reale con tecnologia In-MemoryReal-Time Operational Analytics Using In-Memory Technology
  2. Analisi operativa in tempo reale: panoramica sugli indici columnstore non cluster (NCCI)Real-Time Operational Analytics – Overview nonclustered columnstore index (NCCI)
  3. Analisi operativa in tempo reale: un semplice esempio di uso di indici columnstore non cluster e cluster (NCCI) in SQL Server 2016Real-Time Operational Analytics: Simple example using nonclustered clustered columnstore index (NCCI) in SQL Server 2016
  4. Analisi operativa in tempo reale: operazioni DML e indici columnstore non cluster (NCCI) in SQL Server 2016Real-Time Operational Analytics: DML operations and nonclustered columnstore index (NCCI) in SQL Server 2016
  5. Analisi operativa in tempo reale: indici columnstore non cluster (NCCI) filtratiReal-Time Operational Analytics: Filtered nonclustered columnstore index (NCCI)
  6. Analisi operativa in tempo reale: opzione Ritardo di compressione per indici columnstore non cluster (NCCI)Real-Time Operational Analytics: Compression Delay Option for Nonclustered Columnstore Index (NCCI)
  7. Analisi operativa in tempo reale: opzione Ritardo di compressione con indici columnstore non cluster (NCCI) e relative prestazioniReal-Time Operational Analytics: Compression Delay option with NCCI and the performance
  8. Analisi operativa in tempo reale: tabelle con ottimizzazione per la memoria e indici columnstoreReal-Time Operational Analytics: Memory-Optimized Tables and Columnstore Index

Deframmentare un indice columnstoreDefragment a columnstore index

  1. Deframmentazione degli indici columnstore mediante il comando REORGANIZEColumnstore Index Defragmentation using REORGANIZE Command
  2. Criteri di unione degli indici columnstore per REORGANIZEColumnstore Index Merge Policy for REORGANIZE

Importazione bulk di datiBulk importation of data

  1. Indici columnstore cluster: caricamento bulkClustered Column Store: Bulk Load
  2. Indici columnstore cluster: ottimizzazioni del caricamento dati con registrazione minimaClustered Columnstore Index: Data Load Optimizations – Minimal Logging
  3. Indici columnstore cluster: ottimizzazioni del caricamento dati con importazione bulk parallelaClustered columnstore Index: Data Load Optimization – Parallel Bulk Import

Funzionalità di OLTP in memoriaFeatures of In-Memory OLTP

Funzionalità principali di OLTP in memoria.Let's look at the main features of In-Memory OLTP.

Tabelle con ottimizzazione per la memoriaMemory-optimized tables

La parola chiave MEMORY_OPTIMIZED di T-SQL nell'istruzione CREATE TABLE indica come viene creata una tabella nella memoria attiva, invece che sul disco.The T-SQL keyword MEMORY_OPTIMIZED, on the CREATE TABLE statement, is how a table is created to exist in active memory, instead of on disk.

Una tabella con ottimizzazione per la memoria ha una sola rappresentazione nella memoria attiva e una copia secondaria sul disco.A Memory-optimized tables has one representation of itself in active memory, and secondary copy on the disk.

  • La copia su disco è destinata al recupero di routine dopo un riavvio del server o del database.The disk copy is for routine recovery after a shutdown-then-restart of the server or database. Questa dualità memoria-disco è completamente nascosta agli utenti e al codice.This memory-plus-disk duality is completely hidden from you and your code.

Moduli compilati in modo nativoNatively compiled modules

La parola chiave NATIVE_COMPILATION di T-SQL nell'istruzione CREATE PROCEDURE indica come viene creata un procedura nativa.The T-SQL keyword NATIVE_COMPILATION, on the CREATE PROCEDURE statement, is how a native proc is created. Le istruzioni di T-SQL vengono compilate con codice macchina quando si usa per la prima volta la procedura nativa ogni volta che il database viene avviato online.The T-SQL statements are compiled to machine code on first use of the native proc each time the database is cycled online. Le istruzioni di T-SQL non presentano più una lenta interpretazione di ogni istruzione.The T-SQL instructions no longer endure slow interpretation of every instruction.

  • Come si è visto, la durata dei risultati della compilazione nativa arriva a 1/100 della durata interpretata.We have seen native compilation result in durations that are 1/100th of the interpreted duration.

Un modulo nativo può fare riferimento solo a tabelle con ottimizzazione per la memoria e non a tabelle basate su disco.A native module can reference memory-optimized tables only, and it cannot reference disk-based tables.

Esistono tre tipi di moduli compilati in modo nativo:There are three types of natively compiled modules:

Disponibilità nel database SQL di AzureAvailability in Azure SQL Database

Le funzionalità OLTP in memoria e columnstore sono disponibili nel database SQL Azure.In-Memory OLTP and Columnstore are available in Azure SQL Database. Per altre informazioni vedere Introduzione alle tecnologie in memoria (anteprima) in database SQL.For details see Optimize Performance using In-Memory Technologies in SQL Database.

1. Assicurare un livello di compatibilità >= 1301. Ensure compatibility level >= 130

Questa sezione include una sequenza di sezioni numerate che illustrano insieme la sintassi di Transact-SQL da usare per implementare le funzionalità OLTP in memoria.This section begins a sequence of numbered sections that together demonstrate the Transact-SQL syntax you can use to implement In-Memory OLTP features.

Innanzitutto, è importante che il database sia impostato su un livello di compatibilità di almeno 130.First, it is important that your database be set to a compatibility level of at least 130. Di seguito è riportato il codice T-SQL per visualizzare il livello di compatibilità corrente del database su cui è impostato il database.Next is the T-SQL code to view the current compatibility level that your current database is set to.

SELECT d.compatibility_level  
    FROM sys.databases as d  
    WHERE d.name = Db_Name();  

Il codice T-SQL seguente consente di aggiornare il livello, se necessario.Next is the T-SQL code to update the level, if necessary.

ALTER DATABASE CURRENT  
    SET COMPATIBILITY_LEVEL = 130;  

2. Elevare a SNAPSHOT2. Elevate to SNAPSHOT

Quando una transazione include una tabella basata su disco e una tabella con ottimizzazione per la memoria viene detta transazione tra contenitori.When a transaction involves both a disk-based table and a memory-optimized table, we call that a cross-container transaction. In questo tipo di transazione è essenziale che la parte con ottimizzazione per la memoria sia operativa al livello di isolamento della transazione denominato SNAPSHOT.In such a transaction it is essential that the memory-optimized portion of the transaction operate at the transaction isolation level named SNAPSHOT.

Per applicare in modo affidabile questo livello per le tabelle con ottimizzazione per la memoria in una transazione tra contenitori, modificare l'impostazione del database con l'oggetto T-SQL seguente.To reliably enforce this level for memory-optimized tables in a cross-container transaction, alter your database setting by executing the following T-SQL.

ALTER DATABASE CURRENT  
    SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON;  

3. Creare un FILEGROUP ottimizzato3. Create an optimized FILEGROUP

In Microsoft SQL Server prima di creare una tabella con ottimizzazione per la memoria è necessario creare prima di tutto un FILEGROUP dichiarato come CONTAINS MEMORY_OPTIMIZED_DATA.On Microsoft SQL Server, before you can create a memory-optimized table you must first create a FILEGROUP that you declare CONTAINS MEMORY_OPTIMIZED_DATA. FILEGROUP è assegnato al database.The FILEGROUP is assigned to your database. Per informazioni dettagliate, vedere:For details see:

Nel database SQL di Azure non è necessario e non è possibile creare un FILEGROUP.On Azure SQL Database, you need not and cannot create such a FILEGROUP.

Lo script T-SQL di esempio seguente abilita un database per OLTP in memoria e configura tutte le impostazioni consigliate.The following sample T-SQL script enables a database for In-Memory OLTP and configures all recommended settings. Funziona con SQL Server e il database SQL di Azure: enable-in-memory-oltp.sql.It works with both SQL Server and Azure SQL Database: enable-in-memory-oltp.sql.

4. Creare una tabella con ottimizzazione per la memoria4. Create a memory-optimized table

La parola chiave principale di Transact-SQL è MEMORY_OPTIMIZED.The crucial Transact-SQL keyword is the keyword MEMORY_OPTIMIZED.

CREATE TABLE dbo.SalesOrder  
(  
    SalesOrderId   integer        not null  IDENTITY  
        PRIMARY KEY NONCLUSTERED,  
    CustomerId     integer        not null,  
    OrderDate      datetime       not null  
)  
    WITH  
        (MEMORY_OPTIMIZED = ON,  
        DURABILITY = SCHEMA_AND_DATA);  

Le istruzioni Transact-SQL INSERT e SELECT eseguite in una tabella con ottimizzazione per la memoria sono uguali a quelle per una tabella normale.Transact-SQL INSERT and SELECT statements against a memory-optimized table are the same as for a regular table.

ALTER TABLE per le tabelle con ottimizzazione per la memoriaALTER TABLE for Memory-Optimized tables

ALTER TABLE...ADD/DROP può aggiungere o rimuovere una colonna da una tabella con ottimizzazione per la memoria o un indice.ALTER TABLE...ADD/DROP can add or remove a column from a memory-optimized table, or an index.

Pianificare indici e tabelle con ottimizzazione per la memoriaPlan your memory-optimized tables and indexes

5. Creare una stored procedure compilata in modo nativo (procedura nativa)5. Create a natively compiled stored procedure (native proc)

La parola chiave principale è NATIVE_COMPILATION.The crucial keyword is NATIVE_COMPILATION.

CREATE PROCEDURE ncspRetrieveLatestSalesOrderIdForCustomerId  
    @_CustomerId   INT  
    WITH  
        NATIVE_COMPILATION,  
        SCHEMABINDING  
AS  
BEGIN ATOMIC  
    WITH  
        (TRANSACTION ISOLATION LEVEL = SNAPSHOT,  
        LANGUAGE = N'us_english')  

    DECLARE @SalesOrderId int, @OrderDate datetime;  

    SELECT TOP 1  
            @SalesOrderId = s.SalesOrderId,  
            @OrderDate    = s.OrderDate  
        FROM dbo.SalesOrder AS s  
        WHERE s.CustomerId = @_CustomerId  
        ORDER BY s.OrderDate DESC;  

    RETURN @SalesOrderId;  
END;  

La parola chiave SCHEMABINDING indica che le tabelle a cui si fa riferimento nella procedura nativa non possono essere eliminate a meno che non si elimini prima la procedura nativa.The keyword SCHEMABINDING means the tables referenced in the native proc cannot be dropped unless the native proc is dropped first. Per informazioni dettagliate, vedere Creazione di stored procedure compilate in modo nativo.For details see Creating Natively Compiled Stored Procedures.

6. Eseguire la procedura nativa6. Execute the native proc

Popolare la tabella con due righe di dati.Populate the table with two rows of data.

INSERT into dbo.SalesOrder  
        ( CustomerId, OrderDate )  
    VALUES  
        ( 42, '2013-01-13 03:35:59' ),  
        ( 42, '2015-01-15 15:35:59' );  

Eseguire quindi una chiamata EXECUTE alla stored procedure compilata in modo nativo.An EXECUTE call to the natively compiled stored procedure follows.

DECLARE @LatestSalesOrderId int, @mesg nvarchar(128);  

EXECUTE @LatestSalesOrderId =  
    ncspRetrieveLatestSalesOrderIdForCustomerId 42;  

SET @mesg = CONCAT(@LatestSalesOrderId,  
    ' = Latest SalesOrderId, for CustomerId = ', 42);  
PRINT @mesg;  

-- Here is the actual PRINT output:  
-- 2 = Latest SalesOrderId, for CustomerId = 42  

Guida alla documentazione e passaggi successiviGuide to the documentation and next steps

Gli esempi semplici descritti in precedenza forniscono una base per l'apprendimento delle funzionalità più avanzate di OLTP in memoria.The preceding plain examples give you a foundation for learning the more advanced features of In-Memory OLTP. Le sezioni seguenti rappresentano una guida relativa a particolari considerazioni che potrebbe essere necessario conoscere e forniscono dettagli sulle singole funzionalità.The following sections are a guide to the special considerations you might need to know, and to where you can see the details about each.

In che modo le funzionalità OLTP in memoria consentono un funzionamento molto più rapido?How In-Memory OLTP features work so much faster

Le sottosezioni seguenti descrivono brevemente come funzionano internamente le funzionalità OLTP in memoria per fornire prestazioni migliori.The following subsections briefly describe how the In-Memory OLTP features work internally to provide improved performance.

Prestazioni più rapide delle tabelle con ottimizzazione per la memoriaHow memory-optimized tables perform faster

Duplice natura: una tabella con ottimizzazione per la memoria a una duplice natura: una rappresentazione nella memoria attiva e una nel disco rigido.Dual nature: A memory-optimized table has a dual nature: one representation in active memory, and the other on the hard disk. Per ogni transazione viene eseguito il commit per entrambe le rappresentazioni della tabella.Each transaction is committed to both representations of the table. Le transazioni usano la rappresentazione nella memoria attiva più veloce.Transactions operate against the much faster active memory representation. Le tabelle con ottimizzazione per la memoria possono sfruttare la maggiore velocità della memoria attiva rispetto al disco.Memory-optimized tables benefit from the greater speed of active memory versus the disk. Inoltre, la maggiore flessibilità della memoria attiva semplifica l'uso di una struttura di tabella più avanzata ottimizzata per la velocità.Further, the greater nimbleness of active memory makes practical a more advanced table structure that is optimized for speed. La struttura avanzata è anche priva di pagine, quindi evita problemi di sovraccarico e contesa associati a latch e spinlock.The advanced structure is also pageless, so it avoids the overhead and contention of latches and spinlocks.

Nessun blocco: la tabella con ottimizzazione per la memoria si basa su un approccio ottimistico volto a raggiungere contemporaneamente gli obiettivi di integrità dei dati e di concorrenza e alta velocità effettiva.No locks: The memory-optimized table relies on an optimistic approach to the competing goals of data integrity versus concurrency and high throughput. Durante la transazione, la tabella non inserisce blocchi in alcune versione delle righe aggiornate dei dati.During the transaction, the table does not place locks on any version of the updated rows of data. Questo consente di ridurre notevolmente le contese in alcuni sistemi con volumi elevati.This can greatly reduce contention in some high volume systems.

Versioni di riga: al posto dei blocchi, la tabella con ottimizzazione per la memoria aggiunge una nuova versione di una riga aggiornata nella tabella stessa, non in tempdb.Row versions: Instead of locks, the memory-optimized table adds a new version of an updated row in the table itself, not in tempdb. La riga originale viene mantenuta fino a dopo il commit della transazione.The original row is kept until after the transaction is committed. Durante la transazione, altri processi possono leggere la versione originale della riga.During the transaction, other processes can read the original version of the row.

  • Quando vengono create più versioni di una riga per una tabella basata su disco, queste versioni vengono archiviate temporaneamente in tempdb.When multiple versions of a row are created for a disk-based table, row versions are stored temporarily in tempdb.

Meno attività di registrazione: la versione precedente e quella successiva all'aggiornamento delle righe vengono mantenute nella tabella con ottimizzazione per la memoria.Less logging: The before and after versions of the updated rows are held in the memory-optimized table. La coppia di righe fornisce gran parte delle informazioni solitamente scritte nel file di log.The pair of rows provides much of the information that is traditionally written to the log file. Ciò consente al sistema di scrivere nel log una quantità minore di informazioni e con una frequenza inferiore.This enables the system to write less information, and less often, to the log. L'integrità transazionale viene comunque garantita.Yet transactional integrity is ensured.

Prestazioni più rapide delle procedure nativeHow native procs perform faster

La conversione di una stored procedure interpretata regolarmente in una stored procedure compilata in modo nativo riduce notevolmente il numero di istruzioni da eseguire durante la fase di esecuzione.Converting a regular interpreted stored procedure into a natively compiled stored procedure greatly reduces the number of instructions to execute during run time.

Vantaggi e svantaggi delle funzionalità in memoriaTrade-offs of In-Memory features

Come avviene spesso in informatica, il miglioramento delle prestazioni ottenuto con le funzionalità in memoria si basa su un compromesso.As is common in computer science, the performance gains provided by the In-Memory features are a trade-off. I vantaggi offerti dai miglioramenti alle funzionalità valgono più del costo aggiuntivo per l'acquisto.The better features bring benefits that are more valuable than the extra costs of the feature. È possibile trovare guide linea complete su vantaggi e svantaggi in:You can find comprehensive guidance about the trade-offs at:

Nel resto di questa sezione sono elencate alcune delle principali considerazioni di pianificazione, vantaggi e svantaggi.The rest of this section lists some of the major planning and trade-off considerations.

Vantaggi e svantaggi delle tabelle con ottimizzazione per la memoriaTrade-offs of memory-optimized tables

Stimare la memoria: è necessario stimare la quantità di memoria attiva che verrà utilizzata dalla tabella con ottimizzazione per la memoria.Estimate memory: You must estimate the amount of active memory that your memory-optimized table will consume. Il computer deve avere una capacità di memoria sufficiente per ospitare una tabella con ottimizzazione per la memoria.Your computer system must have adequate memory capacity to host a memory-optimized table. Per informazioni dettagliate, vedere:For details see:

Partizionare le tabelle di grandi dimensioni: un modo per soddisfare la richiesta di grandi quantità di memoria attiva consiste nel partizionare le tabelle di grandi dimensioni in parti in memoria che archiviano righe di dati attive recenti e in altre parti su disco che archiviano righe non attive legacy , ad esempio ordini di vendita già consegnati e completati.Partition your large table: One way to meet the demand for lots of active memory is to partition your large table into parts in-memory that store hot recent data rows versus other parts on the disk that store cold legacy rows (such as sales orders that have been fully shipped and completed). Questo partizionamento è un processo manuale di progettazione e implementazione.This partitioning is a manual process of design and implementation. Vedere:See:

Vantaggi e svantaggi delle procedure nativeTrade-offs of native procs

  • Con una stored procedure compilata in modo nativo non è possibile accedere a una tabella basata su disco.A natively compiled stored procedure cannot access a disk-based table. Una procedura nativa può accedere solo alle tabelle con ottimizzazione per la memoria.A native proc can access only memory-optimized tables.
  • Quando viene eseguita una procedura nativa per la prima volta dopo aver riportato online il server o il database, è necessario ricompilare la procedura nativa.When a native proc runs for its first time after the server or database was most recently brought back online, the native proc must be recompiled one time. Ciò causa un ritardo nell'avvio dell'esecuzione della procedura nativa.This causes a delay before the native proc starts to run.

Considerazioni avanzate sulle tabelle con ottimizzazione per la memoriaAdvanced considerations for memory-optimized tables

Gliindici delle tabelle con ottimizzazione per la memoria sono per alcuni aspetti diversi dagli indici delle tabelle tradizionali su disco.Indexes for Memory-Optimized Tables are different in some ways from indexes on traditional on-disk tables.

  • Gliindici hash sono disponibili solo in tabelle con ottimizzazione per la memoria.Hash Indexes are available only on memory-optimized tables.

È necessario eseguire una pianificazione per garantire una quantità di memoria attiva sufficiente per la tabella con ottimizzazione per la memoria pianificata e i relativi indici.You must plan to ensure there will be sufficient active memory for your planned memory-optimized table and its indexes. Vedere:See:

Una tabella con ottimizzazione per la memoria può essere dichiarata con DURABILITY = SCHEMA_ONLY:A memory-optimized table can be declared with DURABILITY = SCHEMA_ONLY:

  • Questa sintassi indica al sistema di eliminare tutti i dati dalla tabella con ottimizzazione per la memoria quando il database viene portato offline.This syntax tells the system to discard all data from the memory-optimized table when the database is taken offline. Viene conservata solo la definizione della tabella .Only the table definition is persisted.
  • Quando il database viene riportato online, la tabella con ottimizzazione per la memoria viene ricaricata nella memoria attiva senza alcun dato.When the database is brought back online, the memory-optimized table is loaded back into active memory, empty of data.
  • Le tabelle SCHEMA_ONLY possono essere un'alternativa superiore alle tabelle #temporary in tempdb, quando sono coinvolte molte migliaia di righe.SCHEMA_ONLY tables can be a superior alternative to #temporary tables in tempdb, when many thousands of rows are involved.

Le variabili di tabella possono anche essere dichiarate come ottimizzate per la memoria.Table variables can also be declared as memory-optimized. Vedere:See:

Considerazioni avanzate sui moduli compilati in modo nativoAdvanced considerations for natively compiled modules

I tipi di moduli compilati in modo nativo disponibili da Transact-SQL sono:The types of natively compiled modules available through Transact-SQL are:

Una funzione definita dall'utente (UDF) e compilata in modo nativo viene eseguita in maniera più rapida di un'UDF interpretata.A natively compiled user defined function (UDF) runs faster than an interpreted UDF. Alcuni aspetti da considerare con le UDF:Here are some things to consider with UDFs:

  • Quando un'istruzione SELECT di T-SQL usa un'UDF, quest'ultima viene sempre chiamata una volta per ogni riga restituita.When a T-SQL SELECT uses a UDF, the UDF is always called once per returned row.
    • Le funzioni definite dall'utente non vengono mai eseguite inline, ma vengono sempre chiamate.UDFs never run inline, and instead are always called.
    • La distinzione compilata è meno significativa dell'overhead di chiamate ripetute inerente a tutte le UDF.The compiled distinction is less significant than is the overhead of repeated calls that is inherent to all UDFs.
    • Comunque, l'overhead delle chiamate delle UDF è spesso accettabile a livello pratico.Still, the overhead of UDF calls is often acceptable at the practical level.

Per spiegazioni e dati di prova sulle prestazioni delle UDF native, vedere:For test data and explanation about the performance of native UDFs, see:

Guida alla documentazione per le tabelle con ottimizzazione per la memoriaDocumentation guide for memory-optimized tables

Di seguito sono forniti i collegamenti ad altri articoli che presentano alcune considerazioni particolari relative alle tabelle con ottimizzazione per la memoria:Here are links to other articles that discuss special considerations for memory-optimized tables:

Guida alla documentazione per le procedure nativeDocumentation guide for native procs

Il seguente articolo e gli articoli correlati indicati nel sommario spiegano in dettaglio le stored procedure compilate in modo nativo.The following article, and its children articles in the table of contents (TOC), explain the details about natively compiled stored procedures.

Gli articoli seguenti offrono codice per dimostrare il miglioramento delle prestazioni che è possibile raggiungere tramite OLTP in memoria:Here are articles that offer code to demonstrate the performance gains you can achieve by using In-Memory OLTP: