Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:Program SQL Server w systemie Linux
Ten artykuł opisuje, jak skonfigurować trwałą pamięć (PMEM) dla SQL Server 2019 (15.x) oraz nowszych wersji na Linuksie.
Overview
SQL Server 2019 (15.x) dodaje trwałe wsparcie dla pamięci, aby przyspieszyć kilka operacji wymagających pamięci masowej.
W systemie plików obsługującym PMEM odwzorowanie pamięci (mmap()) zapewnia aplikacjom działającym w przestrzeni użytkownika bezpośredni dostęp do danych plików. Gdy dla pliku tworzona jest mapa pamięci, aplikacja może wydawać instrukcje ładowania/zapisu, które omijają warstwę pamięci.
Note
Ten bezpośredni dostęp nazywany jest metodą oświeconego dostępu do plików z perspektywy aplikacji rozszerzenia hosta, co jest sposobem interakcji SQL Server z systemem operacyjnym hosta, wykorzystując warstwę abstrakcji SQL Platform (SQLPAL).
Ten artykuł pokazuje, jak skonfigurować trwałą pamięć dla SQL Server on Linux.
Tworzenie przestrzeni nazw dla urządzeń PMEM
Konfigurowanie urządzeń
W systemie Linux użyj narzędzia ndctl.
- Zainstaluj program
ndctl, aby skonfigurować urządzenie PMEM z sekcji Instalowanie NDCTL. - Użyj
ndctl, aby utworzyć przestrzeń nazw. Przestrzenie nazw są przeplatane między modułami NVDIMM PMEM i mogą umożliwiać różne typy dostępu użytkownika do obszarów pamięci na urządzeniu.fsdaxjest domyślnym i żądanym trybem dla programu SQL Server.
ndctl create-namespace -f -e namespace0.0 --mode=fsdax --map=dev
Tryb fsdax przechowuje metadane dla każdej strony w pamięci systemowej. Opcja --map=dev jest zalecana, ponieważ przechowuje metadane bezpośrednio na przestrzeni nazw. Przechowywanie metadanych w pamięci za pomocą --map=mem jest eksperymentalne.
Użyj ndctl, aby zweryfikować przestrzeń nazw.
Przykładowe dane wyjściowe są następujące:
# ndctl list -N
{
"dev":"namespace0.0",
"mode":"fsdax",
"map":"dev",
"size":4294967296,
"sector_size":512,
"blockdev":"pmem0",
"numa_node":0
}
Tworzenie i instalowanie urządzenia PMEM
Na przykład z XFS:
mkfs.xfs -f /dev/pmem0
mount -o dax,noatime /dev/pmem0 /mnt/dax
xfs_io -c "extsize 2m" /mnt/dax
Na przykład z ext4:
mkfs.ext4 -b 4096 -E stride=512 -F /dev/pmem0
mount -o dax,noatime /dev/pmem0 /mnt/dax
Zagadnienia techniczne
- Blokuj alokację 2 MB dla systemu XFS lub ext4, zgodnie z wcześniejszym opisem
- Niezgodność między alokacją bloków a
mmappowoduje ciche przełączenie na 4 KB - Rozmiary plików powinny mieć wielokrotność 2 MB (modulo 2 MB)
- Nie wyłączaj przezroczystych ogromnych stron (THP) (domyślnie włączone w większości dystrybucji)
Po użyciu ndctl do skonfigurowania, utworzenia i zamontowania urządzenia możesz umieścić w nim pliki bazy danych lub utworzyć nową bazę danych.
Możesz przechowywać pliki danych SQL Server (.mdf, .ndf) oraz pliki tempdb na urządzeniu PMEM w trybie fsdax za pomocą następującego polecenia. Nie używaj tego trybu do przechowywania plików logów SQL Server (.ldf), ponieważ dziennik transakcyjny wymaga pamięci zapewniającej gwarancje sektorowe atomowe:
ndctl create-namespace -f -e namespace0.0 --mode=fsdax --map=dev
Przed ustawieniem opcji mapy w poprzednim poleceniu należy pamiętać o następujących kwestiach:
- Aby uzyskać najlepszą wydajność podczas dostępu i aktualizacji tych wpisów strony NVDIMM dla tego urządzenia, użyj
--map=mem - Jeśli pojemność NVDIMM jest zbyt duża (powyżej 512 GB), ustaw
--map=dev, co wpływa na przepustowość I/O i obniża wydajność
Dla plików logów SQL Server na urządzeniach PMEM konfiguruj urządzenia PMEM tak, aby korzystały z tabeli translacji sektorowej/blokowej (BTT). Ta konfiguracja zapewnia atomowość sektorów, jaką pliki logów SQL Server wymagają dla tej technologii przechowywania danych. Przeprowadzaj weryfikację wydajności obciążenia. Porównaj wydajność logów SQL Server dla swojego obciążenia między tym rozwiązaniem a najlepszymi dyskami NVMe SSD, a następnie wybierz ten, który najlepiej odpowiada Twoim potrzebom.
ndctl create-namespace -f -e namespace0.0 --mode=sector
Wyłącz zachowanie wymuszonego opróżniania
Ponieważ urządzenia PMEM są bezpieczne O_DIRECT (bezpośrednie I/O), można wyłączyć wymuszone opróżnianie.
Note
System przechowywania danych może zapewnić, że wszelkie zapisy buforowane lub przygotowane do zapisu są bezpieczne i nieutracalne, gwarantując, że zapisy na urządzeniu są przechowywane na nośniku, który zachowuje dane mimo awarii systemu, resetów interfejsu i zaników zasilania, oraz że sam nośnik jest sprzętowo nadmiarowy.
Pliki bazy danych (
.mdfi.ndf) i dziennika transakcji (.ldf) nie używają plikówwritethroughialternatewritethroughdomyślnie w programie SQL Server 2017 (14.x) CU 6 i nowszych wersjach, ponieważ używają wymuszonego zachowania opróżniania. Flaga śledzenia 3979 wyłącza wymuszone opróżnianie plików bazy danych i dziennika transakcji oraz używa logikiwritethroughialternatewritethrough.Inne pliki, które SQL Server otwiera za pomocą
FILE_FLAG_WRITE_THROUGH, takie jak migawki bazy danych, wewnętrzne migawki na potrzeby sprawdzania spójności bazy danych (DBCC CHECKDB), pliki śledzenia profilera oraz pliki śledzenia zdarzeń rozszerzonych, wykorzystują optymalizacjewritethroughialternatewritethrough.
Aby uzyskać więcej informacji na temat zmian wprowadzonych w programie SQL Server 2017 (14.x) CU 6, zobacz KB 4131496. Aby uzyskać więcej informacji na temat wymuszonego dostępu do jednostek - wewnętrznych (FUA), zobacz wewnętrzne FUA.
SQL Server oraz wymuszony dostęp jednostkowy (FUA) w podsystemie I/O
Niektóre obsługiwane dystrybucje systemu Linux implementują wymuszony dostęp jednostkowy (FUA) na poziomie podsystemu We/Wy w celu zapewnienia trwałości danych. Program SQL Server wykorzystuje tę funkcję, aby zapewnić wydajną i niezawodną wydajność we/wy dla obciążeń systemu Linux. Aby uzyskać więcej informacji na temat obsługi FUA w dystrybucjach Linuksa i jego wpływu na SQL Server, zobacz SQL Server on Linux: Forced Unit Access (FUA) Internals.
Obsługa protokołu FUA w podsystemie we/wy została wprowadzona w systemach SUSE Linux Enterprise Server 12 SP5, Red Hat Enterprise Linux 8.0 i Ubuntu 18.04. W programie SQL Server 2017 (14.x) CU 6 i nowszych wersjach użyj następującej konfiguracji, aby umożliwić wysoką wydajność i wydajną operację we/wy z funkcją FUA w programie SQL Server.
Użyj tej zalecanej konfiguracji, jeśli spełnione są następujące warunki:
SQL Server 2017 (14.x) CU 6 i nowsze wersje
Dystrybucja i wersja systemu Linux, która obsługuje funkcje FUA (począwszy od systemu Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5 lub Ubuntu 18.04)
Note
Począwszy od SQL Server 2025 (17.x), system SUSE Linux Enterprise Server (SLES) nie jest obsługiwany.
System plików XFS dla magazynu SQL Server na jądrze systemu Linux w wersji 4.18 lub nowszej.
ext4 system plików do przechowywania programu SQL Server na jądrze systemu Linux w wersji 5.6 lub nowszej.
Note
Użyj systemu plików XFS do hostowania plików dziennika danych i transakcji programu SQL Server, gdy wersja jądra systemu Linux jest niższa niż 5.6. Począwszy od jądra w wersji 5.6, można wybrać między XFS i ext4 na podstawie określonych wymagań.
Podsystem magazynowania i sprzęt, który obsługuje i jest skonfigurowany do obsługi funkcji FUA
Zalecana konfiguracja:
Włącz flagę śledzenia 3979 jako parametr uruchamiania.
Użyj
mssql-conf, aby skonfigurowaćcontrol.writethrough = 1icontrol.alternatewritethrough = 0.
W przypadku prawie wszystkich innych konfiguracji, które nie spełniają poprzednich warunków, użyj następującej zalecanej konfiguracji:
Włącz flagę śledzenia 3982 jako parametr startowy (domyślny dla programu SQL Server w ekosystemie systemu Linux) i upewnij się, że flaga śledzenia 3979 nie jest włączona jako parametr uruchamiania.
Użyj
mssql-conf, aby skonfigurowaćcontrol.writethrough = 1icontrol.alternatewritethrough = 1.
Obsługa fua dla kontenerów programu SQL Server wdrożonych na platformie Kubernetes
Program SQL Server musi używać trwałej zamontowanej pamięci, a nie
overlayfs.Magazyn musi używać systemów plików XFS lub ext4 i powinien obsługiwać FUA (ext4 nie obsługuje FUA w jądrze Linux wcześniejszych niż wersja 5.6). Przed włączeniem tego ustawienia skontaktuj się z dostawcą dystrybucji systemu Linux i magazynu, aby upewnić się, że podsystem operacyjny i magazyn obsługuje opcje FUA. Na platformie Kubernetes można wykonać zapytanie dotyczące typu systemu plików przy użyciu następującego polecenia, gdzie
<pvc-name>jest twoimPersistentVolumeClaim:kubectl describe pv <pvc-name>W danych wyjściowych wyszukaj
fstypeustawioną na XFS.Węzeł roboczy hostujący zasobniki programu SQL Server powinien używać dystrybucji i wersji systemu Linux obsługującej funkcje FUA (począwszy od systemu Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5 lub Ubuntu 18.04).
Jeśli powyższe warunki zostaną spełnione, użyj następujących zalecanych ustawień FUA:
Włącz flagę śledzenia 3979 jako parametr uruchamiania.
Użyj
mssql-conf, aby skonfigurowaćcontrol.writethrough = 1icontrol.alternatewritethrough = 0.