Vytvoření vazby databáze s tabulkami Memory-Optimized k fondu zdrojů
platí pro:SQL Server
Fond zdrojů představuje podmnožinu fyzických prostředků, které lze řídit. Ve výchozím nastavení jsou databáze SQL Serveru vázané na prostředky výchozího fondu zdrojů a spotřebovávají je. Chcete-li chránit SQL Server před tím, aby prostředky spotřebovaly jedna nebo více tabulek optimalizovaných pro paměť a aby ostatní uživatelé paměti nemohli využívat paměť vyžadované tabulkami optimalizovanými pro paměť, měli byste vytvořit samostatný fond prostředků pro správu spotřeby paměti pro databázi s tabulkami optimalizovanými pro paměť.
Databáze může být vázána pouze na jeden fond zdrojů. Můžete však svázat více databází se stejným fondem. SQL Server umožňuje vazbu databáze bez tabulek optimalizovaných pro paměť do fondu zdrojů, ale nemá žádný vliv. Pokud budete chtít v budoucnu vytvořit v databázi tabulky optimalizované pro paměť, můžete chtít propojit databázi s pojmenovaným fondem zdrojů.
Než budete moct svázat databázi s fondem zdrojů, musí existovat databáze i fond zdrojů. Vazba se projeví při příštím přenesení databáze do režimu online. Další informace najdete v tématu Stavy databáze.
Pro informace o fondech prostředků se podívejte na fond prostředků Resource Governor.
Postup vytvoření vazby databáze k fondu zdrojů
Další obsah v tomto tématu
Změnit MIN_MEMORY_PERCENT a MAX_MEMORY_PERCENT u existujícího poolu
Procento paměti dostupné pro tabulky a indexy optimalizované pro paměť
Vytvoření databáze a fondu zdrojů
Databázi a fond zdrojů můžete vytvořit v libovolném pořadí. Důležité je, že obě existují před vazbou databáze na fond zdrojů.
Vytvoření databáze
Následující Transact-SQL vytvoří databázi s názvem IMOLTP_DB, která bude obsahovat jednu nebo více tabulek optimalizovaných pro paměť. Cesta <jednotkaAndPath> musí existovat před spuštěním tohoto příkazu.
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
Určení minimální hodnoty pro MIN_MEMORY_PERCENT a MAX_MEMORY_PERCENT
Jakmile určíte potřeby paměti pro tabulky optimalizované pro paměť, musíte určit, jaké procento dostupné paměti potřebujete, a nastavit procento paměti na tuto hodnotu nebo vyšší.
Příklad :
V tomto příkladu předpokládáme, že z výpočtů jste zjistili, že tabulky a indexy optimalizované pro paměť potřebují 16 GB paměti. Předpokládejme, že máte 32 GB paměti potvrzené pro vaše použití.
Na první pohled se může zdát, že potřebujete nastavit MIN_MEMORY_PERCENT a MAX_MEMORY_PERCENT na 50 (16 je 50% z 32). To by však nedaly tabulkám optimalizovaným pro paměť dostatek paměti. Při pohledu na následující tabulku (Procento paměti dostupné pro tabulky optimalizované pro paměť a indexy) vidíme, že pokud je 32 GB potvrzené paměti, je k dispozici pouze 80%, které jsou k dispozici pro tabulky a indexy optimalizované pro paměť. Proto vypočítáme minimální a maximální procento na základě dostupné paměti, nikoli potvrzené paměti.
memoryNeeded = 16
memoryCommitted = 32
availablePercent = 0.8
memoryAvailable = memoryCommitted * availablePercent
percentNeeded = memoryNeeded / memoryAvailable
Dosazení skutečných čísel
percentNeeded = 16 / (32 * 0.8) = 16 / 25.6 = 0.625
Proto potřebujete alespoň 62,5% dostupné paměti, abyste splnili požadavek na 16 GB tabulek a indexů optimalizovaných pro paměť. Vzhledem k tomu, že hodnoty pro MIN_MEMORY_PERCENT a MAX_MEMORY_PERCENT musí být celé číslo, nastavíme je alespoň na 63%.
Vytvoření fondu zdrojů a konfigurace paměti
Při konfiguraci paměti pro tabulky optimalizované pro paměť by se plánování kapacity mělo provádět na základě MIN_MEMORY_PERCENT, ne na MAX_MEMORY_PERCENT. Pro informace o MIN_MEMORY_PERCENT a MAX_MEMORY_PERCENT si přečtěte ALTER RESOURCE POOL (Transact-SQL). Toto poskytuje předvídatelnější dostupnost paměti pro paměťově optimalizované tabulky, protože MIN_MEMORY_PERCENT způsobuje tlak na paměť jiných fondů zdrojů, aby byl dodržen. Aby se zajistilo, že je paměť k dispozici, a aby nedocházelo k nedostatku paměti, měly by být hodnoty pro MIN_MEMORY_PERCENT a MAX_MEMORY_PERCENT stejné. Podívejte se na Procento paměti dostupné pro tabulky optimalizované pro paměť a indexy níže pro procento paměti dostupné pro tabulky optimalizované pro paměť na základě množství potvrzené paměti.
Viz osvědčené postupy: Použití In-Memory OLTP v prostředí virtuálního počítače pro více informací při práci v prostředí virtuálního počítače.
Následující Transact-SQL kód vytvoří fond zdrojů s názvem Pool_IMOLTP s polovinou paměti dostupnou pro použití. Po vytvoření fondu se správce prostředků překonfiguruje tak, aby zahrnoval 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
Přiřaď databázi k fondu
Pomocí systémové funkce sp_xtp_bind_db_resource_pool
vytvořte vazbu databáze s fondem zdrojů. Funkce má dva parametry: název databáze a název fondu zdrojů.
Následující Transact-SQL definuje vazbu databáze IMOLTP_DB k fondu zdrojů Pool_IMOLTP. Vazba se nestane efektivní, dokud databázi neuvedete online.
EXEC sp_xtp_bind_db_resource_pool 'IMOLTP_DB', 'Pool_IMOLTP'
GO
Systémová funkce sp_xtp_bind_db_resource_pool má dva parametry řetězce: database_name a pool_name.
Potvrďte vazbu
Potvrďte vazbu a zkontrolujte ID fondu zdrojů pro IMOLTP_DB. Neměl by mít hodnotu NULL.
SELECT d.database_id, d.name, d.resource_pool_id
FROM sys.databases d
GO
Zajištění účinnosti vazby
Databázi musíte přepnout do režimu offline a zpět do režimu online poté, co ji navážete na fond prostředků, aby se vazba projevila. Pokud byla vaše databáze svázaná s jiným fondem dříve, odebere se přidělená paměť z předchozího fondu zdrojů a přidělení paměti pro tabulku optimalizovanou pro paměť a indexy budou nyní pocházet z fondu prostředků nově svázané s databází.
USE master
GO
ALTER DATABASE IMOLTP_DB SET OFFLINE
GO
ALTER DATABASE IMOLTP_DB SET ONLINE
GO
USE IMOLTP_DB
GO
A teď je databáze svázaná s fondem zdrojů.
Změna MIN_MEMORY_PERCENT a MAX_MEMORY_PERCENT v existujícím fondu
Pokud na server přidáte další paměť nebo velikost paměti potřebné pro změny tabulek optimalizovaných pro paměť, možná budete muset změnit hodnotu MIN_MEMORY_PERCENT a MAX_MEMORY_PERCENT. Následující kroky ukazují, jak změnit hodnotu MIN_MEMORY_PERCENT a MAX_MEMORY_PERCENT ve fondu zdrojů. Pokyny k hodnotám, které se mají použít pro MIN_MEMORY_PERCENT a MAX_MEMORY_PERCENT, najdete v následující části. Další informace najdete v tématu osvědčených postupů: Použití In-Memory OLTP v prostředí virtuálního počítače.
Pomocí
ALTER RESOURCE POOL
můžete změnit hodnotu MIN_MEMORY_PERCENT i MAX_MEMORY_PERCENT.Pomocí
ALTER RESOURCE GOVERNOR
překonfigurujte správce prostředků s novými hodnotami.
vzorový kód
ALTER RESOURCE POOL Pool_IMOLTP
WITH
( MIN_MEMORY_PERCENT = 70,
MAX_MEMORY_PERCENT = 70 )
GO
-- reconfigure the Resource Governor
ALTER RESOURCE GOVERNOR RECONFIGURE
GO
Procento paměti dostupné pro tabulky a indexy optimalizované pro paměť
Pokud databázi s tabulkami optimalizovanými pro paměť mapujete spolu se SQL Serverovou úlohou do stejného fondu zdrojů, správce prostředků nastaví interní prahovou hodnotu pro použití In-Memory OLTP, aby uživatelé fondu neměli konflikty s využitím fondu. V zásadě činí hranice pro použití In-Memory OLTP přibližně 80% fondu. Následující tabulka uvádí skutečné prahové hodnoty pro různé velikosti paměti.
Při vytváření vyhrazeného fondu zdrojů pro databázi In-Memory OLTP je potřeba odhadnout, kolik fyzické paměti potřebujete pro tabulky v paměti po účtování verzí řádků a růstu dat. Jakmile odhadnete potřebnou paměť, vytvoříte fond prostředků s procentem cílové paměti potvrzené alokace pro instanci SQL, jak je uvedeno ve sloupci "committed_target_kb" v dotazu pro dynamickou správu sys.dm_os_sys_info
. Můžete například vytvořit zdrojový fond P1, kterému je přiděleno 40% z celkové paměti dostupné pro instanci. Z tohoto 40%získá modul In-Memory OLTP menší procento pro ukládání dat In-Memory OLTP. Tím se zajistí, že In-Memory OLTP nevyužívá veškerou paměť z tohoto fondu. Tato hodnota menšího procenta závisí na přidělené cílové paměti. Následující tabulka popisuje paměť dostupnou pro databázi OLTP In-Memory ve fondu zdrojů (pojmenovaný nebo výchozí) před vyvoláním chyby OOM.
Cílově alokovaná paměť | Procento dostupné pro tabulky uložené v paměti |
---|---|
<= 8 GB | 70% |
<= 16 GB | 75% |
<= 32 GB | 80% |
<= 96 GB | 85% |
>96 GB | 90% |
Například pokud je cílová přiřazená paměť 100 GB a odhadnete, že tabulky a indexy optimalizované pro paměť potřebují 60 GB paměti, můžete vytvořit fond prostředků s MAX_MEMORY_PERCENT = 67 (60 GB potřebných / 0,90 = 66,667 GB – zaokrouhlit nahoru na 67 GB; 67 GB / 100 GB instalovaných = 67%), abyste zajistili, že vaše objekty OLTP In-Memory budou mít potřebných 60 GB.
Jakmile je databáze svázaná s pojmenovaným fondem zdrojů, pomocí následujícího dotazu zobrazte přidělení paměti napříč různými fondy zdrojů.
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
Tento ukázkový výstup ukazuje, že paměť pořízená objekty optimalizovanými pro paměť je 1356 MB ve fondu zdrojů PoolIMOLTP s horní hranicí 2307 MB. Tato horní mez řídí celkovou paměť, kterou mohou uživatelské a systémové objekty optimalizované pro paměť zabírat v rámci tohoto fondu.
ukázkový výstup
Tento výstup pochází z databáze a tabulek, které jsme vytvořili výše.
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
Další informace viz sys.dm_resource_governor_resource_pools (Transact-SQL).
Pokud databázi nevážete s pojmenovaným fondem zdrojů, je vázána na výchozí fond. Vzhledem k tomu, že SQL Server používá výchozí fond zdrojů pro většinu ostatních přidělení, nebudete moci monitorovat paměť spotřebované tabulkami optimalizovanými pro paměť pomocí zobrazení dynamické správy sys.dm_resource_governor_resource_pools přesně pro databázi, která vás zajímá.
Viz také
sys.sp_xtp_bind_db_resource_pool (Transact-SQL)
správce prostředků
Správce prostředků fond prostředků
vytvoření fondu zdrojů
Změnit nastavení fondu zdrojů
Odstraňte fond zdrojů