Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Hierarchia technologii pamięci/magazynowania i SQL Server

Istnieje stara sieć mówiąca:„Problemy z przepustowością można leczyć pieniędzmi. Problemy z latencją są trudniejsze, ponieważ prędkość światła jest stała”.

Tradycyjnie w ogólnej hierarchii pamięci i pamięci masowej serwera bazy danych istniały cztery podstawowe warstwy. Począwszy od szczytu piramidy, masz pamięć podręczną statycznej pamięci o dostępie swobodnym (SRAM), która jest zwykle dzielona między stosunkowo małe, szybkie pamięci podręczne L1 i L2 dla każdego fizycznego rdzenia procesora oraz większą, wolniejszą pamięć podręczną, współdzielona pamięć podręczna L3 dla całego procesora. Na przykład 14-nanometrowy procesor Intel Xeon E7-8890 v4 (Broadwell-EX) ma 64 KB na rdzeń pamięci podręcznej L1 i 256 KB na rdzeń pamięci podręcznej L2, a także znacznie większą, ale wolniejszą 60 MB pamięci podręcznej L3, która jest współdzielona przez cały procesor fizyczny .

Druga warstwa to dynamiczna pamięć o dostępie swobodnym (DRAM) o pojemności licencji do 4 TB w systemie Windows Server 2012 R2, do 24 TB w systemie Windows Server 2016 i opóźnieniach rzędu nanosekund. Zarówno SRAM, jak i DRAM są ulotne, co oznacza, że ​​przechowują dane tylko wtedy, gdy podłączone jest zasilanie elektryczne.

Trzecia warstwa to dyski SSD SATA/SAS (NAND), o indywidualnych pojemnościach do około 4 TB i opóźnieniach w zakresie mikrosekund. Jednym z czynników ograniczających w przypadku starszych dysków SSD SATA/SAS (NAND) jest fakt, że korzystają one z interfejsu SATA/SAS, który ogranicza ich całkowitą przepustowość, w zależności od używanej wersji SATA/SAS. Są one również ograniczone przez użycie starszego protokołu AHCI, który ma znacznie większy narzut we/wy i większe opóźnienia niż nowszy protokół NVMe. Czwarta warstwa to starsze magnetyczne dyski twarde z wirującym nośnikiem, z indywidualnymi pojemnościami do 10 TB i opóźnieniami w zakresie milisekund.

Każda z tych tradycyjnych warstw ma większe opóźnienia, ale niższy koszt na MB/GB i większą całkowitą pojemność w miarę przesuwania się w dół hierarchii pamięci/pamięci masowej. Względne opóźnienie tych czterech tradycyjnych warstw pokazano w Tabeli 1.

Interfejs Typ Względne opóźnienie (odczyty)
Na rdzeniu/procesorze na matrycy Pamięć podręczna SRAM 1x
Dołączanie bezpośrednie DDR4 DRAM 10x
PCIe NVMe lub SATA/SAS AHCI SSD 100 000x
SAS/SATA dysk twardy 10 000 000x

Tabela 1:Tradycyjne warstwy pamięci/pamięci masowej

Nowe warstwy pamięci/pamięci masowej

W ciągu ostatnich kilku lat widzieliśmy wprowadzenie i rosnące wykorzystanie dysków SSD NVM Express (NVMe) PCIe opartych na istniejącej technologii NAND flash. Zwykle mają one opóźnienia w zakresie 50-100 mikrosekund. Używają również nowszego, znacznie wydajniejszego protokołu NVMe i interfejsu PCIe, co zapewnia znacznie lepszą wydajność niż starsze dyski SSD SAS/SATA korzystające ze starego protokołu AHCI.

Obecnie Hewlett Packard Enterprise (HPE) sprzedaje moduły NVDIMM 8 GB do swoich serwerów HPE Proliant DL360 Gen9 i HPE Proliant DL380 Gen9. Moduły te mają 8 GB pamięci DRAM, która jest wspierana przez 8 GB pamięci flash za 899,00 USD, co jest dość drogie za gigabajt. Te dwuprocesorowe serwery mają 24 gniazda pamięci, z których każde obsługuje do 128 GB tradycyjnych modułów DDR4 DIMM. Żadne gniazda używane przez moduły NVDIMM nie będą dostępne do normalnego użytkowania pamięci. Do wykorzystania NVDIMM można użyć maksymalnie 16 gniazd pamięci, co daje maksymalną pojemność 128 GB. Aby uzyskać oficjalną obsługę NVDIMM, musisz używać procesorów Intel Xeon E5-2600 v4. Micron ma wypuścić na rynek moduły NVDIMM o większej pojemności 16 GB w październiku 2016 r.

Urządzenie IOPS Śr. opóźnienie (ns) MB/s
NVM Express SSD 14 553 66 632 56,85
Tryb blokowania NVDIMM 148 567 6418 580,34
NVDIMM w trybie DAX 1112007 828 4343,78

Tabela 2:Porównanie wydajności zapisu losowego 4K (1 wątek, QD1)

Dane dotyczące wydajności w tabeli 2 pochodzą z prezentacji firmy Microsoft/Intel (Pamięć trwała w systemie Windows) na IDF16 w San Francisco, przy użyciu następującej metodologii testowania wydajności:

  • Zadanie :4KB losowych zapisów, 1 wątek, 1 zaległe I/O, synchroniczne I/O, plik 1GB, NTFS, 3s nagrzewanie, 7s czas pomiaru
  • Sprzęt :HPE ProLiant DL380 Gen9, 2x Intel Xeon E5-2650L v3 @ 1.8GHz, 96GB RAM, 2x 8GB NVDIMM-N, 1x 1600GB NVMe SSD
  • Oprogramowanie :Wstępna wersja WS 2016, wewnętrzne narzędzie I/O firmy Microsoft

Istnieje dobre wideo Channel 9 zatytułowane Przyspieszanie wydajności SQL Server 2016 za pomocą pamięci trwałej w systemie Windows Server 2016 z udziałem Lindseya Allena i Tobiasa Klimy. Demo w filmie pokazuje, jak program SQL Server 2016 działający w systemie Windows Server 2016 obsługuje tryb DAX (z nieokreśloną flagą śledzenia). Gdy Windows Server 2016 przejdzie na GA, flaga śledzenia nie będzie potrzebna w przyszłej wersji SQL Server.

Te nowe warstwy pamięci masowej zostaną umieszczone między tradycyjną pamięcią DRAM a dyskami SSD SATA/SAS.

Wolumin magazynu, który został sformatowany w trybie DAX, może być używany do hostowania pliku dziennika transakcji programu SQL Server 2016 w scenariuszu, w którym wymagana jest absolutnie najlepsza możliwa wydajność zapisu i nie chcesz używać opóźnionej trwałości ani OLTP w pamięci. Innym możliwym scenariuszem byłoby użycie woluminu trybu DAX do hostowania plików danych tempdb, jeśli masz obciążenie, które kładzie duży nacisk na tempdb.

Przyszłe warstwy pamięci/pamięci masowej

Na przełomie 2016 i 2017 roku powinniśmy zobaczyć wprowadzenie dysków Intel Optane SSD korzystających z protokołu NVMe. Będą to urządzenia pamięci flash wykorzystujące technologię Intel/Micron 3D XPoint (wymawiane jako cross-point), które będą działać na istniejących serwerach. W wewnętrznych testach firmy Intel urządzenia te wykazują około 10 razy mniejsze opóźnienia i około 10 razy wyższe IOPS niż istniejące, bardzo wydajne urządzenia PCIe NVMe SSD z serii Intel DC P3700.

W połowie/pod koniec 2017 r. powinniśmy również zobaczyć wprowadzenie nowej formy trwałej pamięci DIMM, która może być używana jako pamięć trwała o bardzo dużej pojemności lub jako pamięć masowa o bardzo wysokiej wydajności i małej pojemności. Będą one elektrycznie i fizycznie zgodne z obecnymi modułami DIMM DDR4 i będą obsługiwane przez platformę z procesorem Intel Xeon nowej generacji (platforma „Purley” Skylake). Te produkty będą również oparte na technologii Intel/Micron 3D XPoint. Te moduły Intel DIMM oferują nawet dwukrotnie większą pojemność pamięci systemowej przy znacznie niższych kosztach niż tradycyjna pamięć DDR4 DRAM, zakładając, że obsługuje ją platforma procesor/serwer (a firma Microsoft zwiększa limit pamięci licencji po wydaniu systemu Windows Server 2016). Te moduły DIMM nie będą miały takiego samego opóźnienia jak tradycyjna pamięć DRAM (będą wolniejsze), ale będą oferować znacznie niższe opóźnienia niż urządzenia pamięci masowej PCIe NVMe.

Z szerszej, ogólnobranżowej perspektywy ta nowa kategoria urządzeń pamięci trwałej (PM) będzie oferować nieulotną pamięć masową o wydajności zbliżonej do DRAM. Urządzenia PM znajdują się bezpośrednio na szynie pamięci, co zapewnia im bardzo małe opóźnienia i dużą przepustowość. Firma Microsoft obsługuje urządzenia PM w Windows 10 Anniversary Update i Windows Server 2016. Będzie obsługiwana nowa klasa wolumenu pamięci masowej, która nazywa się wolumenem DAX (Direct Access Storage). Woluminy DAX wykorzystują pliki mapowane w pamięci, aby zapewnić aplikacjom bezpośredni dostęp do urządzeń PM w celu uzyskania absolutnie najlepszej wydajności.

Jednym z powodów, dla których tryb DAX jest o wiele szybszy, jest to, że po zmapowaniu regionu pamięci NVDIMM na woluminie DAX dalsze interakcje z tym magazynem całkowicie omijają stos pamięci masowej. Trwałość danych to dosłownie kopia pamięci. To mnóstwo kodu, którego nie musisz wykonywać przy każdej interakcji z magazynem. To kolejny bardzo istotny czynnik wpływający na opóźnienia (wraz z prędkością światła). Woluminy DAX są obsługiwane w systemie NTFS i podczas formatowania woluminu należy wybrać tryb DAX. Aplikacje (takie jak SQL Server 2016) muszą zostać zmodyfikowane (przez firmę Microsoft) w celu obsługi i używania trybu DAX, a także konieczne będzie włączenie flagi śledzenia.

Aby zapewnić zgodność wsteczną na sprzęcie PM, dostępne będą również woluminy w trybie blokowym, które zachowują całą istniejącą semantykę pamięci masowej. Wszystkie operacje we/wy przechodzą przez stos pamięci masowej do sterownika dysku PM. Dzięki temu tryb blokowy jest w pełni kompatybilny z istniejącymi aplikacjami. Jeśli masz urządzenie sprzętowe PM z obsługiwanym systemem operacyjnym, uzyskasz znaczną wydajność pamięci masowej bez żadnych modyfikacji aplikacji w trybie blokowym. Oznacza to, że starsze wersje SQL Server będą mogły używać woluminów pamięci w trybie blokowym.

Najważniejsze jest to, że w ciągu najbliższych 12-18 miesięcy będziemy mieć znacznie większą elastyczność i nowe opcje projektowania i konfigurowania warstw podsystemu pamięci i pamięci, o ile korzystasz z SQL Server 2016 w systemie Windows Serwer 2016 i wystarczająco nowy sprzęt, który może obsługiwać urządzenia PM. Starsze wersje programu SQL Server będą mogły korzystać z woluminów PM w trybie blokowym, jeśli działają w systemie Windows Server 2016. Starszy sprzęt i starsze wersje systemu Windows Server będą mogły korzystać z dysków SSD Intel Optane. Daje nam to wiele dodatkowych możliwości poprawy wydajności pamięci masowej!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zaktualizuj konto pocztowe bazy danych (SSMS)

  2. Jaka jest najlepsza praktyka wstawiania rekordu, jeśli jeszcze nie istnieje?

  3. W SQL Server, jak mogę zablokować pojedynczy wiersz w sposób podobny do Oracle SELECT FOR UPDATE WAIT?

  4. Czy istnieją zagrożenia bezpieczeństwa związane z monitorowaniem w chmurze Spotlight?

  5. Jak zmienić kolumnę z wartości Null na Not Null w SQL Server