Binden einer Datenbank mit speicheroptimierten Tabellen an einen Ressourcenpool

Gilt für:SQL Server

Ein Ressourcenpool stellt eine Teilmenge der physischen Ressourcen dar, die kontrolliert werden können. Standardmäßig sind SQL Server-Datenbanken an die Ressourcen des Standardressourcenpools gebunden und verbrauchen. Um SQL Server davor zu schützen, dass seine Ressourcen von einer oder mehreren speicheroptimierten Tabellen verbraucht werden, und um zu verhindern, dass andere Speicherbenutzer Arbeitsspeicher verbrauchen, die von speicheroptimierten Tabellen benötigt werden, sollten Sie einen separaten Ressourcenpool erstellen, um die Speichernutzung für die Datenbank mit speicheroptimierten Tabellen zu verwalten.

Eine Datenbank kann nur an einen Ressourcenpool gebunden werden. Sie können jedoch mehrere Datenbanken an denselben Pool binden. SQL Server ermöglicht das Binden einer Datenbank ohne speicheroptimierte Tabellen an einen Ressourcenpool, hat aber keine Auswirkung. Sie sollten eine Datenbank an einen benannten Ressourcenpool binden, wenn Sie zu einem späteren Zeitpunkt möglicherweise speicheroptimierte Tabellen in der Datenbank erstellen möchten.

Bevor Sie eine Datenbank an einen Ressourcenpool binden können, müssen die Datenbank und der Ressourcenpool vorhanden sein. Die Bindung wird wirksam, wenn die Datenbank das nächste Mal online geschaltet wird. Weitere Informationen finden Sie unter Database States .

Weitere Informationen zu Ressourcenpools finden Sie unter Resource Governor Resource Pool.

Schritte zum Binden einer Datenbank an einen Ressourcenpool

  1. Erstellen der Datenbank und des Ressourcenpools

    1. Erstellen der Datenbank

    2. Bestimmen des Mindestwerts für MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT

    3. Erstellen eines Ressourcenpools und Konfigurieren des Arbeitsspeichers

  2. Binden der Datenbank an den Pool

  3. Bestätigen der Bindung

  4. Inkraftsetzen der Bindung

Weitere Inhalte in diesem Thema

Erstellen der Datenbank und des Ressourcenpools

Sie können die Datenbank und den Ressourcenpool in beliebiger Reihenfolge erstellen. Wichtig ist, dass beide vor dem Binden der Datenbank an den Ressourcenpool bereits vorhanden sind.

Erstellen der Datenbank

Die folgende Transact-SQL erstellt eine Datenbank mit dem Namen IMOLTP_DB, die mindestens eine speicheroptimierte Tabelle enthält. Der Pfad driveAndPath <> muss vorhanden sein, bevor dieser Befehl ausgeführt wird.

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  

Bestimmen des Mindestwerts für MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT

Sobald Sie die Arbeitsspeicheranforderungen für die speicheroptimierten Tabellen bestimmt haben, müssen Sie den erforderlichen Prozentsatz des verfügbaren Arbeitsspeichers bestimmen und die Arbeitsspeicherprozentsätze auf diesen oder einen höheren Wert festlegen.

Beispiel:
In diesem Beispiel wird davon ausgegangen, dass Sie Ihre Berechnungen ergeben haben, dass die speicheroptimierten Tabellen und Indizes 16 GB Arbeitsspeicher benötigen. Weiter wird davon ausgegangen, dass Sie über 32 GB Arbeitsspeicher verfügen, der für Ihre Verwendung reserviert ist.

Auf den ersten Blick müssen Sie MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT scheinbar auf 50 festlegen (50 % von 32 ist 16). Allerdings würde das Ihren speicheroptimierten Tabellen nicht genügend Arbeitsspeicher zur Verfügung stellen. In der folgenden Tabelle (Prozentsatz des für speicheroptimierte Tabellen und Indizes verfügbaren Arbeitsspeichers) sehen Sie, dass 32GB Arbeitsspeicher zugesichert sind, wovon jedoch nur 80% für speicheroptimierte Tabellen und Indizes zur Verfügung stehen. Daher werden die Mindest- und Höchstprozentsätze auf Grundlage des verfügbaren Arbeitsspeichers und nicht des reservierten Arbeitsspeichers berechnet.

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

Unter Verwendung der tatsächlichen Zahlen:
percentNeeded = 16 / (32 * 0.8) = 16 / 25.6 = 0.625

Daher benötigen Sie mindestens 62,5 % des verfügbaren Arbeitsspeichers, um die Anforderung von 16 GB für die speicheroptimierten Tabellen und Indizes zu erfüllen. Da die Werte für MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT ganze Zahlen sein müssen, werden sie auf mindestens 63 % festgelegt.

Erstellen eines Ressourcenpools und Konfigurieren des Arbeitsspeichers

Beim Konfigurieren des Arbeitsspeichers für speicheroptimierte Tabellen sollte die Kapazitätsplanung auf MIN_MEMORY_PERCENT und nicht auf MAX_MEMORY_PERCENT beruhen. Informationen zu MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT finden Sie unter ALTER RESOURCE POOL (Transact-SQL ). Auf diese Weise ist die Speicherverfügbarkeit für speicheroptimierte Tabellen besser vorhersagbar, da MIN_MEMORY_PERCENT Arbeitsspeichermangel für andere Ressourcenpools verursacht, um die Verfügbarkeit zu gewährleisten. Um sicherzustellen, dass Arbeitsspeicher verfügbar ist, und um OOM-Bedingungen (Out of Memory, nicht genügend Arbeitsspeicher) zu vermeiden, sollten die Werte für MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT identisch sein. Unter Prozentsatz des für speicheroptimierte Tabellen und Indizes verfügbaren Arbeitsspeichers unten finden Sie den Prozentsatz des verfügbaren Arbeitsspeichers für speicheroptimierte Tabellen basierend auf der Menge an zugesichertem Arbeitsspeicher.

Weitere Informationen zum Arbeiten in einer VM-Umgebung finden Sie unter Bewährte Methoden: Verwenden von In-Memory OLTP in einer Umgebung mit virtuellen Computern .

Der folgende Transact-SQL-Code erstellt einen Ressourcenpool mit dem Namen Pool_IMOLTP mit der Hälfte des verfügbaren Arbeitsspeichers. Nachdem der Pool erstellt wurde, wird die Ressourcenkontrolle neu konfiguriert, um "Pool_IMOLTP" einzuschließen.

-- 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  

Binden der Datenbank an den Pool

Binden Sie die Datenbank mithilfe der sp_xtp_bind_db_resource_pool -Systemfunktion an den Ressourcenpool. Die Funktion akzeptiert zwei Parameter: den Datenbanknamen und den Ressourcenpoolnamen.

Die folgende Transact-SQL definiert eine Bindung der Datenbank IMOLTP_DB an den Ressourcenpool Pool_IMOLTP. Die Bindung wird erst wirksam, nachdem die Datenbank online geschaltet wurde.

EXEC sp_xtp_bind_db_resource_pool 'IMOLTP_DB', 'Pool_IMOLTP'  
GO  

Die sp_xtp_bind_db_resourece_pool-Systemfunktion akzeptiert zwei Zeichenfolgenparameter: database_name und pool_name.

Bestätigen der Bindung

Bestätigen Sie die Bindung, und beachten Sie die Ressourcenpool-ID für IMOLTP_DB. Sie darf nicht NULL sein.

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

Inkraftsetzen der Bindung

Nachdem die Datenbank an den Ressourcenpool gebunden wurde, müssen Sie sie offline und anschließend wieder online schalten, damit die Bindung wirksam wird. Wenn die Datenbank zuvor an einen anderen Pool gebunden war, wird dadurch der zugeordnete Arbeitsspeicher aus dem vorherigen Ressourcenpool entfernt, und die Speicherbelegungen für die speicheroptimierte Tabelle und die Indizes stammen jetzt aus dem neu an die Datenbank gebundenen Ressourcenpool.

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

Jetzt ist die Datenbank an den Ressourcenpool gebunden.

Ändern von MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT für einen vorhandenen Pool

Wenn Sie dem Server zusätzlichen Arbeitsspeicher hinzufügen oder sich die für die speicheroptimierten Tabellen erforderliche Menge an Arbeitsspeicher ändert, müssen Sie möglicherweise den Wert von MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT ändern. Die folgenden Schritte veranschaulichen, wie Sie den Wert von MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT für einen Ressourcenpool ändern. Richtlinien für die für MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT zu verwendenden Werte finden Sie im entsprechenden Abschnitt weiter unten. Weitere Informationen finden Sie im Thema Verwenden von In-Memory OLTP in einer Umgebung mit virtuellen Computern .

  1. Ändern Sie den Wert von MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT mithilfe von ALTER RESOURCE POOL .

  2. Verwenden Sie ALTER RESOURCE GOVERNOR , um die Ressourcenkontrolle mit den neuen Werten neu zu konfigurieren.

Beispielcode

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

Prozentsatz des für speicheroptimierte Tabellen und Indizes verfügbaren Arbeitsspeichers

Wenn Sie eine Datenbank mit speicheroptimierten Tabellen und einer SQL Server-Workload demselben Ressourcenpool zuordnen, legt die Ressourcenverwaltung einen internen Schwellenwert für die Verwendung im Arbeitsspeicher fest, sodass die Benutzer des Pools keine Konflikte über die Poolnutzung haben. Im Allgemeinen beträgt der Schwellenwert für die Verwendung im Arbeitsspeicher OLTP etwa 80 % des Pools. In der folgenden Tabelle sind tatsächliche Schwellenwerte für verschiedene Arbeitsspeichergrößen angegeben.

Wenn Sie einen dedizierten Ressourcenpool für die In-Memory OLTP-Datenbank erstellen, müssen Sie abschätzen, wie viel physischer Arbeitsspeicher Sie für die In-Memory-Tabellen benötigen, nachdem Zeilenversionen und Datenwachstum erfasst wurden. Nach dem Schätzen des benötigten Arbeitsspeichers erstellen Sie einen Ressourcenpool mit einem Prozentwert des Commit-Zielarbeitsspeichers für die SQL-Instanz, wie durch die Spalte „committed_target_kb“ in der DMV sys.dm_os_sys_info dargestellt. Sie können beispielsweise einen Ressourcenpool "P1" mit 40 % des gesamten Arbeitsspeichers erstellen, der für die Instanz verfügbar ist. Aus diesen 40 % erhält das OLTP-Modul im Arbeitsspeicher einen kleineren Prozentsatz zum Speichern von In-Memory-OLTP-Daten. Dies erfolgt, um sicherzustellen, dass der In-Memory-OLTP nicht den gesamten Speicher aus diesem Pool belegt. Der Wert des kleineren Prozentsatzes ist abhängig vom zugesicherten Zielspeicher. In der folgenden Tabelle wird der Arbeitsspeicher beschrieben, der in der OLTP-Datenbank im Arbeitsspeicher in einem Ressourcenpool (benannt oder standard) verfügbar ist, bevor ein OOM-Fehler ausgelöst wird.

Zugesicherter Zielspeicher Für speicherinterne Tabellen verfügbarer Prozentsatz
<= 8 GB 70 %
<= 16 GB 75 %
<= 32 GB 80 %
<= 96 GB 85 %
>96 GB 90%

Wenn Ihr "Ziel-zugesicherten Speicher" beispielsweise 100 GB beträgt, und Sie schätzen Ihre speicheroptimierten Tabellen und Indizes benötigen 60 GB Arbeitsspeicher, dann können Sie einen Ressourcenpool mit MAX_MEMORY_PERCENT = 67 (60 GB erforderlich / 0,90 = 66,667 GB - aufrunden auf 67 GB; 67 GB / 100 GB installiert = 67 %) erstellen, um sicherzustellen, dass Ihre IN-Memory OLTP-Objekte über die benötigten 60 GB verfügen.

Sobald eine Datenbank an einen benannten Ressourcenpool gebunden wurde, können Sie mit der folgenden Abfrage die Speicherbelegungen für unterschiedliche Ressourcenpools anzeigen.

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  

Diese Beispielausgabe zeigt, dass speicheroptimierte Objekte 1.356 MB Arbeitsspeicher im Ressourcenpool "PoolIMOLTP" mit einer oberen Grenze von 2.307 MB belegen. Diese Obergrenze steuert, wie viel Arbeitsspeicher insgesamt von speicheroptimierten Benutzer- und Systemobjekten belegt werden kann, die dem Pool zugeordnet sind.

Beispielausgabe
Diese Ausgabe stammt aus der oben erstellten Datenbank und den entsprechenden Tabellen.

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  

Weitere Informationen finden Sie unter sys.dm_resource_governor_resource_pools (Transact-SQL).

Wenn Sie die Datenbank nicht an einen benannten Ressourcenpool binden, wird sie an den Pool „default“ gebunden. Da der Standardressourcenpool von SQL Server für die meisten anderen Zuordnungen verwendet wird, können Sie den von speicheroptimierten Tabellen verbrauchten Arbeitsspeicher nicht mithilfe der DMV-sys.dm_resource_governor_resource_pools genau für die gewünschte Datenbank überwachen.

Weitere Informationen

sys.sp_xtp_bind_db_resource_pool (Transact-SQL)
sys.sp_xtp_unbind_db_resource_pool (Transact-SQL)
Ressourcenkontrolle
Ressourcenpool für die Ressourcenkontrolle
Erstellen eines Ressourcenpools
Ändern der Einstellungen für den Ressourcenpool
Löschen eines Ressourcenpools