Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 1141|Răspunde: 1

[Sursă] Tabele optimizate pentru memorie pentru baze de date SQL SERVER

[Copiază linkul]
Postat la 2025-5-10 21:28:18 | | | |
Introducere în tabelele optimizate pentru memorie

Tabelele optimizate pentru memorie sunt tabele create folosind CREATE TABLE (Transact-SQL).

Implicit, tabelele optimizate pentru memorie sunt complet persistente. La fel ca tranzacțiile pe tabele (tradiționale) bazate pe disc, tranzacțiile pe tabele optimizate pentru memorie sunt complet atomice, consistente, izolate și persistente (ACID). Tabelele optimizate pentru memorie și procedurile stocate compilate nativ suportă doar un subset de funcționalități Transact-SQL.

Începând cu SQL Server 2016 și în Azure SQL Database, nu există restricții privind compilarea sau paginile de coduri OLTP specifice în memorie.

Memoria primară a unui tabel optimizat pentru memorie este memoria primară. Citește rândurile din tabel din memorie și scrie acele rânduri în memorie. O altă copie a datelor tabelului este păstrată pe disc, dar doar pentru persistență. Pentru mai multe informații despre tabelele persistente, vezi Crearea și gestionarea stocării obiectelor pentru optimizarea memoriei. Datele din tabelele optimizate pentru memorie sunt citite de pe disc doar în timpul recuperării bazei de date (de exemplu, după repornirea serverului).

Pentru câștiguri mai mari de performanță, OLTP în memorie suportă tabele persistente cu latență persistentă tranzacțională. Tranzacțiile persistente întârziate sunt salvate pe disc la scurt timp după ce tranzacția este confirmată, iar controlul este returnat clientului. În schimbul performanței îmbunătățite, tranzacțiile angajate care nu sunt salvate pe disc sunt pierdute în cazul unei prăbușiri sau failover a serverului.

Pe lângă tabelele implicite optimizate pentru memorie persistentă, SQL Server suportă tabele neînregistrate și nepersistente optimizate pentru memorie, iar datele lor nu sunt păstrate pe disc. Aceasta înseamnă că tranzacțiile de pe aceste tabele nu necesită niciun IO al discului, dar dacă apare o defecțiune a serverului sau un failover, datele se pierd.

OLTP în memorie se integrează cu SQL Server pentru a oferi o experiență fluidă în toate aspectele, cum ar fi dezvoltarea, implementarea, gestionabilitatea și suportul. O bază de date poate conține atât obiecte în memorie, cât și obiecte bazate pe disc.

Rândurile din tabelul optimizat pentru memorie sunt versionate. Aceasta înseamnă că fiecare rând din tabel poate avea mai multe versiuni. Toate versiunile de rânduri sunt menținute în aceeași structură de date de tabel. Versionarea rândurilor este folosită pentru a permite citiri și scrieri concurente pe același rând. Pentru mai multe informații despre citirile și scrierile concurente pe același rând, vezi Lucruri din Tabelul de Optimizare a Memoriei.

Pași aproximativi și limitări de utilizare

Paşi:

(1) Creează o bază de date și MEMORY_OPTIMIZED_DATA grup de fișiere (modifică baza de date, adaugă grupul de fișiere, fiecare bază de date poate avea doar un singur grup de fișiere MEMORY_OPTIMIZED_DATA!!) )
(2) Adaugă un folder în grupul de fișiere pentru a stoca fișierele de date (vă rugăm să nu creați acest folder în avans, folosiți alter database add file() în grupul de fișiere)
(3) Creează tabele persistente/nepersistente optimizate pentru memorie (SQL Server 2014 este persistat implicit) și trebuie să definești și o cheie primară bazată pe un index hash neagregat. Indicii hash sunt singurul tip de index suportat în tabelele optimizate pentru memorie.
(4) Utilizarea procedurilor stocate compilate local: Tabelele optimizate pentru memorie suportă proceduri compilate local, atâta timp cât aceste proceduri fac referire doar la tabele optimizate pentru memorie.

Limită:

(1) Tabelul optimizat pentru memorie trebuie plasat sub baza de date cu grupul de fișiere CONTAINS MEMORY_OPTIMIZED_DATA.
(2) Tabelul optimizat pentru memorie trebuie să definească o cheie primară bazată pe un indice hash neagregat, iar tabelul trebuie definitVerificarea cheii străine sau a constrângerilor nu este suportată
(3) Tabelul de optimizare a memoriei trebuie să aibă suficientă memorie, altfel operații precum inserarea actualizărilor vor eșua.
(4) SQL Server 2014 are multe limitări asupra acestor tabele. De exemplu, nu suportă chei străine sau verificarea constrângărilor (care se simte similar cu motorul de stocare a memoriei MySQL), eiCâmpurile IDENTITY sau trigger-urile DML nu sunt de asemenea suportate

Folosește tutorialul

Versiunile bazei de date sunt următoarele:

Microsoft SQL Server 2022 (RTM-CU15-GDR) (KB5046059) - 16.0.4150.1 (X64)
        25 sep 2024 17:34:41
        Drepturi de autor (C) 2022 Microsoft Corporation
        Ediția Enterprise: Licențiere bazată pe bază de nucleu (64 de biți) pe Linux (Ubuntu 22.04.4 LTS) <X64>

Mai întâi, creează o bază de date și un grup de fișiere cu următoarea comandă:

Dacă nu creați un grup optimizat pentru memorie, o eroare va fi raportată atunci când creați un tabel optimizat pentru memorie:Nu se pot crea tabele optimizate pentru memorie. Pentru a crea tabele optimizate pentru memorie, baza de date trebuie să aibă un MEMORY_OPTIMIZED_FILEGROUP care să fie online și să aibă cel puțin un container.

Creează două tabele optimizate pentru memorie pentru testare, una persistentă și una nepersistentă, cu următoarea comandă:

Tabelul de optimizare a memoriei are două opțiuni (DURABILITATE = SCHEMA_AND_DATA), (DURABILITATE = SCHEMA_ONLY)
Tabel de durabilitate: DURABILITATE =SCHEMA_AND_DATA
Tabel nepersistent: DURABILITATE =SCHEMA_ONLY

Testele sunt inserate separat în tabelul de optimizare a memoriei100.000 de articole(de fapt 100002 elemente), comanda este următoarea:





Persistența durează 28 de secunde să se pornească și 1 secundă fără persistență

Referință:

Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.




Precedent:Îmi place să reciclez software-ul de inspecție a calității laptopurilor
Următor:Sintaxa C# 8.0 folosește indicele și intervalul
 Proprietarul| Postat la 2025-5-10 21:36:40 |
Un tabel normal inserează 100.000 de date și durează 18 secunde pentru a fi executat. Așa cum se arată mai jos:



Script:
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com