Dela via


Hybridbuffertpool

Gäller för: SQL Server 2019 (15.x) och senare versioner

Hybridbuffertpoolen gör det möjligt för buffertpoolobjekt att referera till datasidor i databasfiler som finns på beständiga minnesenheter (PMEM), i stället för att behöva hämta kopior av datasidorna från disken och cachelagra dem i flyktig DRAM. Den här funktionen introducerades i SQL Server 2019 (15.x) och förbättras ytterligare i SQL Server 2022 (16.x).

Diagram som visar buffertpoolen, med och utan hybridbuffertpoolen aktiverad.

Beständigt minne (PMEM) enheter är byteadresserbara och om ett dax-filsystem med beständigt minne (t.ex. XFS, EXT4 eller NTFS) används kan filer i filsystemet nås med hjälp av vanliga filsystem-API:er i operativsystemet. Alternativt kan SQL Server utföra det som kallas belastnings- och lagringsåtgärder mot minneskartor för filerna på PMEM-enheten. Detta gör att PMEM-medvetna program som SQL Server kan komma åt filer på enheten utan att passera den traditionella lagringsstacken.

Hybridbuffertpoolen använder den här möjligheten att utföra belastnings- och lagringsåtgärder mot minnesmappade filer för att använda PMEM-enheten både som cacheminne för buffertpoolen och en lagringsplats för databasfilerna. Detta skapar en unik situation där både en logisk läsning och en fysisk läsning blir i stort sett samma åtgärd. Beständiga minnesenheter är tillgängliga via minnesbussen precis som vanlig flyktig DRAM.

Som standard cachelagras endast rena datasidor i PMEM-modulen för hybridbuffertpoolen. För att en sida ska kunna ändras och markeras som smutsig måste den kopieras från PMEM-enheten till en DRAM-buffertpool, ändras och så småningom skrivs en kopia av den ändrade sidan från DRAM tillbaka till PMEM-modulen. Då kan den markeras som ren igen. Den här processen sker med normala bakgrundsåtgärder som kontrollpunkt eller lat skrivare, som om PMEM-modulen var en standardblockeringsenhet.

Funktionen för hybridbuffertpoolen är tillgänglig för både Windows och Linux. PMEM-enheten måste använda ett filsystem som stöder DAX (DirectAccess). XFS, EXT4 och NTFS-filsystemen har alla stöd för DAX-tillägg, vilket ger åtkomst till filsystemet direkt från användarutrymmet. SQL Server identifierar om några databasdatafiler finns på en korrekt konfigurerad PMEM-diskenhet och utför automatiskt den nödvändiga minnesmappningen av databasfilerna när databasen startas, eller när en databas är ansluten, återställd eller skapad.

Mer information finns i:

Aktivera hybridbuffertpool

SQL Server 2019 (15.x) introducerar dynamiskt dataspråk (DDL) för att styra hybridbuffertpoolen.

Följande exempel aktiverar hybridbuffertpool för en instans av SQL Server:

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = ON;

Som standard är hybridbuffertpoolen inaktiverad i instansomfånget. För att inställningsändringen ska börja gälla måste SQL Server-instansen startas om. En omstart krävs för att underlätta allokeringen av tillräckligt med hash-sidor för att ta hänsyn till den totala PMEM-kapaciteten på servern.

I följande exempel aktiveras hybridbuffertpool för en specifik databas.

ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = ON;

Som standard är hybridbuffertpoolen aktiverad i databasomfånget.

Inaktivera hybridbuffertpool

I följande exempel inaktiveras hybridbuffertpoolen på instansnivå:

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = OFF;

Som standard inaktiveras hybridbuffertpoolen på instansnivå. För att den här ändringen ska börja gälla måste instansen startas om. Omstarten säkerställer att tillräckligt många hash-sidor allokeras för buffertpoolen, eftersom PMEM-kapacitet på servern nu måste redovisas.

I följande exempel inaktiveras hybridbuffertpoolen för en specifik databas.

ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = OFF;

Som standard aktiveras hybridbuffertpoolen i databasomfånget och inaktiveras i serveromfånget.

Visa konfiguration av hybridbuffertpool

Visa körningstidsvärde

I följande exempel returneras den aktuella konfigurationsstatusen för hybridbuffertpoolen för instansen.

SELECT * FROM sys.server_memory_optimized_hybrid_buffer_pool_configuration;

I följande exempel visas databaserna och inställningen på databasnivå för hybridbuffertpoolen (is_memory_optimized_enabled).

Du kan också montera eller formatera PMEM-modulen utan DAX aktiverat och behandla den som en vanlig blockenhet (dvs. utföra I/O via kerneln). När de konfigureras på det här sättet kan inga PMEM-moduler användas av SQL Server för att utföra åtgärder som kan adresseras med byte (dvs. alla anrop använder kernel-space-drivrutiner).

SELECT name, is_memory_optimized_enabled
FROM sys.databases;

Hybridbuffertpool med direktskrivning

Hybridbuffertpoolen med direktskrivningsbeteende minskar antalet memcpy kommandon som behöver utföras på ändrade data eller indexsidor som finns på PMEM-enheter. Det gör det genom att använda den varaktiga bevarade loggbufferten som ett sätt att ändra sidan utan att behöva kopiera den till någon av DRAM-buffertpoolerna. I stället ändras sidor i databasfiler som finns på PMEM-enheter direkt utan att behöva cachelagrar i en DRAM-buffertpool och spolas senare asynkront till disken. Det här beteendet följer fortfarande wal-semantik (write ahead logging), eftersom (logg) posterna i den bevarade transaktionsloggbufferten har skrivits eller förstärkts till hållbara medier. Betydande prestandavinster har observerats för transaktionsarbetsbelastningar med hjälp av hybridbuffertpoolen och bevarad loggbuffert tillsammans på det här sättet.

Aktivera direktskrivningsläge genom att aktivera hybridbuffertpoolen och sparad loggbuffert för en databas och aktivera startspårningsflagga 809.

Metodtips för hybridbuffertpool

  • När du formaterar DIN PMEM-enhet i Windows använder du den största allokeringsenhetsstorleken som är tillgänglig för NTFS (2 MB i Windows Server 2019 och senare) och kontrollerar att enheten har formaterats för DAX (direktåtkomst).

  • Aktivera principen Lås sidor i minnet i Windows.

  • Filstorlekarna ska vara flera på 2 MB (modulo 2 MB ska vara lika med noll).

  • Om inställningen för serveromfattning för hybridbuffertpoolen är inaktiverad används inte funktionen av någon användardatabas.

  • Med inställningen för serveromfattning för hybridbuffertpool aktiverad kan du använda inställningen databasomfattning för att inaktivera funktionen för enskilda användardatabaser.

  • Från och med SQL Server 2019 (15.x) CU 3 (se KB4538118) har läscachelagring aktiverats som standard, en process där de hetaste sidorna spåras i hybridbuffertpoolen och sedan automatiskt befordras till en DRAM-buffertpool för att förbättra prestandan.

  • Från och med SQL Server 2022 (16.x) CU 1 är direktskrivning standardbeteendet när hybridbuffertpoolen kombineras med en bevarad loggbuffert. Detta bör förbättra prestandan för nästan alla arbetsbelastningar, men det finns alltid en risk för regression och CU bör testas noggrant innan det tillämpas. Om du upplever regression på grund av den här beteendeändringen kan du återgå till det tidigare beteendet med hjälp av spårningsflaggan för start 898.

  • Från och med SQL Server 2022 (16.x) CU 1 ignoreras spårningsflagga 809 av SQL Server vid start. Både spårningsflagga 809 och spårningsflagga 898 gäller endast för Windows och gäller inte för SQL Server i Linux. Spårningsflaggor bör endast användas när de dirigeras för att göra det av en certifierad Microsoft Server-tekniker.