Wiązanie bazy danych z tabelami Memory-Optimized z pulą zasobów
Dotyczy:programu SQL Server
Pula zasobów reprezentuje podzbiór zasobów fizycznych, którymi można zarządzać. Domyślnie bazy danych programu SQL Server są powiązane z zasobami domyślnej puli zasobów i zużywają je. Aby chronić program SQL Server przed używaniem zasobów przez co najmniej jedną tabelę zoptymalizowaną pod kątem pamięci i uniemożliwić innym użytkownikom pamięci korzystanie z pamięci potrzebnej przez tabele zoptymalizowane pod kątem pamięci, należy utworzyć oddzielną pulę zasobów do zarządzania zużyciem pamięci dla bazy danych przy użyciu tabel zoptymalizowanych pod kątem pamięci.
Bazę danych można powiązać tylko z jedną pulą zasobów. Można jednak powiązać wiele baz danych z tą samą pulą. Program SQL Server umożliwia powiązanie bazy danych bez tabel zoptymalizowanych pod kątem pamięci do puli zasobów, ale nie ma żadnego efektu. Możesz powiązać bazę danych z nazwaną pulą zasobów, jeśli w przyszłości możesz utworzyć tabele zoptymalizowane pod kątem pamięci w bazie danych.
Aby można było powiązać bazę danych z pulą zasobów, musi istnieć zarówno baza danych, jak i pula zasobów. Powiązanie zostanie zastosowane przy następnym dowiezieniu bazy danych do trybu online. Aby uzyskać więcej informacji, zobacz Database States.
Aby uzyskać informacje o pulach zasobów, zobacz Resource Governor Resource Pool.
Kroki tworzenia powiązania bazy danych z pulą zasobów
Inna zawartość w tym temacie
Zmień MIN_MEMORY_PERCENT i MAX_MEMORY_PERCENT w istniejącej puli
procent pamięci dostępnej dla tabel i indeksów zoptymalizowanych pod kątem pamięci
Tworzenie bazy danych i puli zasobów
Bazę danych i pulę zasobów można utworzyć w dowolnej kolejności. Ważne jest, aby oba te elementy istniały przed powiązaniem bazy danych z pulą zasobów.
Tworzenie bazy danych
Poniższy Transact-SQL tworzy bazę danych o nazwie IMOLTP_DB, która będzie zawierać co najmniej jedną tabelę zoptymalizowaną pod kątem pamięci. Ścieżka <dysku i ścieżka> musi istnieć przed uruchomieniem tego polecenia.
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
Określanie wartości minimalnej dla MIN_MEMORY_PERCENT i MAX_MEMORY_PERCENT
Po określeniu potrzeb związanych z pamięcią dla tabel zoptymalizowanych pod kątem pamięci należy określić procent potrzebnej pamięci i ustawić wartości procentowe pamięci na wartość lub większą.
przykład :
W tym przykładzie przyjęto założenie, że na podstawie obliczeń ustaliliśmy, że tabele i indeksy zoptymalizowane pod kątem pamięci wymagają 16 GB pamięci. Załóżmy, że masz 32 GB pamięci zatwierdzonej do użycia.
Na pierwszy rzut oka może się wydawać, że musisz ustawić MIN_MEMORY_PERCENT i MAX_MEMORY_PERCENT na 50 (16 to 50% z 32). Jednak nie dałoby to tabelom zoptymalizowanym pod kątem pamięci wystarczającej ilości pamięci. Patrząc na poniższą tabelę (Procent dostępnej pamięci dla tabel i indeksów zoptymalizowanych pod kątem pamięci), widzimy, że jeśli istnieje 32 GB zatwierdzonej pamięci, tylko 80% z tego jest dostępne dla tabel i indeksów zoptymalizowanych pod kątem pamięci. W związku z tym obliczamy minimalne i maksymalne wartości procentowe na podstawie dostępnej pamięci, a nie pamięci zatwierdzonej.
memoryNeeded = 16
memoryCommitted = 32
availablePercent = 0.8
memoryAvailable = memoryCommitted * availablePercent
percentNeeded = memoryNeeded / memoryAvailable
Podstawianie rzeczywistych liczb:
percentNeeded = 16 / (32 * 0.8) = 16 / 25.6 = 0.625
W związku z tym potrzebujesz co najmniej 62,5% dostępnej pamięci, aby spełnić wymagania 16 GB tabel i indeksów zoptymalizowanych pod kątem pamięci. Ponieważ wartości MIN_MEMORY_PERCENT i MAX_MEMORY_PERCENT muszą być liczbami całkowitymi, ustawiliśmy je na co najmniej 63%.
Tworzenie puli zasobów i konfigurowanie pamięci
Podczas konfigurowania pamięci dla tabel zoptymalizowanych pod kątem pamięci planowanie pojemności powinno odbywać się na podstawie MIN_MEMORY_PERCENT, a nie na MAX_MEMORY_PERCENT. Aby uzyskać informacje na temat MIN_MEMORY_PERCENT i MAX_MEMORY_PERCENT, zobacz ALTER RESOURCE POOL (Transact-SQL). Zapewnia to bardziej przewidywalną dostępność pamięci dla tabel zoptymalizowanych pod kątem pamięci, ponieważ MIN_MEMORY_PERCENT wywołuje presję pamięciową na inne pule zasobów, aby mieć pewność, że jest przestrzegany. Aby zapewnić dostępność pamięci i uniknąć sytuacji poza pamięcią, wartości MIN_MEMORY_PERCENT i MAX_MEMORY_PERCENT powinny być takie same. Zobacz Procent dostępnej pamięci dla tabel i indeksów zoptymalizowanych pod kątem pamięci poniżej dla procentu pamięci dostępnej dla tabel zoptymalizowanych pod kątem pamięci na podstawie ilości zatwierdzonej pamięci.
Zobacz Najlepsze rozwiązania: używanie In-Memory OLTP w środowisku maszyny wirtualnej, aby uzyskać więcej informacji podczas pracy w środowisku maszyny wirtualnej.
Poniższy kod Transact-SQL tworzy pulę zasobów o nazwie Pool_IMOLTP z połową pamięci dostępnej do użycia. Po utworzeniu puli Zarządca Zasobów zostaje ponownie skonfigurowany, aby zawierał Pool_IMOLTP.
-- 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
Wiązanie bazy danych z pulą
Użyj funkcji systemowej sp_xtp_bind_db_resource_pool
, aby powiązać bazę danych z pulą zasobów. Funkcja przyjmuje dwa parametry: nazwę bazy danych i nazwę puli zasobów.
Poniższy Transact-SQL definiuje przypisanie bazy danych IMOLTP_DB do puli zasobów Pool_IMOLTP. Powiązanie nie stanie się skuteczne, dopóki baza danych nie zostanie przełączyna do trybu online.
EXEC sp_xtp_bind_db_resource_pool 'IMOLTP_DB', 'Pool_IMOLTP'
GO
Funkcja systemowa sp_xtp_bind_db_resource_pool przyjmuje dwa parametry ciągu: database_name i pool_name.
Potwierdź powiązanie
Potwierdź powiązanie, notując identyfikator puli zasobów dla IMOLTP_DB. Nie powinien mieć wartości NULL.
SELECT d.database_id, d.name, d.resource_pool_id
FROM sys.databases d
GO
Uczyń wiążące skutecznym
Musisz wyłączyć bazę danych i ponownie włączyć tryb online po powiązaniu jej z pulą zasobów, aby powiązanie zaczęło obowiązywać. Jeśli baza danych została wcześniej powiązana z inną pulą, spowoduje to usunięcie przydzielonej pamięci z poprzedniej puli zasobów i alokacji pamięci dla tabeli zoptymalizowanej pod kątem pamięci, a indeksy będą teraz pochodzić z puli zasobów nowo powiązanej z bazą danych.
USE master
GO
ALTER DATABASE IMOLTP_DB SET OFFLINE
GO
ALTER DATABASE IMOLTP_DB SET ONLINE
GO
USE IMOLTP_DB
GO
A teraz baza danych jest powiązana z pulą zasobów.
Zmień MIN_MEMORY_PERCENT i MAX_MEMORY_PERCENT w istniejącej puli
Jeśli do serwera zostanie dodana dodatkowa pamięć lub ilość pamięci potrzebnej do zmiany tabel zoptymalizowanych pod kątem pamięci, może być konieczne zmianę wartości MIN_MEMORY_PERCENT i MAX_MEMORY_PERCENT. W poniższych krokach pokazano, jak zmienić wartość MIN_MEMORY_PERCENT i MAX_MEMORY_PERCENT w puli zasobów. Zapoznaj się z poniższą sekcją, aby uzyskać wskazówki dotyczące wartości używanych do MIN_MEMORY_PERCENT i MAX_MEMORY_PERCENT. Aby uzyskać więcej informacji, zobacz temat Najlepsze rozwiązania: używanie In-Memory OLTP w środowisku maszyny wirtualnej.
Użyj
ALTER RESOURCE POOL
, aby zmienić wartość zarówno MIN_MEMORY_PERCENT, jak i MAX_MEMORY_PERCENT.Użyj
ALTER RESOURCE GOVERNOR
, aby ponownie skonfigurować zarządcę zasobów przy użyciu nowych wartości.
przykładowy kod
ALTER RESOURCE POOL Pool_IMOLTP
WITH
( MIN_MEMORY_PERCENT = 70,
MAX_MEMORY_PERCENT = 70 )
GO
-- reconfigure the Resource Governor
ALTER RESOURCE GOVERNOR RECONFIGURE
GO
Procent pamięci dostępnej dla tabel i indeksów zoptymalizowanych pod kątem pamięci
Jeśli odwzorujesz bazę danych z tabelami zoptymalizowanymi dla pamięci i obciążeniem SQL Servera do tej samej puli zasobów, Mechanizm Zarządzania Zasobami ustawia wewnętrzny próg dla In-Memory użycia OLTP, aby użytkownicy tej puli nie mieli konfliktów z jej wykorzystaniem. Ogólnie rzecz biorąc, próg wykorzystywania In-Memory OLTP wynosi około 80% z puli. W poniższej tabeli przedstawiono rzeczywiste progi dla różnych rozmiarów pamięci.
Podczas tworzenia dedykowanej puli zasobów dla bazy danych In-Memory OLTP należy oszacować ilość pamięci fizycznej potrzebnej dla tabel w pamięci po uwzględnieniu wersji wierszy i wzrostu danych. Po oszacowaniu wymaganej pamięci należy utworzyć pulę zasobów z procentem docelowej pamięci zatwierdzonej dla instancji SQL, co odzwierciedla kolumna 'committed_target_kb' w DMV sys.dm_os_sys_info
. Na przykład można utworzyć pulę zasobów P1, wykorzystując 40% całkowitej dostępnej pamięci dla instancji. Z tego 40%silnik OLTP In-Memory otrzymuje mniejszy procent na przechowywanie In-Memory danych OLTP. Należy to zrobić, aby upewnić się, że In-Memory OLTP nie zużywa całej pamięci z tej puli. Wartość tego mniejszego procentu zależy od przeznaczonej pamięci docelowej. W poniższej tabeli opisano pamięć przeznaczoną dla bazy danych OLTP In-Memory w puli zasobów (nazwanej lub domyślnej) przed pojawieniem się błędu OOM.
Docelowa przydzielona pamięć | Procent dostępności dla tabel w pamięci |
---|---|
<= 8 GB | 70% |
<= 16 GB | 75% |
<= 32 GB | 80% |
<= 96 GB | 85% |
>96 GB | 90% |
Jeśli na przykład "docelowa zatwierdzona pamięć" wynosi 100 GB, a szacowane tabele i indeksy zoptymalizowane pod kątem pamięci wymagają 60 GB pamięci, Następnie można utworzyć pulę zasobów z MAX_MEMORY_PERCENT = 67 (wymagane 60 GB / 0,90 = 66,667 GB — zaokrąglić do 67 GB; zainstalowane 67 GB / 100 GB = 67%), aby upewnić się, że In-Memory obiektów OLTP mają potrzebne 60 GB.
Po powiązaniu bazy danych z nazwaną pulą zasobów użyj następującego zapytania, aby wyświetlić alokacje pamięci w różnych pulach zasobów.
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
Te przykładowe dane wyjściowe pokazują, że pamięć pobierana przez obiekty zoptymalizowane pod kątem pamięci wynosi 1356 MB w puli zasobów PoolIMOLTP z górną granicą 2307 MB. Ta górna granica steruje całkowitą pamięcią, która może być pobierana przez obiekty zoptymalizowane pod kątem pamięci użytkownika i systemu zamapowane na tę pulę.
przykładowe dane wyjściowe
Te dane wyjściowe pochodzą z bazy danych i tabel utworzonych powyżej.
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
Aby uzyskać więcej informacji, zobacz sys.dm_resource_governor_resource_pools (Transact-SQL).
Jeśli baza danych nie zostanie powiązana z nazwaną pulą zasobów, zostanie ona powiązana z pulą "domyślną". Ponieważ domyślna pula zasobów jest używana przez program SQL Server dla większości innych alokacji, nie będzie można monitorować pamięci używanej przez tabele zoptymalizowane pod kątem pamięci przy użyciu sys.dm_resource_governor_resource_pools DMV dokładnie dla bazy danych zainteresowań.
Zobacz też
sys.sp_xtp_bind_db_resource_pool (Transact-SQL)
sys.sp_xtp_unbind_db_resource_pool (Transact-SQL)
Zarządca zasobów
pula zasobów zarządcy zasobów
tworzenie puli zasobów
zmień ustawienia puli zasobów
Usunąć pulę zasobów