Uvod v tabele, optimizirane za pomnilnik
Pomnilniško optimizirane tabele so tabele, ustvarjene z uporabo CREATE TABLE (Transact-SQL).
Privzeto so tabele, optimizirane za pomnilnik, popolnoma trajne. Tako kot transakcije na (tradicionalnih) tabelah na diskih so tudi transakcije na pomnilniško optimiziranih tabelah popolnoma atomske, dosledne, izolirane in trajne (ACID). Pomnilniško optimizirane tabele in nativno prevedene shranjene procedure podpirajo le podmnožico funkcij Transact-SQL.
Od SQL Server 2016 in v Azure SQL Database ni omejitev glede OLTP-specifičnega koliranja ali kodnih strani v pomnilniku.
Primarni pomnilnik tabele, optimizirane za pomnilnik, je primarni pomnilnik. Beri vrstice iz tabele iz spomina in te vrstice zapiši v spomin. Druga kopija podatkov tabele se hrani na disku, vendar le zaradi trajnosti. Za več informacij o trajnih tabelah glejte Ustvarjanje in upravljanje shranjevanja objektov za optimizacijo pomnilnika. Podatki v tabelah, optimiziranih za pomnilnik, se berejo z diska le med obnovo baze podatkov (na primer po ponovnem zagonu strežnika).
Za večje izboljšave zmogljivosti OLTP v pomnilniku podpira trajne tabele s transakcijsko trajno zakasnitvijo. Zamaknjene trajne transakcije se shranijo na disk kmalu po tem, ko je transakcija sklenjena in se nadzor vrne odjemalcu. V zameno za izboljšano zmogljivost se v primeru zrušitve strežnika ali preklopa izgubijo zavezane transakcije, ki niso shranjene na disk.
Poleg privzetih tabel, optimiziranih za trajni pomnilnik, SQL Server podpira tudi neposnete tabele, optimizirane za netrajni pomnilnik, njihovi podatki pa niso shranjeni na disku. To pomeni, da transakcije na teh tabelah ne zahtevajo diskovnega vhodnega prehoda, vendar se podatki izgubijo, če pride do okvare strežnika ali preklopa.
OLTP v pomnilniku se integrira s SQL Serverjem, da zagotovi brezhibno izkušnjo na vseh področjih, kot so razvoj, uvajanje, upravljanje in podpora. Baza podatkov lahko vsebuje tako objekte v pomnilniku kot tudi objekte na disku.
Vrstice v pomnilniško optimizirani tabeli so verzionirane. To pomeni, da ima lahko vsaka vrstica v tabeli več različic. Vse različice vrstic so vzdrževane v isti podatkovni strukturi tabele. Verzioniranje vrstic se uporablja za omogočanje sočasnega branja in pisanja v isto vrstico. Za več informacij o sočasnih branjih in zapisih v isto vrstico glejte Stvari v tabeli optimizacije pomnilnika.
Približni koraki in omejitve uporabe
Korake:
(1) Ustvarite bazo podatkov in MEMORY_OPTIMIZED_DATA skupino datotek (spremenite bazo podatkov dodajte datotečno skupino, vsaka baza podatkov lahko vsebuje le eno MEMORY_OPTIMIZED_DATA skupino datotek!!) ) (2) Dodajte mapo v skupino datotek za shranjevanje podatkovnih datotek (prosimo, da te mape ne ustvarite vnaprej, uporabite alter database add file() v datotečno skupino) (3) Ustvarite trajne/netrajne tabele, optimizirane za pomnilnik (SQL Server 2014 je privzeto ohranjen), poleg tega pa morate definirati primarni ključ na podlagi neagregiranega hash indeksa. Hashed indeksi so edina podprta vrsta indeksa v tabelah, optimiziranih za pomnilnik. (4) Uporaba lokalno prevedenih shranjenih postopkov: Tabele, optimizirane za pomnilnik, podpirajo lokalno prevedene shranjene procedure, dokler te shranjene procedure uporabljajo le tabele, optimizirane za pomnilnik.
Omejiti:
(1) Tabela, optimizirana za pomnilnik, mora biti postavljena pod bazo podatkov z datoteko CONTAINS MEMORY_OPTIMIZED_DATA datotečne skupine. (2) Tabela, optimizirana za pomnilnik, mora definirati primarni ključ na podlagi neagregiranega hash indeksa, tabela pa mora biti definiranaPreverjanje tujih ključev ali omejitev ni podprto (3) Tabela optimizacije pomnilnika mora imeti dovolj pomnilnika, sicer bodo operacije, kot je vstavljanje posodobitev, neuspešne. (4) SQL Server 2014 ima veliko omejitev glede teh tabel. Na primer, ne podpirajo tujih ključev ali preverjanja omejitev (kar je podobno kot MySQL pogon za shranjevanje pomnilnika), oniIDENTITY polja ali DML sprožilci prav tako niso podprti。
Uporabi vodič
Različice baze podatkov so naslednje:
Microsoft SQL Server 2022 (RTM-CU15-GDR) (KB5046059) - 16.0.4150.1 (X64) 25. sep 2024 17:34:41 Avtorske pravice (C) Microsoft Corporation 2022 Enterprise Edition: Licenciranje na osnovi jedra (64-bit) na Linuxu (Ubuntu 22.04.4 LTS) <X64>
Najprej ustvarite bazo podatkov in skupino datotek z naslednjim ukazom:
Če ne ustvarite skupine, optimizirane za pomnilnik, bo ob ustvarjanju tabele, optimizirane za pomnilnik, prijavljena napaka:Ni mogoče ustvariti tabel, optimiziranih za pomnilnik. Za ustvarjanje tabel, optimiziranih za pomnilnik, mora imeti podatkovna baza MEMORY_OPTIMIZED_FILEGROUP, ki je na spletu in vsebuje vsaj en vsebnik.
Ustvarite dve tabeli, optimizirani za pomnilnik za testiranje, eno trajno in eno netrajno, z naslednjim ukazom:
Tabela optimizacije pomnilnika ima dve možnosti (VZDRŽLJIVOST = SCHEMA_AND_DATA), (VZDRŽLJIVOST = SCHEMA_ONLY) Tabela vzdržljivosti: VZDRŽLJIVOST =SCHEMA_AND_DATA Netrajna tabela: VZDRŽLJIVOST =SCHEMA_ONLY
Testi se vstavljajo ločeno v tabelo optimizacije pomnilnika100.000 člankov(dejansko 100002 elemente) podatke, ukaz je naslednji:
Persistence se vklopi v 28 sekundah in 1 sekundo brez Persistence。
Referenčni:
Prijava do hiperpovezave je vidna.
Prijava do hiperpovezave je vidna.
Prijava do hiperpovezave je vidna.
Prijava do hiperpovezave je vidna.
Prijava do hiperpovezave je vidna. |