Introduktion till minnesoptimerade tabeller
Minnesoptimerade tabeller är tabeller skapade med CREATE TABLE (Transact-SQL).
Som standard är minnesoptimerade tabeller helt persistent. Liksom transaktioner på (traditionella) diskbaserade tabeller är transaktioner på minnesoptimerade tabeller helt atomära, konsekventa, isolerade och beständiga (ACID). Minnesoptimerade tabeller och inbyggt kompilerade lagrade procedurer stöder endast en delmängd av Transact-SQL-funktionerna.
Från och med SQL Server 2016 och i Azure SQL Database finns inga begränsningar för OLTP-specifik sortering eller kodsidor i minnet.
Det primära minnet i en minnesoptimerad tabell är primärminnet. Läs rader från tabellen från minnet och skriv dessa rader till minnet. En annan kopia av tabelldata underhålls på disken, men endast för persistensändamål. För mer information om persistenta tabeller, se Create and manage storage of objects for memory optimization. Data i minnesoptimerade tabeller läses från disken endast under databasåterställning (till exempel efter en serveromstart).
För större prestandavinster stödjer minnesin-OLTP persistenta tabeller med transaktionell persistent latens. Fördröjda persistenta transaktioner sparas på disk kort efter att transaktionen har genomförts och kontrollen återlämnas till klienten. I utbyte mot förbättrad prestanda förloras committerade transaktioner som inte sparas på disk vid serverkrasch eller failover.
Utöver de standardbeständiga minnesoptimerade tabellerna stöder SQL Server oregistrerade icke-persistenta minnesoptimerade tabeller, och deras data sparas inte på disk. Detta innebär att transaktioner på dessa tabeller inte kräver någon disk-IO, men om ett serverfel eller failover inträffar går datan förlorad.
In-memory OLTP integreras med SQL Server för att erbjuda en sömlös upplevelse inom alla aspekter såsom utveckling, distribution, hantering och support. En databas kan innehålla både objekt i minnet och diskbaserade objekt.
Raderna i den minnesoptimerade tabellen är versionsstyrda. Detta innebär att varje rad i tabellen kan ha flera versioner. Alla radversioner underhålls i samma tabelldatastruktur. Radversionering används för att möjliggöra samtidiga läsningar och skrivningar till samma rad. För mer information om samtidiga läsningar och skrivningar till samma rad, se Saker i minnesoptimeringstabellen.
Ungefärliga steg och begränsningar i användningen
Trappsteg:
(1) Skapa en databas och MEMORY_OPTIMIZED_DATA filgrupp (ändra databas lägg till filgrupp, varje databas kan bara ha en MEMORY_OPTIMIZED_DATA filgrupp!!) ) (2) Lägg till en mapp i filgruppen för att lagra datafilerna (vänligen skapa inte denna mapp i förväg, använd alter database add file() to filegroup) (3) Skapa beständiga/icke-persistenta minnesoptimerade tabeller (SQL Server 2014 är som standard persisterad), och du måste också definiera en primärnyckel baserat på ett icke-aggregerat hashindex. Hashed index är den enda stödda indextypen i minnesoptimerade tabeller. (4) Använd lokalt kompilerade lagrade procedurer: Minnesoptimerade tabeller stödjer lokalt kompilerade lagrade procedurer, så länge dessa procedurer endast refererar till minnesoptimerade tabeller.
Gräns:
(1) Den minnesoptimerade tabellen måste placeras under databasen med CONTAINS MEMORY_OPTIMIZED_DATA filgrupp. (2) Den minnesoptimerade tabellen måste definiera en primärnyckel baserat på ett icke-aggregerat hashindex, och tabellen måste definierasFrämmande nyckel- eller begränsningskontroll stöds inte (3) Minnesoptimeringstabellen måste ha tillräckligt med minne, annars misslyckas operationer som att infoga uppdateringar. (4) SQL Server 2014 har många begränsningar för dessa tabeller. Till exempel stöder de inte främmande nycklar eller begränsningskontroll (vilket känns likt MySQLS minneslagringsmotor), deIDENTITY-fält eller DML-triggers stöds inte heller。
Använd handledningen
Databasversionerna är följande:
Microsoft SQL Server 2022 (RTM-CU15-GDR) (KB5046059) - 16.0.4150.1 (X64) 25 sep 2024 17:34:41 Copyright (C) 2022 Microsoft Corporation Enterprise Edition: Kärnbaserad licensiering (64-bitars) på Linux (Ubuntu 22.04.4 LTS) <X64>
Skapa först en databas och filgrupp med följande kommando:
Om du inte skapar en minnesoptimerad grupp kommer ett fel att rapporteras när du skapar en minnesoptimerad tabell:Kan inte skapa minnesoptimerade tabeller. För att skapa minnesoptimerade tabeller måste databasen ha en MEMORY_OPTIMIZED_FILEGROUP som är online och har minst en container.
Skapa två minnesoptimerade tabeller att testa, en persistent och en icke-persistent, med följande kommando:
Minnesoptimeringstabellen har två alternativ (HÅLLBARHET = SCHEMA_AND_DATA), (HÅLLBARHET = SCHEMA_ONLY) Hållbarhetstabell: HÅLLBARHET =SCHEMA_AND_DATA Icke-persistent tabell: HÅLLBARHET =SCHEMA_ONLY
Tester infogas separat i minnesoptimeringstabellen100 000 artiklar(faktiskt 100002 objekt) data, är kommandot följande:
Persistens tar 28 sekunder att slå på och 1 sekund utan persistens。
Hänvisning:
Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig. |