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 ndctl
och 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 intewritethrough
ochalternatewritethrough
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 logikenwritethrough
ochalternatewritethrough
.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änderwritethrough
ochalternatewritethrough
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:
Aktivera Spårningsflagga 3979 som startparameter.
Använd mssql-conf för att konfigurera
control.writethrough = 1
ochcontrol.alternatewritethrough = 0
.
För nästan alla andra konfigurationer som inte uppfyller de tidigare villkoren är den rekommenderade konfigurationen följande:
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.
Använd mssql-conf för att konfigurera
control.writethrough = 1
ochcontrol.alternatewritethrough = 1
.
FUA-stöd för SQL Server-containrar som distribueras i Kubernetes
SQL Server måste använda bevarad monterad lagring och inte
overlayfs
.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 dinPersistentVolumeClaim
:kubectl describe pv <pvc-name>
Leta efter den
fstype
som är inställd på XFS i utdata.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.
Aktivera Spårningsflagga 3979 som startparameter.
Använd mssql-conf för att konfigurera
control.writethrough = 1
ochcontrol.alternatewritethrough = 0
.