Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 1141|Risposta: 1

[Fonte] Tabelle ottimizzate in memoria per database SQL SERVER

[Copiato link]
Pubblicato il 10-05-2025 21:28:18 | | | |
Introduzione alle tabelle ottimizzate per la memoria

Le tabelle ottimizzate per la memoria sono tabelle create utilizzando CREATE TABLE (Transact-SQL).

Di default, le tabelle ottimizzate per la memoria sono completamente persistenti. Come le transazioni su tabelle (tradizionali) basate su disco, le transazioni su tabelle ottimizzate per la memoria sono completamente atomiche, costanti, isolate e persistenti (ACID). Le tabelle ottimizzate per la memoria e le stored procedure compilate nativamente supportano solo un sottoinsieme delle funzionalità Transact-SQL.

A partire da SQL Server 2016 e in Azure SQL Database, non ci sono restrizioni sulla collazione o sulle code page specifiche OLTP in memoria.

La memoria primaria di una tabella ottimizzata per la memoria è la memoria primaria. Leggi le righe della tabella a memoria e scrivi quelle righe in memoria. Un'altra copia dei dati della tabella viene mantenuta su disco, ma solo per scopi di persistenza. Per maggiori informazioni sulle tabelle persistenti, vedi Crea e gestisci l'archiviazione di oggetti per l'ottimizzazione della memoria. I dati nelle tabelle ottimizzate per la memoria vengono letti dal disco solo durante il recupero del database (ad esempio, dopo un riavvio del server).

Per maggiori miglioramenti di prestazioni, l'OLTP in memoria supporta tabelle persistenti con latenza persistente transazionale. Le transazioni persistenti in ritardo vengono salvate su disco poco dopo il commit della transazione e il controllo viene restituito al client. In cambio di prestazioni migliorate, le transazioni di commit che non vengono salvate su disco vengono perse in caso di crash o failover del server.

Oltre alle tabelle predefinite ottimizzate per memoria persistente, SQL Server supporta tabelle non registrate e non ottimizzate per la memoria persistente, e i loro dati non vengono conservati su disco. Ciò significa che le transazioni su queste tabelle non richiedono alcun IO disco, ma se si verifica un guasto del server o un failover, i dati vengono persi.

OLTP in memoria si integra con SQL Server per offrire un'esperienza fluida in tutti gli aspetti come sviluppo, distribuzione, gestibilità e supporto. Un database può contenere sia oggetti in memoria che oggetti basati su disco.

Le righe nella tabella ottimizzata per la memoria sono versionate. Questo significa che ogni riga della tabella può avere più versioni. Tutte le versioni delle righe sono mantenute nella stessa struttura dati a tabella. Il versioning delle righe viene utilizzato per abilitare letture e scritture concorrenti sulla stessa riga. Per maggiori informazioni sulle letture e scritture concorrenti nella stessa riga, vedi Cose nella Memory Optimization Table.

Passaggi approssimati e limitazioni d'uso

Passi:

(1) Creare un database e MEMORY_OPTIMIZED_DATA file group (modificare il database, aggiungere file group, ogni database può avere solo un MEMORY_OPTIMIZED_DATA file group!!) )
(2) Aggiungere una cartella al file group per memorizzare i file di dati (per favore non creare questa cartella in anticipo, usa alter database add file() to filegroup)
(3) Creare tabelle ottimizzate per memoria persistenti/non persistenti (SQL Server 2014 è persistente di default), e devi anche definire una chiave primaria basata su un indice hash non aggregato. Gli indici hashati sono l'unico tipo di indice supportato nelle tabelle ottimizzate per la memoria.
(4) Utilizzare stored procedure compilate localmente: Le tabelle ottimizzate per la memoria supportano stored procedure compilate localmente, purché tali stored procedure facciano riferimento solo a tabelle ottimizzate per la memoria.

Limite:

(1) La tabella ottimizzata per la memoria deve essere posizionata sotto il database con il gruppo file CONTAINS MEMORY_OPTIMIZED_DATA.
(2) La tabella ottimizzata per la memoria deve definire una chiave primaria basata su un indice hash non aggregato, e la tabella deve essere definitaIl controllo delle chiavi esterne o dei vincoli non è supportato
(3) La tabella di ottimizzazione della memoria deve avere abbastanza memoria, altrimenti operazioni come l'inserimento di aggiornamenti falliranno.
(4) SQL Server 2014 presenta molte limitazioni su queste tabelle. Ad esempio, non supportano chiavi esterne o il vincvinct checking (che sembra simile al motore di memoria di MySQL),Anche i campi IDENTITY o i trigger DML non sono supportati

Usa il tutorial

Le versioni del database sono le seguenti:

Microsoft SQL Server 2022 (RTM-CU15-GDR) (KB5046059) - 16.0.4150.1 (X64)
        25 Set 2024 17:34:41
        Copyright (C) 2022 Microsoft Corporation
        Enterprise Edition: Licenze basate su core (64 bit) su Linux (Ubuntu 22.04.4 LTS) <X64>

Per prima cosa, crea un database e un gruppo di file con il seguente comando:

Se non crei un gruppo ottimizzato per la memoria, verrà segnalato un errore quando crei una tabella ottimizzata per la memoria:Non è possibile creare tabelle ottimizzate per la memoria. Per creare tabelle ottimizzate per la memoria, il database deve avere un MEMORY_OPTIMIZED_FILEGROUP online e con almeno un contenitore.

Crea due tabelle ottimizzate per la memoria da testare, una persistente e una non persistente, con il seguente comando:

La tabella di ottimizzazione della memoria ha due opzioni (DURABILITÀ = SCHEMA_AND_DATA), (DURABILITÀ = SCHEMA_ONLY)
Tabella della durabilità: DURABILITÀ =SCHEMA_AND_DATA
Tabella non persistente: DURATA =SCHEMA_ONLY

I test vengono inseriti separatamente nella tabella di ottimizzazione della memoria100.000 articoli(in realtà 100002 elementi), il comando è il seguente:





La persistenza impiega 28 secondi per accendersi e 1 secondo senza persistenza

Riferimento:

Il login del link ipertestuale è visibile.
Il login del link ipertestuale è visibile.
Il login del link ipertestuale è visibile.
Il login del link ipertestuale è visibile.
Il login del link ipertestuale è visibile.




Precedente:Adoro riciclare il software di ispezione qualità dei laptop
Prossimo:La sintassi C# 8.0 usa indice e intervallo
 Padrone di casa| Pubblicato il 2025-5-10 21:36:40 |
Una tabella normale inserisce 100.000 dati e impiega 18 secondi per essere eseguita. Come mostrato di seguito:



Copione:
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com