Sdílet prostřednictvím


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ů

  1. Vytvoření databáze a fondu zdrojů

    1. Vytvoření databáze

    2. Určení minimální hodnoty pro MIN_MEMORY_PERCENT a MAX_MEMORY_PERCENT

    3. Vytvoření fondu zdrojů a konfigurace paměti

  2. Připojte databázi k fondu

  3. Potvrďte vazbu

  4. Udělejte vazbu efektivní

Další obsah v tomto tématu

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.

  1. Pomocí ALTER RESOURCE POOL můžete změnit hodnotu MIN_MEMORY_PERCENT i MAX_MEMORY_PERCENT.

  2. 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)
sys.sp_xtp_unbind_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ů