Dela via


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

gäller för:SQL Server – Linux

Den här artikeln beskriver hur du konfigurerar det beständiga minnet (PMEM) för SQL Server 2019 (15.x) och senare versioner i Linux.

Överblick

SQL Server 2019 (15.x) introducerade många minnesinterna funktioner som använder beständigt minne. Den här artikeln beskriver de steg som krävs för att konfigurera beständigt minne för SQL Server i Linux.

Anteckning

Termen upplysning introducerades för att förmedla begreppet att arbeta med ett beständigt minnes-medvetet filsystem. Direkt åtkomst till filsystemet från program för användarutrymme underlättas med hjälp av minnesmappning (mmap()). När en minnesmappning för en fil skapas kan programmet utfärda inläsnings-/lagringsinstruktioner som kringgår I/O-stacken helt. Detta anses vara en "upplyst" filåtkomstmetod ur värdtilläggsprogrammets perspektiv (vilket är den kod som gör att SQLPAL kan interagera med Windows- eller Linux-operativsystemet).

Skapa namnområden för PMEM-enheter

Konfigurera enheterna

I Linux använder du verktyget ndctl.

  • Installera ndctl för att konfigurera PMEM-enheten. Du hittar den här.
  • 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

Vi har valt fsdax läge och använder systemminne för att lagra metadata per sida. Vi rekommenderar att du använder --map=dev. Det här alternativet lagrar metadata på namnområdet direkt. Att lagra metadata i minnet med hjälp av --map=mem är experimentellt just nu.

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 av 2 MB för antingen XFS/EXT4, som tidigare beskrivits.
  • 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)

När enheten har konfigurerats med ndctloch har skapats och monterats, kan du placera databasfiler i den eller skapa en ny databas.

Du kan lagra SQL Server-datafilerna (MDFS, NDFS) och tempdb filer på en PMEM-enhet när de konfigureras med läget fsdax med hjälp av följande kommando. Använd inte detta för att lagra SQL Server-loggfilerna (LDFS), eftersom transaktionsloggen måste finnas på lagring som ger atomiska sektorgarantier:

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 till och uppdatering av dessa NVDIMM-sidposter för den här enheten är det bättre att använda -map=mem
  • Om kapaciteten för NVDIMM är för stor (större än 512 GB) anger du –map=dev, vilket skulle påverka I/O-dataflödet och påverka prestandan

För SQL Server-loggfiler på PMEM-enheter ska du konfigurera PMEM-enheten för att använda sektor-/blocköversättningstabellen (BTT). Detta ger den sektoratomiska egenskap som behövs för SQL Server-loggfiler för denna lagringsteknik. Vi rekommenderar också att du utför valideringar av arbetsbelastningsprestanda. Du kan jämföra SQL Server-loggprestanda för din arbetsbelastning mellan den här lösningen och nvme-SSD:erna i bästa klass och sedan välja den lösning som bäst uppfyller dina behov och ger bättre prestanda.

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.

Obs

Ett lagringssystem kan se till att alla cachelagrade eller mellanlagrade skrivningar anses vara säkra och hållbara genom att garantera att skrivningar som utfärdas till enheten hålls på ett medium som bevaras mellan systemkrascher, gränssnittsåterställningar och strömavbrott, och själva mediet är maskinvaruredundant.

  • 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. Spårningsflagga 3979 inaktiverar användningen av tvingad tömning för databas- och transaktionsloggfiler och använder logiken writethrough och alternatewritethrough.

  • Andra filer som öppnas med hjälp av FILE_FLAG_WRITE_THROUGH i SQL Server, till exempel databasögonblicksbilder, interna ögonblicksbilder för databaskonsekvenskontroller (DBCC CHECKDB), profilerarspårningsfiler och utökade händelsespårningsfiler, använder writethrough och alternatewritethrough 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.

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

Vissa versioner av Linux-distributioner som stöds har stöd för FUA I/O-undersystem, vilket ger datahållbarhet. SQL Server använder FUA-funktionen för att tillhandahålla mycket effektiv och tillförlitlig I/O för SQL Server-arbetsbelastningar. Mer information om FUA-stöd för Linux-distribution och dess effekt på SQL Server finns i SQL Server On Linux: Forced Unit Access (FUA) Internals.

SUSE Linux Enterprise Server 12 SP5, Red Hat Enterprise Linux 8.0 och Ubuntu 18.04 introducerade stöd för FUA-funktioner i I/O-undersystemet. Om du använder SQL Server 2017 (14.x) CU 6 och senare versioner bör du använda följande konfiguration för högpresterande och effektiv I/O-implementering med FUA av 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)

  • XFS-filsystem för SQL Server-lagring

  • Lagringsundersystem och/eller 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.

För nästan alla andra konfigurationer som inte uppfyller de tidigare villkoren är den rekommenderade konfigurationen följande:

  1. Aktivera Spårningsflagga 3982 som startparameter (som är standard för SQL Server i Linux-ekosystemet) och kontrollera 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-filsystemet och bör ha stöd för FUA. Innan du aktiverar den här inställningen bör du arbeta 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 utdata.

  3. Arbetsnoden som är värd för SQL Server-poddarna ska 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 kan du använda 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.