Konfigurera beständigt minne (PMEM) för SQL Server i Linux

Gäller för:SQL Server i Linux

Den här artikeln beskriver hur man konfigurerar persistent minne (PMEM) för SQL Server 2019 (15.x) och senare versioner på Linux.

Overview

SQL Server 2019 (15.x) lägger till stöd för persistent minne för att påskynda flera lagringsintensiva operationer.

Med ett PMEM-medvetet filsystem ger minnesmappning (mmap()) användarutrymmesapplikationer direkt åtkomst till fildata. När en minneskarta skapas för en fil kan applikationen utfärda laddnings-/lagringsinstruktioner som kringgår lagringslagret.

Note

Denna direktåtkomst kallas en upplyst filåtkomstmetod ur värdtilläggsapplikationens perspektiv, vilket är hur SQL Server interagerar med värdoperativsystemet med hjälp av SQL Platform Abstraction Layer (SQLPAL).

Den här artikeln visar hur du konfigurerar persistent minne för SQL Server on Linux.

Skapa namnområden för PMEM-enheter

Konfigurera enheterna

I Linux använder du verktyget ndctl.

  • Installera ndctl för att konfigurera PMEM-enheten från Installera NDCTL.
  • Använd ndctl för att skapa ett namnområde. Namnrymder interfolieras mellan PMEM NVDIMMs och kan ge olika typer av användarutrymmesåtkomst till minnesregioner på enheten. fsdax är standard och önskat läge för SQL Server.
ndctl create-namespace -f -e namespace0.0 --mode=fsdax --map=dev

Läget fsdax lagrar metadata per sida i systemminnet. Alternativet --map=dev rekommenderas eftersom det lagrar metadata direkt i namnrymden. Att lagra metadata i minnet med --map=mem är experimentellt.

Använd ndctl för att verifiera namnområdet.

Exempelutdata följer:

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

Skapa och montera PMEM-enhet

Till exempel med XFS:

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

Till exempel med ext4:

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

Tekniska överväganden

  • Blockera allokering på 2 MB för antingen XFS eller ext4, enligt tidigare beskrivning
  • Felaktig justering mellan blockallokering och parametern mmap resulterar i en tyst fall tillbaka till 4 KB
  • Filstorlekarna ska vara en multipel av 2 MB (modulo 2 MB)
  • Inaktivera inte transparenta stora sidor (THP) (aktiveras som standard på de flesta distributioner)

Efter att du har konfigurerat ndctl , skapat och monterat enheten kan du placera databasfiler i den eller skapa en ny databas.

Du kan lagra SQL Server-datafiler (.mdf, ) och tempdb filer på en PMEM-enhet i fsdax läge .ndfmed följande kommando. Använd inte detta läge för att lagra SQL Server-loggfilerna (.ldf), eftersom transaktionsloggen kräver lagring som ger sektoratomära garantier:

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

Tänk på följande innan du anger kartalternativet i föregående kommando:

  • För bästa prestanda vid åtkomst och uppdatering av dessa NVDIMM-sidposter för denna enhet, använd -map=mem
  • Om kapaciteten på NVDIMM är för stor (större än 512 GB), sätt -map=dev, vilket påverkar I/O-genomströmningen och minskar prestandan

För SQL Server-loggfiler på PMEM-enheter, konfigurera PMEM-enheterna att använda sektor-/blocköversättningstabell (BTT). Denna konfiguration ger den sektoratomitet som SQL Server-loggfiler kräver för denna lagringsteknologi. Utför valideringar av arbetsbelastningens prestanda. Jämför prestandan i SQL Server-loggen för din arbetsbelastning mellan denna lösning och de bästa NVMe SSD:erna, och välj sedan den som bäst uppfyller dina behov.

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

Inaktivera beteende för tvingad tömning

Eftersom PMEM-enheter är O_DIRECT (direkt I/O) säkra kan du inaktivera det tvingade flush-beteendet.

Note

Ett lagringssystem kan säkerställa att alla cachade eller stegvisa skrivningar är säkra och hållbara genom att garantera att skrivningar till enheten finns på ett medium som består även över systemkrascher, gränssnittsåterställningar och strömavbrott, och att mediet självt är hårdvaruredundant.

  • Databasfiler (.mdf och .ndf) och transaktionsloggfiler (.ldf) använder inte writethrough och alternatewritethrough som standard i SQL Server 2017 (14.x) CU 6 och senare versioner, eftersom de använder det framtvingade tömningsbeteendet. Trace-flagga 3979 inaktiverar det tvingade flush-beteendet för databas- och transaktionsloggfiler, och använder logiken writethrough och alternatewritethrough .

  • Andra filer som SQL Server öppnar med FILE_FLAG_WRITE_THROUGH, såsom databassnapshots, interna snapshots för databaskonsistenskontroller (DBCC CHECKDB), profilerspårfiler och utökade händelsespårningsfiler, använder och writethroughalternatewritethrough optimeringar.

Mer information om de ändringar som introducerades i SQL Server 2017 (14.x) CU 6 finns i KB 4131496. Mer information om interna detaljer om tvingad enhetstillgång (FUA) finns i FUA-interna detaljer.

SQL Server och kapacitet för tvingad enhetsåtkomst (FUA) i I/O-subsystemet

Vissa Linux-distributioner som stöds implementerar åtkomst till tvingad enhet (FUA) på I/O-undersystemnivå för att säkerställa datahållbarhet. SQL Server utnyttjar den här funktionen för att tillhandahålla effektiva och tillförlitliga I/O-prestanda för Linux-arbetsbelastningar. Mer information om FUA-stöd för Linux-distributioner och dess effekt på SQL Server finns i SQL Server på Linux: Tvingad enhetsåtkomst (FUA) Internals.

Stöd för FUA i I/O-undersystemet introducerades i SUSE Linux Enterprise Server 12 SP5, Red Hat Enterprise Linux 8.0 och Ubuntu 18.04. I SQL Server 2017 (14.x) CU 6 och senare versioner använder du följande konfiguration för att aktivera högpresterande och effektiv I/O med FUA i SQL Server.

Använd den här rekommenderade konfigurationen om följande villkor uppfylls:

  • SQL Server 2017 (14.x) CU 6 och senare versioner

  • Linux-distribution och -version som stöder FUA-funktioner (från och med Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5 eller Ubuntu 18.04)

    Note

    Från och med SQL Server 2025 (17.x) stöds inte SUSE Linux Enterprise Server (SLES).

  • XFS-filsystem för SQL Server-lagring i Linux kernel 4.18 eller senare versioner.

  • ext4-filsystem för SQL Server-lagring i Linux kernel 5.6 eller senare versioner.

    Note

    Använd XFS-filsystemet för att vara värd för SQL Server-data och transaktionsloggfiler när Linux-kernelversionen är lägre än 5.6. Från och med kernelversionen 5.6 kan du välja mellan XFS och ext4 baserat på dina specifika krav.

  • Lagringsundersystem och maskinvara som stöder och är konfigurerad för FUA-kapacitet

Rekommenderad konfiguration:

  1. Aktivera spårningsflagga 3979 som startparameter.

  2. Använd mssql-conf för att konfigurera control.writethrough = 1 och control.alternatewritethrough = 0.

Använd följande rekommenderade konfiguration för nästan alla andra konfigurationer som inte uppfyller de tidigare villkoren:

  1. Aktivera spårningsflagga 3982 som en startparameter (som är standard för SQL Server i Linux-ekosystemet) och se till att spårningsflagga 3979 inte är aktiverad som en startparameter.

  2. Använd mssql-conf för att konfigurera control.writethrough = 1 och control.alternatewritethrough = 1.

FUA-stöd för SQL Server-containrar som distribueras i Kubernetes

  1. SQL Server måste använda bevarad monterad lagring och inte overlayfs.

  2. Lagringen måste använda XFS - eller ext4-filsystemen och bör ha stöd för FUA (ext4 stöder inte FUA på Linux-kerneln tidigare än version 5.6). Innan du aktiverar den här inställningen bör du samarbeta med din Linux-distributions- och lagringsleverantör för att säkerställa att delsystemet för operativsystem och lagring stöder FUA-alternativ. På Kubernetes kan du fråga efter filsystemtypen med hjälp av följande kommando, där <pvc-name> är din PersistentVolumeClaim:

    kubectl describe pv <pvc-name>
    

    Leta efter den fstype som är inställd på XFS i utmatningen.

  3. Arbetsnoden som är värd för SQL Server-poddarna bör använda en Linux-distribution och version som stöder FUA-kapacitet (från och med Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5 eller Ubuntu 18.04).

Om ovanstående villkor uppfylls använder du följande rekommenderade FUA-inställningar:

  1. Aktivera spårningsflagga 3979 som startparameter.

  2. Använd mssql-conf för att konfigurera control.writethrough = 1 och control.alternatewritethrough = 0.