Inspection des zones initiales dans OLTP en mémoireSurvey of Initial Areas in In-Memory OLTP

S’APPLIQUE À : ouiSQL Server ouiAzure SQL Database nonAzure Synapse Analytics (SQL DW) nonParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Cet article est destiné aux développeurs qui souhaitent se familiariser en quelques minutes avec les principes de base des fonctionnalités de performances OLTP en mémoire de Microsoft SQL Server et d’Azure SQL Database.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.

Pour OLTP en mémoire, cet article fournit les éléments suivants :For In-Memory OLTP, this article provides the following:

  • Explications rapides des fonctionnalitésQuick explanations of the features.
  • Exemples de code de base qui implémentent les fonctionnalitésCore code samples that implement the features.

SQL Server et SQL Database ne varient que légèrement dans leur prise en charge des technologies en mémoire.SQL Server and SQL Database have only minor variations in their support of In-Memory technologies.

Les blogueurs font parfois référence à l’OLTP en mémoire sous le terme Hekaton.In the wild some bloggers refer to the In-Memory OLTP as Hekaton.

Avantages des fonctionnalités en mémoireBenefits of In-Memory Features

SQL Server fournit des fonctionnalités en mémoire qui peuvent améliorer considérablement les performances de nombreux systèmes d’applications.SQL Server provides In-Memory features that can greatly improve the performance of many application systems. Les considérations les plus simples sont décrites dans cette section.The most straight forward considerations are described in this section.

Fonctionnalités d’OLTP (traitement transactionnel en ligne)Features for OLTP (Online Transactional Processing)

Les systèmes qui doivent traiter de nombreuses instructions SQL INSERT simultanément sont d’excellents candidats pour les fonctionnalités OLTP.Systems which must processes large numbers of SQL INSERTs concurrently are excellent candidates for the OLTP features.

  • Nos tests d’évaluation montrent que des vitesses 5 à 20 fois supérieures peuvent être obtenues en adoptant les fonctionnalités en mémoire.Our benchmarks show that speed improvements from 5 times to 20 times faster are achievable by adoption of the In-Memory features.

Les systèmes qui traitent des calculs lourds dans Transact-SQL constituent d’excellents candidats.Systems which process heavy calculations in Transact-SQL are excellent candidates.

  • Une procédure stockée dédiée aux calculs lourds peut s’exécuter jusqu’à 99 fois plus rapidement.A stored procedure that is dedicated to heavy calculations can run up to 99 times faster.

Vous pourrez par la suite consulter les articles suivants qui offrent des démonstrations des gains de performances offerts par l’OLTP en mémoire :Later you might visit the following articles which offer demonstrations of performance gains from In-Memory OLTP:

Fonctionnalités d’analytique opérationnelleFeatures for Operational Analytics

L’analytique en mémoire fait référence aux instructions SQL INSERT qui agrègent des données transactionnelles, généralement par l’inclusion d’une clause GROUP BY.In-Memory Analytics refers to SQL SELECTs which aggregate transactional data, typically by inclusion of a GROUP BY clause. Le type d’index appelé columnstore est central à l’analytique opérationnelle.The index type called columnstore is central to operational analytics.

Il existe deux scénarios principaux :There are two major scenarios:

  • L’analytique opérationnelle par lot fait référence aux processus d’agrégation qui s’exécutent soit après les heures de bureau, soit sur du matériel secondaire qui comporte des copies des données transactionnelles.Batch Operational Analytics refers to aggregation processes that run either after business hours or on secondary hardware which has copies of the transactional data.
  • L’analytique opérationnelle en temps réel fait référence aux processus d’agrégation qui s’exécutent pendant les heures de bureau et sur le matériel principal utilisé pour les charges de travail transactionnelles.Real-time Operational Analytics refers to aggregration processes that run during business hours and on the primary hardware which is used for transactional workloads.

Cet article se concentre sur OLTP et non sur l’analyse.The present article focuses on OLTP, and not on Analytics. Pour plus d’informations sur la façon dont les index columnstore permettent à SQL de bénéficier de l’analytique, consultez :For information on how columnstore indexes bring Analytics to SQL, see:

Notes

Une vidéo de deux minutes sur les fonctionnalités en mémoire est disponible à la page Azure SQL Database - In-Memory Technologies(Azure SQL Database - Technologies en mémoire).A two minute video about the In-Memory features is available at Azure SQL Database - In-Memory Technologies. La vidéo date de décembre 2015.The video is dated December 2015.

columnstoreColumnstore

Une série d’excellents billets de blog expliquent de manière élégante les index columnstore selon plusieurs perspectives.A sequence of excellent blog posts elegantly explains columnstore indexes from several perspectives. La majorité des billets décrivent en détail le concept d’analytique opérationnelle en temps réel, que columnstore prend en charge.The majority of the posts describe further the concept of real-time operational analytics, which columnstore supports. Ces billets ont été créés par Sunil Agarwal, responsable de programme chez Microsoft, en mars 2016.These posts were authored by Sunil Agarwal, a Program Manager at Microsoft, in March 2016.

analytique opérationnelle en temps réelReal-time Operational Analytics

  1. Analytique opérationnelle en temps réel à l’aide de la technologie en mémoireReal-Time Operational Analytics Using In-Memory Technology
  2. Analytique opérationnelle en temps réel - Vue d’ensemble d’un index columnstore non clusterReal-Time Operational Analytics - Overview nonclustered columnstore index (NCCI)
  3. Analytique opérationnelle en temps réel : Exemple simple utilisant un index columnstore non-cluster dans SQL Server 2016Real-Time Operational Analytics: Simple example using nonclustered clustered columnstore index (NCCI) in SQL Server 2016
  4. Analytique opérationnelle en temps réel : Opérations DML et index columnstore non-cluster dans SQL Server 2016Real-Time Operational Analytics: DML operations and nonclustered columnstore index (NCCI) in SQL Server 2016
  5. Analytique opérationnelle en temps réel : Index columnstore non-cluster filtréReal-Time Operational Analytics: Filtered nonclustered columnstore index (NCCI)
  6. Analytique opérationnelle en temps réel : Option de délai de compression pour l’index columnstore non-clusterReal-Time Operational Analytics: Compression Delay Option for Nonclustered Columnstore Index (NCCI)
  7. Analytique opérationnelle en temps réel : Option de délai de compression avec index columnstore non cluster et performancesReal-Time Operational Analytics: Compression Delay option with NCCI and the performance
  8. Analytique opérationnelle en temps réel : Tables à mémoire optimisée et index columnstoreReal-Time Operational Analytics: Memory-Optimized Tables and Columnstore Index

Défragmenter un index columnstoreDefragment a columnstore index

  1. Défragmentation de l’index columnstore à l’aide de la commande REORGANIZEColumnstore Index Defragmentation using REORGANIZE Command
  2. Stratégie de fusion de l’index columnstore pour REORGANIZEColumnstore Index Merge Policy for REORGANIZE

Importation en bloc des donnéesBulk importation of data

  1. Cluster columnstore : Chargement en blocClustered Column Store: Bulk Load
  2. Index cluster columnstore : Optimisations du chargement des données - Journalisation minimaleClustered Columnstore Index: Data Load Optimizations - Minimal Logging
  3. Index cluster columnstore : Optimisations du chargement des données - Importation en bloc parallèleClustered columnstore Index: Data Load Optimization - Parallel Bulk Import

Fonctionnalités de l’OLTP en mémoireFeatures of In-Memory OLTP

Examinons les fonctionnalités principales de l’OLTP en mémoire.Let's look at the main features of In-Memory OLTP.

Tables optimisées en mémoireMemory-optimized tables

Le mot clé T-SQL MEMORY_OPTIMIZED, dans l’instruction CREATE TABLE, permet à la table créée d’exister dans la mémoire active, et non sur le disque.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.

Une table optimisée en mémoire a une représentation d’elle-même dans la mémoire active et une copie secondaire sur le disque.A Memory-optimized tables has one representation of itself in active memory, and secondary copy on the disk.

  • La copie sur disque sert pour les opérations de récupération de routine après un redémarrage, puis arrêt, du serveur ou de la base de données.The disk copy is for routine recovery after a shutdown-then-restart of the server or database. Cette dualité « disque plus mémoire » est totalement masquée pour l’utilisateur et pour votre code.This memory-plus-disk duality is completely hidden from you and your code.

Modules compilés en mode natifNatively compiled modules

Le mot clé T-SQL NATIVE_COMPILATION, dans l’instruction CREATE PROCEDURE, permet de créer une procédure stockée compilée en mode natif.The T-SQL keyword NATIVE_COMPILATION, on the CREATE PROCEDURE statement, is how a natively compiled stored procedure is created. Les instructions T-SQL sont compilées en code machine lors de la première utilisation de la procédure native chaque fois que la base de données bascule en ligne.The T-SQL statements are compiled to machine code on first use of the native proc each time the database is cycled online. Les instructions T-SQL ne subissent plus l’interprétation lente de chaque instruction.The T-SQL instructions no longer endure slow interpretation of every instruction.

  • La compilation native peut être cent fois plus rapide que le mode interprété.We have seen native compilation result in durations that are 1/100th of the interpreted duration.

Un module natif ne peut référencer que des tables optimisées en mémoire. Il ne peut pas référencer de tables sur disque.A native module can reference memory-optimized tables only, and it cannot reference disk-based tables.

Il existe trois types de modules compilés en mode natif :There are three types of natively compiled modules:

Disponibilité dans Azure SQL DatabaseAvailability in Azure SQL Database

OLTP en mémoire et columnstore sont disponibles dans Azure SQL Database.In-Memory OLTP and Columnstore are available in Azure SQL Database. Pour plus d’informations, consultez Optimiser les performances à l’aide des technologies en mémoire dans SQL Database.For details see Optimize Performance using In-Memory Technologies in SQL Database.

1. Assurer un niveau de compatibilité >= 1301. Ensure compatibility level >= 130

Cette section est la première d’une série de sections numérotées qui illustrent la syntaxe Transact-SQL que vous pouvez utiliser pour implémenter des fonctionnalités OLTP en mémoire.This section begins a sequence of numbered sections that together demonstrate the Transact-SQL syntax you can use to implement In-Memory OLTP features.

Tout d’abord, il est important que votre base de données soit définie sur un niveau de compatibilité d’au moins 130.First, it is important that your database be set to a compatibility level of at least 130. Le code T-SQL suivant indique le niveau de compatibilité actuel sur lequel votre base de données actuelle est définie.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();

Le code T-SQL suivant met à jour le niveau, si nécessaire.Next is the T-SQL code to update the level, if necessary.

ALTER DATABASE CURRENT
    SET COMPATIBILITY_LEVEL = 130;

2. Élever au niveau capture instantanée (SNAPSHOT)2. Elevate to SNAPSHOT

Une transaction impliquant à la fois une table basée sur disque et une table optimisée en mémoire est une transaction entre conteneurs.When a transaction involves both a disk-based table and a memory-optimized table, we call that a cross-container transaction. Dans ce type de transaction, il est essentiel que la partie optimisation en mémoire de la transaction fonctionne au niveau d’isolation de la transaction nommé SNAPSHOT.In such a transaction it is essential that the memory-optimized portion of the transaction operate at the transaction isolation level named SNAPSHOT.

Pour appliquer de manière fiable ce niveau aux tables optimisées en mémoire dans une transaction entre conteneurs, modifiez le paramétrage de votre base de données en exécutant le code T-SQL suivant.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. Créer un groupe de fichiers (FILEGROUP) optimisé3. Create an optimized FILEGROUP

Dans Microsoft SQL Server, avant de créer une table optimisée en mémoire, vous devez créer un groupe de fichiers en lui associant la déclaration 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. Le groupe de fichiers est attribué à votre base de données.The FILEGROUP is assigned to your database. Pour plus d’informations, consultez :For details see:

Dans Azure SQL Database, vous ne devez et ne pouvez pas créer un groupe de fichiers de ce type.On Azure SQL Database, you need not and cannot create such a FILEGROUP.

L’exemple de script T-SQL suivant active une base de données pour OLTP en mémoire et configure tous les paramètres recommandés.The following sample T-SQL script enables a database for In-Memory OLTP and configures all recommended settings. Il fonctionne avec SQL Server et Azure SQL Database : enable-in-memory-oltp.sql.It works with both SQL Server and Azure SQL Database: enable-in-memory-oltp.sql.

Notez que toutes les fonctionnalités SQL Server ne sont pas prises en charge pour les bases de données avec un groupe de fichiers MEMORY_OPTIMIZED_DATA.Note that not all SQL Server features are supported for databases with a MEMORY_OPTIMIZED_DATA filegroup. Pour plus d’informations sur les limitations, consultez : Fonctionnalités SQL Server non prises en charge pour l’OLTP en mémoireFor details on limitations see: Unsupported SQL Server Features for In-Memory OLTP

4. Créer une table optimisée en mémoire4. Create a memory-optimized table

Le mot-clé Transact-SQL essentiel est le mot-clé 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);

Les instructions Transact-SQL INSERT et SELECT sur une table optimisée en mémoire sont les mêmes que pour une table normale.Transact-SQL INSERT and SELECT statements against a memory-optimized table are the same as for a regular table.

ALTER TABLE pour les tables optimisées en mémoireALTER TABLE for Memory-Optimized tables

ALTER TABLE...ADD/DROP peut ajouter ou supprimer une colonne dans une table optimisée en mémoire ou un index.ALTER TABLE...ADD/DROP can add or remove a column from a memory-optimized table, or an index.

  • CREATE INDEX et DROP INDEX ne peuvent pas être exécutés sur une table optimisée en mémoire, utilisez ALTER TABLE... ADD/DROP INDEX à la place.CREATE INDEX and DROP INDEX cannot be run against a memory-optimized table, use ALTER TABLE ... ADD/DROP INDEX instead.
  • Pour plus d’informations, consultez Modification des tables optimisées en mémoire.For details see Altering Memory-Optimized Tables.

Planifier vos tables et index mémoire optimisésPlan your memory-optimized tables and indexes

5. Créer une procédure stockée compilée en mode natif (procédure native)5. Create a natively compiled stored procedure (native proc)

Le mot clé essentiel est 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;  

Le mot clé SCHEMABINDING signifie que les tables référencées dans la procédure native ne peuvent pas être supprimées, sauf si celle-ci est d’abord supprimée.The keyword SCHEMABINDING means the tables referenced in the native proc cannot be dropped unless the native proc is dropped first. Pour plus d’informations, consultez Création de procédures stockées compilées en mode natif.For details see Creating Natively Compiled Stored Procedures.

Notez que vous n’avez pas besoin de créer une procédure stockée compilée en mode natif pour accéder à une table à mémoire optimisée.Note that you do not need to create a natively compiled stored procedure to access a memory-optimized table. Vous pouvez également référencer les tables à mémoire optimisée à partir de procédures stockées traditionnelles et de lots ad hoc.You can also reference memory-optimized tables from traditional stored procedures and ad hoc batches.

6. Exécuter la procédure native6. Execute the native proc

Remplissez la table avec deux lignes de données.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' );

Vient ensuite un appel EXECUTE à destination de la procédure stockée en mode natif.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  

Guide de la documentation et étapes suivantesGuide to the documentation and next steps

Les exemples simples précédents vous donnent les bases pour l’apprentissage des fonctionnalités plus avancées de l’OLTP en mémoire.The preceding plain examples give you a foundation for learning the more advanced features of In-Memory OLTP. Les sections suivantes présentent les considérations particulières que vous pouvez être amené à connaître et indiquent les sources d’informations qui détaillent chacune d’elles.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.

Pourquoi les fonctionnalités de l’OLTP en mémoire fonctionnent-elles plus rapidement ?How In-Memory OLTP features work so much faster

Les sous-sections suivantes décrivent brièvement comment fonctionne l’OLTP en mémoire en interne pour fournir de meilleures performances.The following subsections briefly describe how the In-Memory OLTP features work internally to provide improved performance.

Dans quelle mesure les performances des tables optimisées en mémoire sont-elles plus rapides ?How memory-optimized tables perform faster

Double nature : une table à mémoire optimisée présente une double nature : une représentation en mémoire active et une autre sur le disque dur.Dual nature: A memory-optimized table has a dual nature: one representation in active memory, and the other on the hard disk. Chaque transaction est validée dans les deux représentations de la table.Each transaction is committed to both representations of the table. Les transactions s’exécutent par rapport à la représentation en mémoire active, qui est beaucoup plus rapide.Transactions operate against the much faster active memory representation. Les tables optimisées en mémoire tirent parti de la vitesse supérieure qu’offre la mémoire active par rapport au disque.Memory-optimized tables benefit from the greater speed of active memory versus the disk. En outre, grâce à la souplesse supérieure de la mémoire active, vous pouvez facilement mettre en place une structure de table plus avancée qui est optimisée pour la vitesse.Further, the greater nimbleness of active memory makes practical a more advanced table structure that is optimized for speed. De plus, comme la structure avancée ne fait pas appel à la pagination, elle évite la surcharge et la contention liées aux verrous et aux verrouillages tournants.The advanced structure is also pageless, so it avoids the overhead and contention of latches and spinlocks.

Aucun verrou : la table à mémoire optimisée s’appuie sur une approche optimiste des objectifs concurrents que sont, d’une part, l’intégrité des données et, d’autre part, la concurrence et le débit élevé.No locks: The memory-optimized table relies on an optimistic approach to the competing goals of data integrity versus concurrency and high throughput. Pendant la transaction, la table ne place de verrous sur aucune version des lignes de données mises à jour.During the transaction, the table does not place locks on any version of the updated rows of data. Cela peut réduire considérablement la contention dans certains systèmes à volumes élevés.This can greatly reduce contention in some high volume systems.

Versions de ligne : au lieu de verrous, la table à mémoire optimisée ajoute une nouvelle version d’une ligne mise à jour à la table elle-même, et non dans 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 ligne d’origine est conservée jusqu’à ce que la transaction soit validée.The original row is kept until after the transaction is committed. Pendant la transaction, les autres processus peuvent lire la version d’origine de la ligne.During the transaction, other processes can read the original version of the row.

  • Si plusieurs versions d’une ligne sont créées pour une table basée sur disque, les versions de ligne sont stockées temporairement dans tempdb.When multiple versions of a row are created for a disk-based table, row versions are stored temporarily in tempdb.

Moins de journalisation : les versions avant et après des lignes mises à jour sont conservées dans la table à mémoire optimisée.Less logging: The before and after versions of the updated rows are held in the memory-optimized table. La paire de lignes fournit la plupart des informations qui sont traditionnellement écrites dans le fichier journal.The pair of rows provides much of the information that is traditionally written to the log file. Ainsi, le système écrit moins d’informations, et moins souvent, dans le journal.This enables the system to write less information, and less often, to the log. L’intégrité transactionnelle est néanmoins assurée.Yet transactional integrity is ensured.

Dans quelle mesure les performances des procédures natives sont-elles plus rapides ?How native procs perform faster

Convertir une procédure stockée interprétée normale en une procédure stockée compilée en mode natif réduit considérablement le nombre d’instructions à exécuter pendant l’exécution.Converting a regular interpreted stored procedure into a natively compiled stored procedure greatly reduces the number of instructions to execute during run time.

Compromis des fonctionnalités en mémoireTrade-offs of In-Memory features

Comme cela est courant en informatique, les gains de performance procurés par les fonctionnalités en mémoire sont un compromis.As is common in computer science, the performance gains provided by the In-Memory features are a trade-off. Les meilleures fonctionnalités présentent des avantages qui compensent sensiblement les coûts supplémentaires qu’elles engendrent.The better features bring benefits that are more valuable than the extra costs of the feature. Vous trouverez des instructions complètes sur les compromis dans l’article suivant :You can find comprehensive guidance about the trade-offs at:

Le reste de cette section répertorie les principaux éléments à prendre en considération pour la planification et les compromis.The rest of this section lists some of the major planning and trade-off considerations.

Compromis des tables optimisées en mémoireTrade-offs of memory-optimized tables

Estimer la mémoire : vous devez estimer la quantité de mémoire active que votre table à mémoire optimisée est appelée à consommer.Estimate memory: You must estimate the amount of active memory that your memory-optimized table will consume. Votre système informatique doit avoir une capacité de mémoire suffisante pour héberger une table optimisée en mémoire.Your computer system must have adequate memory capacity to host a memory-optimized table. Pour plus d’informations, consultez :For details see:

Partitionner votre table volumineuse : une façon de répondre à la demande d’une quantité de mémoire active élevée consiste à partitionner votre table volumineuse en parties en mémoire qui stockent les lignes de données récentes à chaud, tandis que les autres parties sur le disque comportent les lignes héritées à froid (telles que les commandes qui ont été entièrement livrées et terminées).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). Ce partitionnement est un processus manuel de conception et d’implémentation.This partitioning is a manual process of design and implementation. Consultez :See:

Compromis des procédures nativesTrade-offs of native procs

  • Une procédure stockée compilée en mode natif ne peut pas accéder à une table sur disque.A natively compiled stored procedure cannot access a disk-based table. Une procédure native ne peut accéder qu’à des tables optimisées en mémoire.A native proc can access only memory-optimized tables.
  • Quand une procédure native s’exécute pour la première fois après la toute dernière remise en ligne du serveur ou de la base de données, elle doit être recompilée une fois.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. Cette opération retarde l’exécution de la procédure native.This causes a delay before the native proc starts to run.

Observations importantes sur les tables optimisées en mémoireAdvanced considerations for memory-optimized tables

Lesindex pour les tables optimisées en mémoire sont, à certains égards, différents des index sur les tables sur disque traditionnelles.Indexes for Memory-Optimized Tables are different in some ways from indexes on traditional on-disk tables. Les index de hachage sont disponibles uniquement pour les tables à mémoire optimisée.Hash Indexes are available only on memory-optimized tables.

Vous devez vous assurer qu’il y aura suffisamment de mémoire active pour votre table optimisée en mémoire planifié et ses index.You must plan to ensure there will be sufficient active memory for your planned memory-optimized table and its indexes. Consultez :See:

Vous pouvez déclarer une table optimisée en mémoire avec DURABILITY = SCHEMA_ONLY :A memory-optimized table can be declared with DURABILITY = SCHEMA_ONLY:

  • Cette syntaxe indique au système d’ignorer toutes les données de la table optimisée en mémoire quand la base de données est déconnectée.This syntax tells the system to discard all data from the memory-optimized table when the database is taken offline. Seule la définition de table est conservée.Only the table definition is persisted.
  • Quand la base de données est remise en ligne, la table optimisée en mémoire est rechargée, vide, en mémoire active.When the database is brought back online, the memory-optimized table is loaded back into active memory, empty of data.
  • Les tables SCHEMA_ONLY peuvent constituer une bonne alternative aux tables #temporary dans tempdb, quand plusieurs milliers de lignes sont impliqués.SCHEMA_ONLY tables can be a superior alternative to #temporary tables in tempdb, when many thousands of rows are involved.

Vous pouvez aussi déclarer des variables de table comme mémoire optimisée.Table variables can also be declared as memory-optimized. Consultez :See:

Observations importantes sur les modules compilés en mode natifAdvanced considerations for natively compiled modules

Les types de modules compilés en mode natif disponibles par le biais de Transact-SQL sont les suivants :The types of natively compiled modules available through Transact-SQL are:

Une fonction définie par l’utilisateur compilée en mode natif s’exécute plus rapidement qu’une fonction définie par l’utilisateur interprétée.A natively compiled user defined function (UDF) runs faster than an interpreted UDF. Voici quelques éléments à prendre en considération avec les fonctions définies par l’utilisateur :Here are some things to consider with UDFs:

  • Quand une instruction T-SQL SELECT utilise une fonction définie par l’utilisateur, celle-ci est toujours appelée une fois par ligne retournée.When a T-SQL SELECT uses a UDF, the UDF is always called once per returned row.
    • Les fonctions définies par l’utilisateur ne s’exécutent jamais en ligne et, à la place, sont toujours appelées.UDFs never run inline, and instead are always called.
    • La distinction « interprété/compilé » est moins importante que la surcharge d’appels répétés inhérente à toutes les fonctions définies par l’utilisateur.The compiled distinction is less significant than is the overhead of repeated calls that is inherent to all UDFs.
    • La surcharge d’appels des fonctions définies par l’utilisateur reste souvent acceptable dans la pratique.Still, the overhead of UDF calls is often acceptable at the practical level.

Pour obtenir des données de test et des explications sur les performances des fonctions définies par l’utilisateur natives, consultez :For test data and explanation about the performance of native UDFs, see:

Guide de la documentation pour les tables optimisées en mémoireDocumentation guide for memory-optimized tables

Consultez les autres articles suivants qui traitent de considérations spéciales sur les tables à mémoire optimisée :Refer to these other articles that discuss special considerations for memory-optimized tables:

Guide de la documentation pour les procédures nativesDocumentation guide for native procs

L’article suivant, et ses articles enfants dans la table des matières, décrivent en détail les procédures stockées compilées en mode natif.The following article, and its children articles in the table of contents (TOC), explain the details about natively compiled stored procedures.

Voici des articles qui contiennent du code pour illustrer les gains de performance que vous pouvez obtenir à l’aide de l’OLTP en mémoire :Here are articles that offer code to demonstrate the performance gains you can achieve by using In-Memory OLTP: