Konfigurowanie pamięci trwałej (PMEM) dla programu SQL Server w systemie Linux
Dotyczy:programu SQL Server — Linux
W tym artykule opisano sposób konfigurowania pamięci trwałej (PMEM) dla programu SQL Server 2019 (15.x) i nowszych wersji w systemie Linux.
Przegląd
Program SQL Server 2019 (15.x) wprowadził wiele funkcji w pamięci, które używają pamięci trwałej. W tym artykule opisano kroki wymagane do skonfigurowania pamięci trwałej dla programu SQL Server w systemie Linux.
Notatka
Termin "uświadomienie" został wprowadzony w celu przekazania koncepcji pracy z systemem plików świadomym trwałej pamięci. Bezpośredni dostęp do systemu plików z aplikacji przestrzeni użytkownika jest ułatwiany przy użyciu mapowania pamięci (mmap()
). Po utworzeniu mapowania pamięci dla pliku, aplikacja może wykonywać instrukcje ładowania i przechowywania, całkowicie pomijając stos I/O. Jest to uważane za "zaawansowaną" metodę dostępu do plików z perspektywy aplikacji rozszerzenia hosta (czyli kodu, który umożliwia SQLPAL interakcję z systemem operacyjnym Windows lub Linux).
Tworzenie przestrzeni nazw dla urządzeń PMEM
Konfigurowanie urządzeń
W systemie Linux użyj narzędzia ndctl
.
- Zainstaluj
ndctl
, aby skonfigurować urządzenie PMEM. Znajdziesz to tutaj. - 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.fsdax
jest domyślnym i żądanym trybem dla programu SQL Server.
ndctl create-namespace -f -e namespace0.0 --mode=fsdax --map=dev
Wybraliśmy tryb fsdax
i używamy pamięci systemowej do przechowywania metadanych poszczególnych stron. Zalecamy używanie --map=dev
. Ta opcja przechowuje metadane bezpośrednio w przestrzeni nazw. Przechowywanie metadanych w pamięci przy użyciu --map=mem
jest obecnie 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
- Zablokuj alokację 2 MB dla systemu XFS lub EXT4, zgodnie z wcześniejszym opisem
- Niezgodność między alokacją bloków a
mmap
powoduje 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 skonfigurowaniu, utworzeniu i zamontowaniu urządzenia przy użyciu ndctl
, można umieścić w nim pliki bazy danych lub utworzyć nową bazę danych.
Pliki danych programu SQL Server (MDFS, NDFS) i pliki tempdb
można przechowywać na urządzeniu PMEM podczas konfigurowania z trybem fsdax
przy użyciu następującego polecenia. Nie należy tego używać do przechowywania plików dziennika programu SQL Server (LDFS), ponieważ dziennik transakcji musi znajdować się w magazynie zapewniającym atomowe gwarancje sektora.
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 uzyskiwania dostępu do tych wpisów na stronie NVDIMM i aktualizowania ich dla tego urządzenia, zaleca się użycie
-map=mem
- Jeśli pojemność NVDIMM jest zbyt duża (większa niż 512 GB), ustaw
–map=dev
, co wpłynie na przepływność we/wy i pogorszy wydajność.
W przypadku plików dziennika programu SQL Server na urządzeniach PMEM należy skonfigurować urządzenia PMEM do użycia tabeli translacji sektorów/Bloków (BTT). Zapewnia to wymaganą niepodzielność sektora dla plików dzienników programu SQL Server dla tej technologii urządzeń magazynujących. Zalecamy również przeprowadzenie walidacji wydajności obciążenia. Możesz porównać wydajność dziennika programu SQL Server dla obciążenia między tym rozwiązaniem i najlepszymi dyskami SSD NVMe, a następnie wybrać rozwiązanie, które najlepiej spełnia Twoje potrzeby i zapewnia lepszą wydajność.
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.
Notatka
System magazynowania może zapewnić, że wszystkie buforowane lub etatowe zapisy są uważane za bezpieczne i trwałe, gwarantując, że zapisy wysłane do urządzenia są przechowywane na nośniku, który zachowuje swoje właściwości w przypadku awarii systemu, resetowania interfejsu i awarii zasilania, a sam nośnik jest nadmiarowy sprzętowo.
Pliki bazy danych (
.mdf
i.ndf
) i dziennika transakcji (.ldf
) nie używają plikówwritethrough
ialternatewritethrough
domyś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 korzystanie z wymuszonego zachowania opróżniania dla plików dziennika bazy danych i transakcji oraz używa logikiwritethrough
ialternatewritethrough
.Inne pliki otwierane przy użyciu
FILE_FLAG_WRITE_THROUGH
w programie SQL Server, takie jak migawki bazy danych, wewnętrzne migawki na potrzeby kontroli spójności bazy danych (DBCC CHECKDB
), pliki śledzenia profilera i rozszerzone pliki śledzenia zdarzeń, używająwritethrough
i optymalizacjialternatewritethrough
.
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.
Możliwości podsystemu we/wy programu SQL Server i wymuszonego dostępu jednostek (FUA)
Niektóre wersje obsługiwanych dystrybucji systemu Linux zapewniają obsługę funkcji podsystemu we/wy FUA, która zapewnia trwałość danych. Program SQL Server używa funkcji FUA, aby zapewnić wysoce wydajne i niezawodne operacje we/wy dla obciążeń programu SQL Server. Aby uzyskać więcej informacji na temat obsługi FUA przez dystrybucję systemu Linux i jego wpływu na działanie programu SQL Server, zobacz SQL Server on Linux: Forced Unit Access (FUA) Internals.
SUSE Linux Enterprise Server 12 SP5, Red Hat Enterprise Linux 8.0 i Ubuntu 18.04 wprowadziły obsługę funkcji FUA w podsystemie we/wy. Jeśli używasz programu SQL Server 2017 (14.x) CU 6 i nowszych wersji, należy użyć następującej konfiguracji w celu zapewnienia wysokiej wydajności i wydajnej implementacji WE/WY z użyciem FUA przez SQL Server.
Użyj tej zalecanej konfiguracji, jeśli zostaną spełnione 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)
System plików XFS dla magazynu programu SQL Server
Podsystem magazynowania i/lub sprzęt, który obsługuje i jest skonfigurowany do obsługi funkcji FUA
Zalecana konfiguracja:
Włącz flagę śledzenia 3979 jako parametr startowy.
Użyj mssql-conf, aby skonfigurować
control.writethrough = 1
icontrol.alternatewritethrough = 0
.
W przypadku prawie wszystkich innych konfiguracji, które nie spełniają poprzednich warunków, zalecana konfiguracja jest następująca:
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 = 1
icontrol.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
.Pamięć masowa musi używać systemu plików XFS i powinna obsługiwać FUA. Przed włączeniem tego ustawienia należy współpracować z dostawcą dystrybucji Linuksa i dostawcą pamięci masowej, aby upewnić się, że system operacyjny i podsystem pamięci masowej obsługują 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
fstype
ustawioną 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, możesz użyć następujących zalecanych ustawień FUA.
Włącz flagę śledzenia 3979 jako parametr startowy.
Użyj mssql-conf, aby skonfigurować
control.writethrough = 1
icontrol.alternatewritethrough = 0
.