Konfigurace trvalé paměti (PMEM) pro SQL Server v Linuxu

Platí pro:SQL Server na Linuxu

Tento článek popisuje, jak nastavit perzistentní paměť (PMEM) pro SQL Server 2019 (15.x) a pozdější verze na Linuxu.

Overview

SQL Server 2019 (15.x) přidává podporu perzistentní paměti pro zrychlení několika operací náročných na úložiště.

U souborového systému s vědomím PMEM poskytuje mapování paměti (mmap()) aplikacím uživatelského prostoru přímý přístup k datům souborů. Když je pro soubor vytvořena paměťová mapa, aplikace může zadat instrukce pro načítání/uložení, které obcházejí úložnou vrstvu.

Note

Tento přímý přístup se nazývá osvícený přístup k souborům z pohledu aplikace hostitelského rozšíření, což je způsob, jakým SQL Server komunikuje s hostitelským operačním systémem pomocí SQL Platform Abstraction Layer (SQLPAL).

Tento článek vám ukáže, jak nastavit perzistální paměť pro SQL Server on Linux.

Vytvořte obory názvů pro zařízení PMEM

Konfigurace zařízení

V Linuxu použijte nástroj ndctl.

  • Nainstalujte ndctl pro konfiguraci zařízení PMEM s instalací NDCTL.
  • K vytvoření oboru názvů použijte ndctl. Názvové prostory jsou prokládány napříč NVDIMM PMEM a mohou poskytovat různé typy přístupu z uživatelského prostoru k paměťovým oblastem na zařízení. fsdax je výchozí a požadovaný režim pro SQL Server.
ndctl create-namespace -f -e namespace0.0 --mode=fsdax --map=dev

Režim ukládá fsdax metadata na stránku do systémové paměti. Tato --map=dev možnost je doporučena, protože ukládá metadata přímo do jmenného prostoru. Ukládání metadat do paměti s je --map=mem experimentální.

K ověření oboru názvů použijte ndctl.

Ukázkový výstup je následující:

# ndctl list -N
{
  "dev":"namespace0.0",
  "mode":"fsdax",
  "map":"dev",
  "size":4294967296,
  "sector_size":512,
  "blockdev":"pmem0",
  "numa_node":0
}

Vytvoření a připojení zařízení PMEM

Například s XFS:

mkfs.xfs -f /dev/pmem0
mount -o dax,noatime /dev/pmem0 /mnt/dax
xfs_io -c "extsize 2m" /mnt/dax

Například s ext4:

mkfs.ext4 -b 4096 -E stride=512 -F /dev/pmem0
mount -o dax,noatime /dev/pmem0 /mnt/dax

Technické aspekty

  • Přidělení bloku 2 MB pro XFS nebo ext4, jak je popsáno výše
  • Nesprávné zarovnání mezi přidělením bloku a mmap vede k tichému návratu na 4 kB
  • Velikosti souborů by měly být násobkem 2 MB (modulo 2 MB)
  • Nezakazujte transparentní obrovské stránky (THP) (ve výchozím nastavení jsou ve většině distribucí povoleny).

Poté, co zařízení nakonfigurujete, vytvoříte a namontujete ndctl , můžete do něj vložit databázové soubory nebo vytvořit novou databázi.

Datové soubory SQL Server (.mdf, ) a tempdb soubory můžete uložit na zařízení PMEM v fsdax režimu pomocí následujícího .ndfpříkazu. Tento režim nepoužívejte k ukládání souborů SQL Server log (.ldf), protože transakční log vyžaduje úložiště poskytující sektorové atomické záruky:

ndctl create-namespace -f -e namespace0.0 --mode=fsdax --map=dev

Před nastavením možnosti mapování v předchozím příkazu mějte na paměti následující body:

  • Pro nejlepší výkon při přístupu a aktualizaci těchto položek NVDIMM pro toto zařízení použijte -map=mem
  • Pokud je kapacita NVDIMM příliš velká (více než 512 GB), nastavte -map=dev, což ovlivňuje propustnost I/O a snižuje výkon

Pro SQL Server log soubory na PMEM zařízeních nakonfigurujte PMEM zařízení tak, aby používala sektor/Block Translation Table (BTT). Tato konfigurace poskytuje sektorovou atomicitu, kterou SQL Server logové soubory vyžadují pro tuto technologii úložiště. Provádějte validace výkonu pracovní zátěže. Porovnejte výkon logů SQL Server pro vaši pracovní zátěž mezi tímto řešením a špičkovými NVMe SSD a poté vyberte ten, který nejlépe vyhovuje vašim potřebám.

ndctl create-namespace -f -e namespace0.0 --mode= sector

Zakázat vynucené vyprázdnění

Vzhledem k tomu, že zařízení PMEM jsou bezpečné pro O_DIRECT (přímé I/O operace), můžete zakázat vynucené vyprázdnění.

Note

Úložný systém může zajistit, že jakékoli cacheované nebo fázované zápisy jsou bezpečné a odolné tím, že garantuje, že zápisy do zařízení budou umístěny na médiu, které přetrvává i přes pády systému, resety rozhraní a výpadky napájení, a že samotné médium je hardwarově redundantní.

  • Soubory databáze (.mdf a .ndf) a transakčního protokolu (.ldf) ve výchozím nastavení nepoužívají writethrough a alternatewritethrough v SQL Serveru 2017 (14.x) CU 6 a novějších verzích, protože používají chování vynuceného vyprázdnění. Trace flag 3979 deaktivuje nucené vyčištění pro databázové a transakční logové soubory a používá logiku writethrough and alternatewritethrough .

  • Další soubory, které SQL Server otevírá s FILE_FLAG_WRITE_THROUGH, jako jsou snímky databáze, interní snímky pro kontrolu konzistence databáze (DBCC CHECKDB), profilerové trace soubory a rozšířené event trace soubory, využívají writethrough optimalizace a alternatewritethrough .

Další informace o změnách zavedených v SQL Serveru 2017 (14.x) CU 6 naleznete v článku KB 4131496. Další informace o vnitřních mechanismech vynuceného přístupu k jednotce (FUA) naleznete v FUA mechanismy.

Funkce I/O subsystému SQL Server a vynucený přístup k jednotkám (FUA)

Některé podporované linuxové distribuce implementují vynucený přístup k jednotce (FUA) na úrovni subsystému vstupně-výstupních operací, aby se zajistila stálost dat. SQL Server tuto funkci využívá k zajištění efektivního a spolehlivého výkonu vstupně-výstupních operací pro linuxové úlohy. Další informace o podpoře FUA napříč linuxovými distribucemi a jejím účinkem na SQL Server najdete v tématu SQL Server v Linuxu: Interní informace o vynuceném přístupu k jednotce (FUA).

Podpora FUA v subsystému vstupně-výstupních operací byla zavedena v systému SUSE Linux Enterprise Server 12 SP5, Red Hat Enterprise Linux 8.0 a Ubuntu 18.04. V SQL Serveru 2017 (14.x) CU 6 a novějších verzích použijte následující konfiguraci k povolení vysoce výkonných a efektivních vstupně-výstupních operací s FUA na SQL Serveru.

Tuto doporučenou konfiguraci použijte, pokud jsou splněny následující podmínky:

  • SQL Server 2017 (14.x) CU 6 a novější verze

  • Distribuce a verze Linuxu, která podporuje funkci FUA (počínaje verzí Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5 nebo Ubuntu 18.04)

    Note

    Od verze SQL Server 2025 (17.x) se nepodporuje SUSE Linux Enterprise Server (SLES).

  • Systém souborů XFS pro úložiště SQL Serveru v linuxovém jádru 4.18 nebo novějších verzích.

  • Systém souborů ext4 pro úložiště SQL Serveru v linuxovém jádru 5.6 nebo novějších verzích.

    Note

    Systém souborů XFS slouží k hostování souborů SQL Serveru a souborů transakčních protokolů, pokud je verze jádra Linuxu nižší než 5.6. Počínaje jádrem verze 5.6 si můžete vybrat mezi XFS a ext4 na základě vašich konkrétních požadavků.

  • Subsystém úložiště a hardware, který podporuje a je nakonfigurovaný pro funkce FUA

Doporučená konfigurace:

  1. Povolte příznak trasování 3979 jako spouštěcí parametr.

  2. Slouží mssql-conf ke konfiguraci control.writethrough = 1 a control.alternatewritethrough = 0.

Pro téměř všechny ostatní konfigurace, které nesplňují předchozí podmínky, použijte následující doporučenou konfiguraci:

  1. Povolte příznak trasování 3982 jako spouštěcí parametr (což je výchozí hodnota pro SQL Server v ekosystému Linuxu) a ujistěte se, že příznak trasování 3979 není povolený jako spouštěcí parametr.

  2. Slouží mssql-conf ke konfiguraci control.writethrough = 1 a control.alternatewritethrough = 1.

Podpora FUA pro kontejnery SQL Serveru nasazené v Kubernetes

  1. SQL Server musí používat trvalé připojené úložiště, a nikoli overlayfs.

  2. Úložiště musí používat systémy souborů XFS nebo ext4 a měly by podporovat FUA (ext4 nepodporuje FUA v linuxovém jádru starším než verze 5.6). Před povolením tohoto nastavení ve spolupráci s dodavatelem linuxové distribuce a úložiště se ujistěte, že operační systém a subsystém úložiště podporují možnosti FUA. V Kubernetes můžete zadat dotaz na typ systému souborů pomocí následujícího příkazu, kde <pvc-name> je vaše PersistentVolumeClaim:

    kubectl describe pv <pvc-name>
    

    Ve výstupu vyhledejte fstype, která je nastavená na XFS.

  3. Pracovní uzel hostující pody SQL Serveru by měl používat distribuci a verzi Linuxu, která podporuje funkci FUA (počínaje red hat Enterprise Linuxem 8.0, SUSE Linux Enterprise Serverem 12 SP5 nebo Ubuntu 18.04).

Pokud jsou splněny předchozí podmínky, použijte následující doporučená nastavení FUA:

  1. Povolte příznak trasování 3979 jako spouštěcí parametr.

  2. Slouží mssql-conf ke konfiguraci control.writethrough = 1 a control.alternatewritethrough = 0.