Uso di OLTP in memoria per migliorare le prestazioni delle applicazioni nel database SQLUse In-Memory OLTP to improve your application performance in SQL Database

OLTP in memoria può essere usato per migliorare le prestazioni di elaborazione delle transazioni, l'inserimento dei dati e gli scenari di dati temporanei, nei database SQL di Azure Premium, senza aumentare il piano tariffario.In-Memory OLTP can be used to improve the performance of transaction processing, data ingestion, and transient data scenarios, in Premium Azure SQL Databases without increasing the pricing tier.

Nota

Informazioni in Quorum doubles key database's workload while lowering DTU by 70% with SQL Database (Il quorum raddoppia il carico di lavoro del database principale riducendo il DTU del 70% con il database SQL)Learn how Quorum doubles key database’s workload while lowering DTU by 70% with SQL Database

Seguire i passaggi seguenti per adottare OLTP in memoria nel database esistente.Follow these steps to adopt In-Memory OLTP in your existing database.

Passaggio 1: assicurarsi di usare un database PremiumStep 1: Ensure you are using a Premium database

OLTP in memoria è supportato solo nei database Premium.In-Memory OLTP is supported only in Premium databases. La funzionalità in memoria è supportata se il risultato restituito è 1 (non 0):In-Memory is supported if the returned result is 1 (not 0):

SELECT DatabasePropertyEx(Db_Name(), 'IsXTPSupported');

XTP è l'acronimo di Extreme Transaction ProcessingXTP stands for Extreme Transaction Processing

Passaggio 2: Identificare gli oggetti per eseguire la migrazione a OLTP In memoriaStep 2: Identify objects to migrate to In-Memory OLTP

SSMS include un report Panoramica analisi delle prestazioni per le transazioni che è possibile eseguire su un database con un carico di lavoro attivo.SSMS includes a Transaction Performance Analysis Overview report that you can run against a database with an active workload. Il report identifica le tabelle e le stored procedure candidate per la migrazione a OLTP in memoria.The report identifies tables and stored procedures that are candidates for migration to In-Memory OLTP.

In SSMS, per generare il report:In SSMS, to generate the report:

  • In Esplora oggettifare clic con il pulsante destro del mouse sul nodo del database.In the Object Explorer, right-click your database node.
  • Fare clic su Report > Report standard > Panoramica dell'analisi delle prestazioni transazioni.Click Reports > Standard Reports > Transaction Performance Analysis Overview.

Per altre informazioni, vedere Determinare se una tabella o una stored procedure deve essere trasferita a OLTP in memoria.For more information, see Determining if a Table or Stored Procedure Should Be Ported to In-Memory OLTP.

Passaggio 3: Creare un database di prova confrontabileStep 3: Create a comparable test database

Si supponga che il report indichi che il database include una tabella che può trarre vantaggio dalla conversione in una tabella con ottimizzazione per la memoria.Suppose the report indicates your database has a table that would benefit from being converted to a memory-optimized table. È consigliabile verificare prima di tutto l'indicazione eseguendo il test.We recommend that you first test to confirm the indication by testing.

È necessaria una copia di test del database di produzione.You need a test copy of your production database. Il database di test deve avere lo stesso livello di servizio del database di produzione.The test database should be at the same service tier level as your production database.

Per semplificare il test, perfezionare il database di test come segue:To ease testing, tweak your test database as follows:

  1. Connettersi al database di test usando SSMS.Connect to the test database by using SSMS.
  2. Per evitare di dover usare l'opzione WITH (SNAPSHOT) nelle query, impostare l'opzione di database come illustrato nell'istruzione T-SQL seguente:To avoid needing the WITH (SNAPSHOT) option in queries, set the database option as shown in the following T-SQL statement:

    ALTER DATABASE CURRENT
     SET
         MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON;
    

Passaggio 4: Eseguire la migrazione delle tabelleStep 4: Migrate tables

È necessario creare e popolare una copia con ottimizzazione per la memoria della tabella che si vuole testare.You must create and populate a memory-optimized copy of the table you want to test. È possibile crearla usando:You can create it by using either:

  • La pratica Ottimizzazione guidata per la memoria di SSMS.The handy Memory Optimization Wizard in SSMS.
  • T-SQL manuale.Manual T-SQL.

Ottimizzazione guidata per la memoria di SSMSMemory Optimization Wizard in SSMS

Per usare questa opzione di migrazione:To use this migration option:

  1. Connettersi al database di test con SSMS.Connect to the test database with SSMS.
  2. In Esplora oggetti fare clic con il pulsante destro del mouse sulla tabella e quindi fare clic su Ottimizzazione guidata per la memoria.In the Object Explorer, right-click on the table, and then click Memory Optimization Advisor.

    • Verrà visualizzata l' Ottimizzazione guidata per la memoria della tabella .The Table Memory Optimizer Advisor wizard is displayed.
  3. Nella procedura guidata fare clic su Convalida della migrazione o sul pulsante Avanti per verificare se la tabella include eventuali funzionalità non supportate nelle tabelle con ottimizzazione per la memoria.In the wizard, click Migration validation (or the Next button) to see if the table has any unsupported features that are unsupported in memory-optimized tables. Per altre informazioni, vedere:For more information, see:

  4. Se la tabella non include funzionalità non supportate, la procedura guidata può eseguire automaticamente la migrazione effettiva dello schema e dei dati.If the table has no unsupported features, the advisor can perform the actual schema and data migration for you.

T-SQL manualeManual T-SQL

Per usare questa opzione di migrazione:To use this migration option:

  1. Connettersi al database di test tramite SSMS o un'utilità analoga.Connect to your test database by using SSMS (or a similar utility).
  2. Ottenere lo script T-SQL completo per la tabella e i relativi indici.Obtain the complete T-SQL script for your table and its indexes.

    • In SSMS fare clic con il pulsante destro del mouse sul nodo della tabella.In SSMS, right-click your table node.
    • Fare clic su Crea script per tabella > CREATE in > Nuova finestra Query.Click Script Table As > CREATE To > New Query Window.
  3. Nella finestra dello script aggiungere WITH (MEMORY_OPTIMIZED = ON) all'istruzione CREATE TABLE.In the script window, add WITH (MEMORY_OPTIMIZED = ON) to the CREATE TABLE statement.
  4. Se esiste un indice CLUSTERED, modificarlo in NONCLUSTERED.If there is a CLUSTERED index, change it to NONCLUSTERED.
  5. Rinominare la tabella esistente in SP_RENAME.Rename the existing table by using SP_RENAME.
  6. Creare la nuova copia della tabella con ottimizzazione per la memoria eseguendo lo script modificato CREATE TABLE.Create the new memory-optimized copy of the table by running your edited CREATE TABLE script.
  7. Copiare i dati nella tabella con ottimizzazione per la memoria usando l'istruzione INSERT...SELECT * INTO:Copy the data to your memory-optimized table by using INSERT...SELECT * INTO:
INSERT INTO <new_memory_optimized_table>
        SELECT * FROM <old_disk_based_table>;

Passaggio 5 (facoltativo): Eseguire la migrazione di stored procedureStep 5 (optional): Migrate stored procedures

La funzionalità in memoria può anche modificare una stored procedure per migliorare le prestazioni.The In-Memory feature can also modify a stored procedure for improved performance.

Considerazioni sulle stored procedure compilate in modo nativoConsiderations with natively compiled stored procedures

Una stored procedure compilata in modo nativo deve avere le opzioni seguenti nella relativa clausola WITH T-SQL:A natively compiled stored procedure must have the following options on its T-SQL WITH clause:

  • NATIVE_COMPILATIONNATIVE_COMPILATION
  • SCHEMABINDING: indica le tabelle in cui la stored procedure non può modificare le definizioni di colonna in alcun modo che abbia effetto sulla stored procedure, a meno che non si rimuova la stored procedure.SCHEMABINDING: meaning tables that the stored procedure cannot have their column definitions changed in any way that would affect the stored procedure, unless you drop the stored procedure.

Un modulo nativo deve usare blocchi ATOMICI di grandi dimensioni per la gestione delle transazioni.A native module must use one big ATOMIC blocks for transaction management. Non esiste un ruolo per un'istruzione BEGIN TRANSACTION o ROLLBACK TRANSACTION esplicita.There is no role for an explicit BEGIN TRANSACTION, or for ROLLBACK TRANSACTION. Se il codice rileva una violazione di una regola business, è possibile che il blocco atomico venga terminato con un'istruzione THROW .If your code detects a violation of a business rule, it can terminate the atomic block with a THROW statement.

CREATE PROCEDURE tipica per le stored procedure compilate in modo nativoTypical CREATE PROCEDURE for natively compiled

In genere l'istruzione T-SQL per creare una stored procedure compilata in modo nativo è simile al modello seguente:Typically the T-SQL to create a natively compiled stored procedure is similar to the following template:

CREATE PROCEDURE schemaname.procedurename
    @param1 type1, …
    WITH NATIVE_COMPILATION, SCHEMABINDING
    AS
        BEGIN ATOMIC WITH
            (TRANSACTION ISOLATION LEVEL = SNAPSHOT,
            LANGUAGE = N'your_language__see_sys.languages'
            )
        …
        END;
  • Per TRANSACTION_ISOLATION_LEVEL, SNAPSHOT è il valore più comune per la stored procedure compilata in modo nativo.For the TRANSACTION_ISOLATION_LEVEL, SNAPSHOT is the most common value for the natively compiled stored procedure. Tuttavia, è supportato anche un subset degli altri valori:However, a subset of the other values are also supported:

    • REPEATABLE READREPEATABLE READ
    • SERIALIZABLESERIALIZABLE
  • Il valore LANGUAGE deve essere presente nella vista sys.languages.The LANGUAGE value must be present in the sys.languages view.

Come eseguire la migrazione di una stored procedureHow to migrate a stored procedure

Passaggi della migrazione:The migration steps are:

  1. Ottenere lo script CREATE PROCEDURE per la stored procedure interpretata regolare.Obtain the CREATE PROCEDURE script to the regular interpreted stored procedure.
  2. Riscrivere l'intestazione in modo che corrisponda al modello precedente.Rewrite its header to match the previous template.
  3. Verificare se il codice T-SQL della stored procedure usa funzionalità non supportate per le stored procedure compilate in modo nativo.Ascertain whether the stored procedure T-SQL code uses any features that are not supported for natively compiled stored procedures. Se necessario, implementare le soluzioni alternative.Implement workarounds if necessary.

  4. Rinominare la stored procedure precedente tramite SP_RENAME.Rename the old stored procedure by using SP_RENAME. In alternativa usare semplicemente DROP.Or simply DROP it.
  5. Eseguire lo script CREATE PROCEDURE T-SQL modificato.Run your edited CREATE PROCEDURE T-SQL script.

Passaggio 6: Eseguire il carico di lavoro nel testStep 6: Run your workload in test

Eseguire un carico di lavoro nel database di test simile al carico di lavoro eseguito nel database di produzione.Run a workload in your test database that is similar to the workload that runs in your production database. Dovrebbe indicare il miglioramento delle prestazioni ottenuto con l'uso della funzionalità in memoria per tabelle e stored procedure.This should reveal the performance gain achieved by your use of the In-Memory feature for tables and stored procedures.

Gli attributi principali del carico di lavoro sono i seguenti:Major attributes of the workload are:

  • Numero di connessioni simultanee.Number of concurrent connections.
  • Rapporto di lettura/scrittura.Read/write ratio.

Per personalizzare ed eseguire il carico di lavoro di test, si consiglia di usare il pratico strumento ostress.exe, illustrato qui.To tailor and run the test workload, consider using the handy ostress.exe tool, which illustrated in here.

Per ridurre al minimo la latenza di rete, eseguire il test nella stessa area geografica di Azure in cui è disponibile il database.To minimize network latency, run your test in the same Azure geographic region where the database exists.

Passaggio 7: Monitoraggio post-implementazioneStep 7: Post-implementation monitoring

Tenere sotto controllo gli effetti sulle prestazioni delle implementazioni in memoria nell'ambiente di produzione:Consider monitoring the performance effects of your In-Memory implementations in production: