Introduksjon til minneoptimaliserte tabeller
Minneoptimaliserte tabeller er tabeller laget ved bruk av CREATE TABLE (Transact-SQL).
Som standard er minneoptimaliserte tabeller fullt persistente. Som transaksjoner på (tradisjonelle) diskbaserte tabeller, er transaksjoner på minneoptimaliserte tabeller fullt atomære, konsistente, isolerte og persistente (ACID). Minneoptimaliserte tabeller og native kompilerte lagrede prosedyrer støtter kun et delsett av Transact-SQL-funksjoner.
Fra og med SQL Server 2016 og i Azure SQL Database finnes det ingen begrensninger på OLTP-spesifikke sortering eller kodesider i minnet.
Primærminnet i en minneoptimalisert tabell er primærminnet. Les rader fra tabellen fra hukommelsen og skriv disse radene til minnet. En annen kopi av tabelldataene oppbevares på disken, men kun for persistensformål. For mer informasjon om vedvarende tabeller, se Opprett og administrer lagring av objekter for minneoptimalisering. Data i minneoptimaliserte tabeller leses kun fra disk under databasegjenoppretting (for eksempel etter en serveromstart).
For større ytelsesgevinster støtter OLTP i minnet persistente tabeller med transaksjonell persistent latens. Forsinkede vedvarende transaksjoner lagres på disk kort tid etter at transaksjonen er gjennomført og kontrollen returneres til klienten. I bytte mot forbedret ytelse går committede transaksjoner som ikke lagres på disk tapt ved serverkrasj eller failover.
I tillegg til standard persistente minneoptimaliserte tabeller, støtter SQL Server uregistrerte, ikke-persistente minneoptimaliserte tabeller, og deres data lagres ikke på disk. Dette betyr at transaksjoner på disse tabellene ikke krever noen disk-IO, men hvis serverfeil eller failover oppstår, går dataene tapt.
OLTP integreres i minnet med SQL Server for å gi en sømløs opplevelse på tvers av alle aspekter som utvikling, distribusjon, håndterbarhet og støtte. En database kan inneholde både objekter i minnet og diskbaserte objekter.
Radene i den minneoptimaliserte tabellen er versjonerte. Dette betyr at hver rad i tabellen kan ha flere versjoner. Alle radversjoner vedlikeholdes i samme tabelldatastruktur. Radversjonering brukes for å muliggjøre samtidige lesinger og skrivinger til samme rad. For mer informasjon om samtidige lesinger og skrivinger til samme rad, se Ting i minneoptimaliseringstabellen.
Omtrentlige trinn og begrensninger i bruk
Trinn:
(1) Opprett en database og MEMORY_OPTIMIZED_DATA filgruppe (endre database legg til filgruppe, hver database kan bare ha én MEMORY_OPTIMIZED_DATA filgruppe!!) ) (2) Legg til en mappe i filgruppen for å lagre datafilene (vennligst ikke lag denne mappen på forhånd, bruk alter database add file() to filegroup) (3) Lag persistent/ikke-persistent minneoptimaliserte tabeller (SQL Server 2014 er som standard lagret), og du må også definere en primærnøkkel basert på en ikke-aggregert hashindeks. Hashed indekser er den eneste støttede indekstypen i minneoptimaliserte tabeller. (4) Bruk lokalt kompilerte lagrede prosedyrer: Minneoptimaliserte tabeller støtter lokalt kompilerte lagrede prosedyrer, så lenge disse prosedyrene kun refererer til minneoptimaliserte tabeller.
Grense:
(1) Den minneoptimaliserte tabellen må plasseres under databasen med CONTAINS MEMORY_OPTIMIZED_DATA filgruppen. (2) Den minneoptimaliserte tabellen må definere en primærnøkkel basert på en ikke-aggregert hashindeks, og tabellen må defineresFremmednøkkel- eller begrensningskontroll støttes ikke (3) Minneoptimaliseringstabellen må ha nok minne, ellers vil operasjoner som å sette inn oppdateringer feile. (4) SQL Server 2014 har mange begrensninger på disse tabellene. For eksempel støtter de ikke fremmednøkler eller begrensningskontroll (som føles likt MySQLS minnelagringsmotor), deIDENTITY-felt eller DML-triggere støttes heller ikke。
Bruk veiledningen
Databaseversjonene er som følger:
Microsoft SQL Server 2022 (RTM-CU15-GDR) (KB5046059) - 16.0.4150.1 (X64) 25. sep. 2024 17:34:41 Opphavsrett (C) 2022 Microsoft Corporation Enterprise Edition: Kjernebasert lisensiering (64-bit) på Linux (Ubuntu 22.04.4 LTS) <X64>
Først oppretter du en database og filgruppe med følgende kommando:
Hvis du ikke oppretter en minneoptimalisert gruppe, vil en feil bli rapportert når du oppretter en minneoptimalisert tabell:Kan ikke lage minneoptimaliserte tabeller. For å lage minneoptimaliserte tabeller må databasen ha en MEMORY_OPTIMIZED_FILEGROUP som er online og har minst én container.
Lag to minneoptimaliserte tabeller for testing, én vedvarende og én ikke-persistent, med følgende kommando:
Minneoptimaliseringstabellen har to alternativer (HOLDBARHET = SCHEMA_AND_DATA), (HOLDBARHET = SCHEMA_ONLY) Holdbarhetstabell: HOLDBARHET =SCHEMA_AND_DATA Ikke-persistent tabell: HOLDBARHET =SCHEMA_ONLY
Tester settes inn separat i minneoptimaliseringstabellen100 000 artikler(faktisk 100002 elementer) data, er kommandoen som følger:
Persistens tar 28 sekunder å slå på og 1 sekund uten persistens。
Referanse:
Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig. |