Delen via


Permanent geheugen (PMEM) configureren voor SQL Server in Linux

Van toepassing op:SQL Server - Linux

In dit artikel wordt beschreven hoe u het permanente geheugen (PMEM) configureert voor SQL Server 2019 (15.x) en latere versies op Linux.

Overzicht

SQL Server 2019 (15.x) heeft veel in-memory functies geïntroduceerd die gebruikmaken van permanent geheugen. In dit artikel worden de stappen beschreven die nodig zijn voor het configureren van permanent geheugen voor SQL Server in Linux.

Opmerking

De term inzicht werd geïntroduceerd om het concept over te brengen van werken met een persistent geheugenbewust bestandssysteem. Directe toegang tot het bestandssysteem vanuit gebruikersruimtetoepassingen wordt mogelijk gemaakt met behulp van geheugentoewijzing (mmap()). Wanneer een geheugentoewijzing voor een bestand wordt gemaakt, kan de toepassing instructies voor laden/opslaan uitgeven om de I/O-stack volledig te omzeilen. Dit wordt beschouwd als een 'verlichte' methode voor bestandstoegang vanuit het perspectief van de hostextensietoepassing (dit is de code waarmee SQLPAL kan communiceren met het Windows- of Linux-besturingssysteem).

Naamruimten maken voor PMEM-apparaten

De apparaten configureren

Gebruik in Linux het ndctl hulpprogramma.

  • Installeer ndctl om het PMEM-apparaat te configureren. U kunt het hier vinden.
  • Gebruik ndctl om een naamruimte te maken. Naamruimten zijn afgewisseld over PMEM NVDIMMs en kunnen verschillende soorten toegang vanuit de gebruikersruimte bieden tot geheugenregio's op het apparaat. fsdax is de standaardmodus en de gewenste modus voor SQL Server.
ndctl create-namespace -f -e namespace0.0 --mode=fsdax --map=dev

We hebben de modus gekozen fsdax en gebruiken systeemgeheugen om metagegevens per pagina op te slaan. We adviseren --map=dev te gebruiken. Met deze optie worden de metagegevens rechtstreeks op de naamruimte opgeslagen. Het opslaan van metagegevens in het geheugen met behulp van --map=mem is op dit moment experimenteel.

Gebruik ndctl om de naamruimte te verifiëren.

Voorbeelduitvoer volgt:

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

PMEM-apparaat maken en koppelen

Bijvoorbeeld met XFS:

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

Bijvoorbeeld met ext4:

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

Technische overwegingen

  • Blokkeringstoewijzing van 2 MB voor XFS of ext4, zoals eerder beschreven
  • Onjuiste uitlijning tussen bloktoewijzing en mmap resulteert in stille terugval naar 4 kB
  • Bestandsgrootten moeten een veelvoud van 2 MB zijn (modulo 2 MB)
  • Schakel transparante grote pagina's (THP) niet uit (standaard ingeschakeld voor de meeste software-distributies)

Zodra het apparaat is geconfigureerd met ndctl, gemaakt en gekoppeld, kunt u er databasebestanden in plaatsen of een nieuwe database maken.

U kunt de SQL Server-gegevensbestanden (MDFS, NDFS) en tempdb bestanden opslaan op een PMEM-apparaat wanneer deze zijn geconfigureerd met de modus fsdax met behulp van de volgende opdracht. Gebruik dit niet om de SQL Server-logboekbestanden (LDFS)-bestanden op te slaan, omdat het transactielogboek in opslag moet zijn die atomische sectorgaranties biedt:

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

Houd rekening met de volgende punten voordat u de kaartoptie in de voorgaande opdracht instelt:

  • Voor de beste prestaties bij het openen en bijwerken van deze NVDIMM-paginavermeldingen voor dit apparaat, is het raadzaam om -map=mem te gebruiken.
  • Als de capaciteit van de NVDIMM te groot is (groter dan 512 GB), stel dan de –map=dev in, wat de I/O-doorvoer zou beïnvloeden en de prestaties belemmeren.

Voor SQL Server-logboekbestanden op PMEM-apparaten configureert u de PMEM-apparaten om de sector/blokvertalingstabel (BTT) te gebruiken. Dit biedt de benodigde sector atomiciteit voor SQL Server-logboekbestanden voor deze technologie van opslagapparaten. We raden u ook aan om prestatievalidaties voor workloads uit te voeren. U kunt de prestaties van het SQL Server-logboek voor uw workload vergelijken tussen deze oplossing en de beste NVMe-SSD's en vervolgens de oplossing selecteren die het beste aan uw behoeften voldoet en betere prestaties biedt.

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

Gedrag voor geforceerd leegmaken uitschakelen

Omdat PMEM-apparaten (directe I/O) veilig zijn O_DIRECT , kunt u het gedrag voor geforceerde leegmaken uitschakelen.

Opmerking

Een opslagsysteem kan ervoor zorgen dat schrijfbewerkingen in de cache of gefaseerde schrijfbewerkingen als veilig en duurzaam worden beschouwd door te garanderen dat schrijfbewerkingen die naar het apparaat worden verzonden, worden opgeslagen op een medium dat blijft functioneren bij systeemcrashes, interfaceresets en stroomstoringen, en dat het medium zelf hardware-redundant is.

  • Databasebestanden (.mdf) en transactielogboekbestanden (.ndf) maken standaard geen gebruik van .ldf en writethrough in SQL Server 2017 (14.x) CU 6 en latere versies, omdat ze het geforceerde spoelgedrag gebruiken. Traceringsvlag 3979 schakelt het gebruik van het geforceerde flush-gedrag voor database- en transactielogboekbestanden uit en maakt gebruik van de writethrough en alternatewritethrough logica.

  • Andere bestanden die worden geopend met behulp van FILE_FLAG_WRITE_THROUGH SQL Server, zoals momentopnamen van databases, interne momentopnamen voor databaseconsistentiecontroles (DBCC CHECKDB), profilertraceringsbestanden en uitgebreide gebeurtenistraceringsbestanden, gebruiken de writethrough en alternatewritethrough optimalisaties.

Zie KB 4131496 voor meer informatie over de wijzigingen die zijn geïntroduceerd in SQL Server 2017 (14.x) CU 6. Raadpleeg FUA-internals voor meer informatie over geforceerde eenheidstoegang (FUA).

"Capaciteit van het I/O-subsysteem voor SQL Server en Geforceerde eenheidstoegang (FUA)"

Bepaalde versies van ondersteunde Linux-distributies bieden ondersteuning voor FUA I/O-subsysteemfunctionaliteit, die duurzaamheid van gegevens biedt. SQL Server maakt gebruik van de FUA-mogelijkheid om zeer efficiënte en betrouwbare I/O te bieden voor SQL Server-workloads. Zie voor meer informatie over FUA-ondersteuning door Linux-distributie en het effect ervan op SQL Server SQL Server on Linux: Forced Unit Access (FUA) Internals.

SUSE Linux Enterprise Server 12 SP5, Red Hat Enterprise Linux 8.0 en Ubuntu 18.04 hebben ondersteuning geïntroduceerd voor FUA-functionaliteit in het I/O-subsysteem. Als u SQL Server 2017 (14.x) CU 6 en latere versies gebruikt, moet u de volgende configuratie gebruiken voor krachtige en efficiënte I/O-implementatie met FUA door SQL Server.

Gebruik deze aanbevolen configuratie als aan de volgende voorwaarden wordt voldaan.

  • SQL Server 2017 (14.x) CU 6 en latere versies

  • Linux-distributie en -versie die ONDERSTEUNING biedt voor FUA-functionaliteit (te beginnen met Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5 of Ubuntu 18.04)

  • XFS-bestandssysteem voor SQL Server-opslag, op Linux-kernel 4.18 of hoger.

  • ext4-bestandssysteem voor SQL Server-opslag, op Linux-kernel 5.6 of hoger.

    Opmerking

    U moet het XFS-bestandssysteem gebruiken voor het hosten van SQL Server-gegevens- en transactielogboekbestanden wanneer de Linux-kernelversie lager is dan 5.6. Vanaf kernelversie 5.6 kunt u kiezen tussen XFS en ext4 op basis van uw specifieke vereisten.

  • Opslagsubsysteem en/of hardware die ondersteuning biedt en is geconfigureerd voor FUA-functionaliteit

Aanbevolen configuratie:

  1. Schakel traceervlag 3979 in als een opstartparameter.

  2. Gebruik mssql-conf om control.writethrough = 1 en control.alternatewritethrough = 0te configureren.

Voor bijna alle andere configuraties die niet aan de vorige voorwaarden voldoen, is de aanbevolen configuratie als volgt:

  1. Schakel traceringsvlag 3982 in als opstartparameter (de standaardwaarde voor SQL Server in het Linux-ecosysteem) en zorg ervoor dat traceringsvlag 3979 niet is ingeschakeld als opstartparameter.

  2. Gebruik mssql-conf om control.writethrough = 1 en control.alternatewritethrough = 1te configureren.

FUA-ondersteuning voor SQL Server-containers die zijn geïmplementeerd in Kubernetes

  1. De SQL Server moet permanente gekoppelde opslag gebruiken en niet overlayfs.

  2. De opslag moet gebruikmaken van de XFS - of ext4-bestandssysteemen en moet FUA ondersteunen (ext4 biedt geen ondersteuning voor FUA op de Linux-kernel ouder dan versie 5.6). Voordat u deze instelling inschakelt, moet u samenwerken met uw Linux-distributie- en opslagleverancier om ervoor te zorgen dat het besturingssysteem en het opslagsubsysteem FUA-opties ondersteunt. In Kubernetes kunt u een query uitvoeren op het bestandssysteemtype met behulp van de volgende opdracht, waarbij <pvc-name> uw PersistentVolumeClaimis:

    kubectl describe pv <pvc-name>
    

    Zoek in de uitvoer naar fstype die is ingesteld op XFS.

  3. Het werkknooppunt dat als host fungeert voor de SQL Server-pods, moet een Linux-distributie en -versie gebruiken die ONDERSTEUNING biedt voor FUA-functionaliteit (te beginnen met Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5 of Ubuntu 18.04).

Als aan de bovenstaande voorwaarden wordt voldaan, kunt u de volgende aanbevolen FUA-instellingen gebruiken.

  1. Schakel traceringsvlag 3979 in als opstartparameter.

  2. Gebruik mssql-conf om control.writethrough = 1 en control.alternatewritethrough = 0te configureren.