Sdílet prostřednictvím


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

platí pro:SQL Server – Linux

Tento článek popisuje, jak nakonfigurovat trvalou paměť (PMEM) pro SQL Server 2019 (15.x) a novější verze v Linuxu.

Přehled

SQL Server 2019 (15.x) zavedl mnoho funkcí v paměti, které používají trvalou paměť. Tento článek popisuje kroky potřebné ke konfiguraci trvalé paměti pro SQL Server v Linuxu.

Poznámka

Termín enlightenment byl představen, aby vyjádřil koncept práce se souborovým systémem, který má povědomí o trvalé paměti. Přímý přístup k systému souborů z uživatelských aplikací se usnadňuje pomocí mapování paměti (mmap()). Když se vytvoří mapování paměti pro soubor, může aplikace vydat pokyny k načtení nebo uložení, které zcela obcházejí zásobník vstupně-výstupních operací. To je považováno za "osvícenou" metodu přístupu k souborům z pohledu aplikace rozšíření hostitele (což je kód, který umožňuje SQLPAL interakci s operačním systémem Windows nebo 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. Najdete ho zde.
  • 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

Zvolili jsme režim fsdax a k ukládání metadat na stránce používáme systémovou paměť. Doporučujeme používat --map=dev. Tato možnost ukládá metadata přímo do oboru názvů. Ukládání metadat do paměti pomocí --map=mem je v tuto chvíli 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/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í je ve většině distribucí povoleno).

Jakmile je zařízení nakonfigurované s ndctl, vytvořené a připojené, můžete do něj umístit soubory databáze nebo vytvořit novou databázi.

Datové soubory SQL Serveru (MDFS, NDFS) a tempdb soubory můžete uložit na zařízení PMEM, když je nakonfigurovaný pomocí režimu fsdax pomocí následujícího příkazu. Nepoužívejte to k ukládání souborů protokolu SQL Serveru (LDFS), protože transakční protokol musí být v úložišti, které poskytuje záruky atomických sektorů:

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:

  • Nejlepšího výkonu při přístupu k těmto položkám stránky NVDIMM a jejich aktualizaci pro toto zařízení dosáhnete nejlépe použitím -map=mem.
  • Pokud je kapacita zařízení NVDIMM příliš velká (větší než 512 GB), nastavte –map=dev, což by mělo vliv na propustnost vstupně-výstupních operací a stymie výkonu.

V případě souborů protokolu SQL Serveru na zařízeních PMEM nastavte zařízení PMEM k použití tabulky překladů sektorů/bloků (BTT). To poskytuje potřebnou nedělitelnost sektorů pro soubory protokolů SQL Serveru pro tuto technologii úložných zařízení. Doporučujeme také provádět ověření výkonu úloh. Můžete porovnat výkon protokolu SQL Serveru pro vaši úlohu mezi tímto řešením a nejlepšími disky SSD NVMe ve třídě a pak vybrat řešení, které nejlépe vyhovuje vašim potřebám, a zajistit lepší výkon.

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

Poznámka

Systém úložiště může zajistit, aby všechny zápisy uložené v mezipaměti nebo fázované zápisy byly považovány za bezpečné a odolné, a to tím, že zaručuje, že se zápisy vydané do zařízení uchovávají na médiu, které se zachová v případě selhání systému, resetování rozhraní a selhání napájení a 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í. Příznak trasování 3979 zakáže vynucené vyprázdnění pro soubory databázového a transakčního protokolu a používá logiku writethrough a alternatewritethrough.

  • Jiné soubory, které jsou otevřeny pomocí FILE_FLAG_WRITE_THROUGH na SQL Serveru, jako jsou snímky databáze, interní snímky kontrol konzistence databáze (DBCC CHECKDB), trasovací soubory profileru a rozšířené soubory trasování událostí, používají writethrough a optimalizace 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 interních mechanismech vynuceného přístupu k jednotce (FUA) najdete v tématu FUA interní mechanismy.

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

Některé verze podporovaných distribucí Linuxu poskytují podporu funkcí subsystému FUA I/O, která poskytuje odolnost dat. SQL Server využívá funkci FUA k zajištění vysoce efektivních a spolehlivých vstupně-výstupních operací pro úlohy SQL Serveru. Další informace o podpoře FUA distribucí Linuxu 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).

SUSE Linux Enterprise Server 12 SP5, Red Hat Enterprise Linux 8.0 a Ubuntu 18.04 zavedly podporu funkcí FUA v subsystému vstupně-výstupních operací. Pokud používáte SQL Server 2017 (14.x) CU 6 a novější verze, měli byste použít následující konfiguraci pro výkonnou a efektivní implementaci vstupně-výstupních operací s FUA sql Serverem.

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)

  • Systém souborů XFS pro úložiště SQL Serveru

  • Subsystém úložiště nebo 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. Ke konfiguraci a použijte mssql-conf .

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

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

  2. Ke konfiguraci a použijte mssql-conf .

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ém souborů XFS a měl by podporovat FUA. Před povolením tohoto nastavení byste měli spolupracovat s dodavatelem linuxové distribuce a úložiště, abyste zajistili, ž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 linuxovou distribuci a verzi, 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 výše uvedené podmínky, můžete použít následující doporučená nastavení FUA.

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

  2. Ke konfiguraci a použijte mssql-conf .