Delen via


Een database verbinden met Memory-Optimized tabellen aan een resourcegroep

van toepassing op:SQL Server-

Een resourcegroep vertegenwoordigt een subset van fysieke resources die kunnen worden beheerd. SQL Server-databases zijn standaard gebonden aan en verbruiken de resources van de standaardresourcegroep. Als u wilt voorkomen dat SQL Server de resources gebruikt door een of meer tabellen die zijn geoptimaliseerd voor geheugen en om te voorkomen dat andere geheugengebruikers geheugen verbruiken die nodig zijn voor tabellen die zijn geoptimaliseerd voor geheugen, moet u een afzonderlijke resourcegroep maken om het geheugenverbruik voor de database te beheren met tabellen die zijn geoptimaliseerd voor geheugen.

Een database kan slechts afhankelijk zijn van één resourcegroep. U kunt echter meerdere databases koppelen aan dezelfde pool. MET SQL Server kan een database zonder tabellen die zijn geoptimaliseerd voor geheugen, worden gekoppeld aan een resourcegroep, maar dit heeft geen effect. Mogelijk wilt u een database binden aan een benoemde resourcegroep als u in de toekomst mogelijk tabellen wilt maken die zijn geoptimaliseerd voor geheugen in de database.

Voordat u een database aan een resourcegroep kunt koppelen, moeten zowel de database als de resourcegroep bestaan. De binding wordt van kracht wanneer de database de volgende keer online wordt gebracht. Zie databasestatussen voor meer informatie.

Voor meer informatie over resourcepools, zie Resource Governor-resourcepool.

Stappen voor het binden van een database aan een resourcegroep

  1. De database en resourcegroep maken

    1. De database maken

    2. de minimumwaarde voor MIN_MEMORY_PERCENT en MAX_MEMORY_PERCENT bepalen

    3. Een resourcegroep maken en geheugen configureren

  2. de database verbinden met de pool

  3. de binding bevestigen

  4. de binding effectief maken

Andere inhoud in dit onderwerp

De database en resourcepool maken

U kunt de database en resourcegroep in elke volgorde maken. Wat belangrijk is, is dat ze beide bestaan voordat de database aan de resourcegroep wordt gekoppeld.

De database maken

Met de volgende Transact-SQL maakt u een database met de naam IMOLTP_DB die een of meer tabellen bevat die zijn geoptimaliseerd voor geheugen. Het pad <driveAndPath-> moet bestaan voordat u deze opdracht uitvoert.

CREATE DATABASE IMOLTP_DB  
GO  
ALTER DATABASE IMOLTP_DB ADD FILEGROUP IMOLTP_DB_fg CONTAINS MEMORY_OPTIMIZED_DATA  
ALTER DATABASE IMOLTP_DB ADD FILE( NAME = 'IMOLTP_DB_fg' , FILENAME = 'c:\data\IMOLTP_DB_fg') TO FILEGROUP IMOLTP_DB_fg;  
GO  

De minimumwaarde voor MIN_MEMORY_PERCENT en MAX_MEMORY_PERCENT bepalen

Zodra u de geheugenbehoeften voor uw voor geheugen geoptimaliseerde tabellen hebt vastgesteld, moet u bepalen welk percentage beschikbaar geheugen u nodig hebt en de geheugenpercentages instellen op die waarde of hoger.

voorbeeld:
In dit voorbeeld wordt ervan uitgegaan dat u uit uw berekeningen hebt vastgesteld dat uw voor geheugen geoptimaliseerde tabellen en indexen 16 GB geheugen nodig hebben. Stel dat u 32 GB geheugen hebt toegewezen voor uw gebruik.

Op het eerste gezicht kan het lijken dat u MIN_MEMORY_PERCENT en MAX_MEMORY_PERCENT moet instellen op 50 (16 is 50% van 32). Dit biedt echter onvoldoende geheugen voor uw tabellen die zijn geoptimaliseerd voor geheugen. In de onderstaande tabel (percentage geheugen dat beschikbaar is voor tabellen en indexen die zijn geoptimaliseerd voor geheugen) zien we dat als er 32 GB toegewezen geheugen is, slechts 80% beschikbaar is voor tabellen en indexen die zijn geoptimaliseerd voor geheugen. Daarom berekenen we de minimale en maximale percentages op basis van het beschikbare geheugen, niet het vastgelegde geheugen.

memoryNeeded = 16
memoryCommitted = 32
availablePercent = 0.8
memoryAvailable = memoryCommitted * availablePercent
percentNeeded = memoryNeeded / memoryAvailable

Invullen van reële getallen
percentNeeded = 16 / (32 * 0.8) = 16 / 25.6 = 0.625

U hebt dus ten minste 62,5% van het beschikbare geheugen nodig om te voldoen aan de 16 GB-vereiste van uw tabellen en indexen die zijn geoptimaliseerd voor geheugen. Omdat de waarden voor MIN_MEMORY_PERCENT en MAX_MEMORY_PERCENT gehele getallen moeten zijn, stellen we ze in op ten minste 63%.

Een resourcegroep maken en geheugen configureren

Wanneer u geheugen configureert voor tabellen die zijn geoptimaliseerd voor geheugen, moet de capaciteitsplanning worden uitgevoerd op basis van MIN_MEMORY_PERCENT, niet op MAX_MEMORY_PERCENT. Zie ALTER RESOURCE POOL (Transact-SQL) voor informatie over MIN_MEMORY_PERCENT en MAX_MEMORY_PERCENT. Dit biedt voorspelbarere geheugenbeschikbaarheid voor tabellen die zijn geoptimaliseerd voor geheugen, omdat MIN_MEMORY_PERCENT geheugendruk veroorzaakt voor andere resourcegroepen om ervoor te zorgen dat deze wordt gehonoreerd. Om ervoor te zorgen dat geheugen beschikbaar is en voorkomen dat er onvoldoende geheugen is, moeten de waarden voor MIN_MEMORY_PERCENT en MAX_MEMORY_PERCENT hetzelfde zijn. Zie Percentage geheugen dat beschikbaar is voor tabellen en indexen die zijn geoptimaliseerd voor geheugen hieronder voor het percentage geheugen dat beschikbaar is voor tabellen die zijn geoptimaliseerd voor geheugen, op basis van de hoeveelheid toegewezen geheugen.

Zie Aanbevolen procedures: het gebruik van In-Memory OLTP in een VM-omgeving voor meer informatie bij het werken in een VM-omgeving.

Met de volgende Transact-SQL-code wordt een resourcepool gemaakt met de naam Pool_IMOLTP met de helft van het geheugen dat beschikbaar is voor zijn gebruik. Nadat de pool is gemaakt, wordt Resource Governor opnieuw geconfigureerd om Pool_IMOLTP op te nemen.

-- set MIN_MEMORY_PERCENT and MAX_MEMORY_PERCENT to the same value  
CREATE RESOURCE POOL Pool_IMOLTP   
  WITH   
    ( MIN_MEMORY_PERCENT = 63,   
    MAX_MEMORY_PERCENT = 63 );  
GO  
  
ALTER RESOURCE GOVERNOR RECONFIGURE;  
GO  

De database verbinden met de pool

Gebruik de systeemfunctie sp_xtp_bind_db_resource_pool om de database te binden aan de resourcegroep. De functie heeft twee parameters: de databasenaam en de naam van de resourcegroep.

De volgende Transact-SQL definieert een binding van de database IMOLTP_DB aan de resourcegroep Pool_IMOLTP. De binding wordt pas van kracht als u de database online brengt.

EXEC sp_xtp_bind_db_resource_pool 'IMOLTP_DB', 'Pool_IMOLTP'  
GO  

De systeemfunctie sp_xtp_bind_db_resource_pool twee tekenreeksparameters gebruikt: database_name en pool_name.

De binding bevestigen

Bevestig de binding, waarbij u de resourcegroep-id voor IMOLTP_DB noteert. Dit mag niet NULL zijn.

SELECT d.database_id, d.name, d.resource_pool_id  
FROM sys.databases d  
GO  

De binding effectief maken

U moet de database offline en weer online zetten nadat u deze hebt gekoppeld aan de resourcegroep om de binding van kracht te laten worden. Als uw database eerder was gebonden aan een andere resource pool, wordt hiermee het toegewezen geheugen uit de vorige resource pool verwijderd en zullen geheugentoewijzingen voor uw geheugen-geoptimaliseerde tabel en indexen nu afkomstig zijn uit de resource pool die nieuw is verbonden met de database.

USE master  
GO  
  
ALTER DATABASE IMOLTP_DB SET OFFLINE  
GO  
ALTER DATABASE IMOLTP_DB SET ONLINE  
GO  
  
USE IMOLTP_DB  
GO  

En nu is de database gebonden aan de resourcegroep.

MIN_MEMORY_PERCENT en MAX_MEMORY_PERCENT voor een bestaande pool wijzigen

Als u extra geheugen toevoegt aan de server of de hoeveelheid geheugen die nodig is voor wijzigingen in tabellen die zijn geoptimaliseerd voor geheugen, moet u mogelijk de waarde van MIN_MEMORY_PERCENT en MAX_MEMORY_PERCENT wijzigen. In de volgende stappen ziet u hoe u de waarde van MIN_MEMORY_PERCENT en MAX_MEMORY_PERCENT in een resourcegroep kunt wijzigen. Zie de onderstaande sectie voor hulp bij de waarden die moeten worden gebruikt voor MIN_MEMORY_PERCENT en MAX_MEMORY_PERCENT. Zie het onderwerp Aanbevolen procedures: het gebruik van In-Memory OLTP in een VM-omgeving voor meer informatie.

  1. Gebruik ALTER RESOURCE POOL om de waarde van zowel MIN_MEMORY_PERCENT als MAX_MEMORY_PERCENT te wijzigen.

  2. Gebruik ALTER RESOURCE GOVERNOR om de Resource Governor opnieuw te configureren met de nieuwe waarden.

Voorbeeldcode

ALTER RESOURCE POOL Pool_IMOLTP  
WITH  
     ( MIN_MEMORY_PERCENT = 70,  
       MAX_MEMORY_PERCENT = 70 )   
GO  
  
-- reconfigure the Resource Governor  
ALTER RESOURCE GOVERNOR RECONFIGURE  
GO  

Percentage geheugen dat beschikbaar is voor tabellen en indexen die zijn geoptimaliseerd voor geheugen

Als u een database met tabellen die zijn geoptimaliseerd voor geheugen en een SQL Server-workload toewijst aan dezelfde resourcegroep, stelt Resource Governor een interne drempelwaarde in voor In-Memory OLTP-gebruik, zodat de gebruikers van de pool geen conflicten hebben over het gebruik van de pool. Over het algemeen is de drempelwaarde voor In-Memory OLTP-gebruik ongeveer 80% van de groep. In de volgende tabel ziet u de werkelijke drempelwaarden voor verschillende geheugengrootten.

Wanneer u een toegewijde bronnenpool maakt voor de In-Memory OLTP-database, moet u schatten hoeveel fysiek geheugen u nodig hebt voor de in-geheugen tabellen, rekening houdend met regelversies en gegevensgroei. Zodra u het benodigde geheugen hebt geschat, maakt u een resourcegroep met een percentage van het doorvoerdoelgeheugen voor SQL Instance, zoals wordt weergegeven in kolom 'committed_target_kb' in de DMV-sys.dm_os_sys_info. U kunt bijvoorbeeld een bronnenpool P1 maken met 40% van het totale geheugen dat beschikbaar is voor de instantie. Vanuit deze 40%krijgt de In-Memory OLTP-engine een kleiner aandeel om In-Memory OLTP-gegevens op te slaan. Dit wordt gedaan om ervoor te zorgen dat In-Memory OLTP niet al het geheugen van deze pool verbruikt. Deze waarde van het kleinere percentage is afhankelijk van het toegewezen doelgeheugen. In de volgende tabel wordt het geheugen beschreven dat beschikbaar is voor In-Memory OLTP-database in een resourcegroep (benoemd of standaard) voordat er een OOM-fout optreedt.

Toegewezen doelgeheugen Percentage beschikbaar voor in-memory tabellen
<= 8 GB 70%
<= 16 GB 75%
<= 32 GB 80%
<= 96 GB 85%
>96 GB 90%

Als uw 'toegewezen doelgeheugen' bijvoorbeeld 100 GB is en u een schatting maakt dat uw voor geheugen geoptimaliseerde tabellen en indexen 60 GB geheugen nodig hebben, dan kunt u een resourcegroep maken met MAX_MEMORY_PERCENT = 67 (60 GB nodig / 0,90 = 66,667 GB - afgerond naar 67 GB; 67 GB / 100 GB geïnstalleerd = 67%) om ervoor te zorgen dat uw In-Memory OLTP-objecten over de benodigde 60 GB beschikken.

Zodra een database is gebonden aan een benoemde resourcegroep, gebruikt u de volgende query om geheugentoewijzingen in verschillende resourcegroepen weer te geven.

SELECT pool_id  
     , Name  
     , min_memory_percent  
     , max_memory_percent  
     , max_memory_kb/1024 AS max_memory_mb  
     , used_memory_kb/1024 AS used_memory_mb   
     , target_memory_kb/1024 AS target_memory_mb  
   FROM sys.dm_resource_governor_resource_pools  

In deze voorbeelduitvoer ziet u dat het geheugen dat wordt gebruikt door objecten die zijn geoptimaliseerd voor geheugen 1356 MB is in de resourcegroep PoolIMOLTP, met een bovengrens van 2307 MB. Deze bovengrens bepaalt het totale geheugen dat kan worden genomen door door gebruikers- en systeemgeheugen geoptimaliseerde objecten die zijn toegewezen aan deze pool.

Voorbeelduitvoer
Deze uitvoer is afkomstig uit de database en tabellen die we hierboven hebben gemaakt.

pool_id     Name        min_memory_percent max_memory_percent max_memory_mb used_memory_mb target_memory_mb  
----------- ----------- ------------------ ------------------ ------------- -------------- ----------------   
1           internal    0                  100                3845          125            3845  
2           default     0                  100                3845          32             3845  
259         Pool_IMOLTP 0                  100                3845          1356           2307  

Zie sys.dm_resource_governor_resource_pools (Transact-SQL)voor meer informatie.

Als u uw database niet aan een benoemde resourcegroep koppelt, is deze gebonden aan de standaardpool. Omdat de standaardresourcegroep door SQL Server wordt gebruikt voor de meeste andere toewijzingen, kunt u het geheugen dat wordt verbruikt door tabellen die zijn geoptimaliseerd voor geheugen niet nauwkeurig controleren met behulp van de DMV sys.dm_resource_governor_resource_pools voor de relevante database.

Zie ook

sys.sp_xtp_bind_db_resource_pool (Transact-SQL)
sys.sp_xtp_unbind_db_resource_pool (Transact-SQL)
Resource Governor
Resource Governor-resourcegroep
Een Resource Pool maken
Instellingen van resourcegroep wijzigen
een resourcepool verwijderen