Udostępnij za pośrednictwem


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ów writethrough i alternatewritethrough 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 logiki writethrough i alternatewritethrough.

  • 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 optymalizacji alternatewritethrough.

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:

  1. Włącz flagę śledzenia 3979 jako parametr startowy.

  2. Użyj mssql-conf, aby skonfigurować control.writethrough = 1 i control.alternatewritethrough = 0.

W przypadku prawie wszystkich innych konfiguracji, które nie spełniają poprzednich warunków, zalecana konfiguracja jest następująca:

  1. 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.

  2. Użyj mssql-conf, aby skonfigurować control.writethrough = 1 i control.alternatewritethrough = 1.

Obsługa fua dla kontenerów programu SQL Server wdrożonych na platformie Kubernetes

  1. Program SQL Server musi używać trwałej zamontowanej pamięci, a nie overlayfs.

  2. 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 twoim PersistentVolumeClaim:

    kubectl describe pv <pvc-name>
    

    W danych wyjściowych wyszukaj fstype ustawioną na XFS.

  3. 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.

  1. Włącz flagę śledzenia 3979 jako parametr startowy.

  2. Użyj mssql-conf, aby skonfigurować control.writethrough = 1 i control.alternatewritethrough = 0.