Megosztás a következőn keresztül:


Adatbázis kötése Memory-Optimized táblákkal egy erőforráskészlethez

A következőkre vonatkozik:SQL Server

Az erőforráskészlet a szabályozható fizikai erőforrások egy részét jelöli. Alapértelmezés szerint az SQL Server-adatbázisok az alapértelmezett erőforráskészlet erőforrásaihoz vannak kötve és használnak fel. Ha meg szeretné védeni az SQL Servert attól, hogy az erőforrásait egy vagy több memóriaoptimalizált tábla használja fel, és hogy a többi memóriafelhasználó ne használja fel a memóriaoptimalizált táblákhoz szükséges memóriát, külön erőforráskészletet kell létrehoznia az adatbázis memóriahasználatának memóriaoptimalizált táblákkal való kezeléséhez.

Egy adatbázis csak egy erőforráskészlethez köthető. Azonban több adatbázist is köthet ugyanahhoz a készlethez. Az SQL Server lehetővé teszi az adatbázis memóriaoptimalizált táblák nélküli kötését egy erőforráskészlethez, de nincs hatása. Előfordulhat, hogy egy adatbázist egy elnevezett erőforráskészlethez szeretne kötni, ha a jövőben memóriaoptimalizált táblákat szeretne létrehozni az adatbázisban.

Mielőtt egy adatbázist egy erőforráskészlethez köthet, az adatbázisnak és az erőforráskészletnek is léteznie kell. A kötés az adatbázis következő online állapotba helyezésekor lép érvénybe. További információt Adatbázisállapotok című témakörben talál.

További információ az erőforráskészletekről: Resource Governor erőforráskészlet.

Az adatbázis erőforráskészlethez való kötésének lépései

  1. Adatbázis és erőforráskészlet létrehozása

    1. Adatbázis létrehozása

    2. Az MIN_MEMORY_PERCENT és a MAX_MEMORY_PERCENT minimális értékének meghatározása

    3. Erőforráskészlet létrehozása és a memória konfigurálása

  2. Az adatbázis kötése a poolhoz

  3. Kötés megerősítése

  4. A kötés hatékonysá tétele

A témakör egyéb tartalmai

Az adatbázis és az erőforráskészlet létrehozása

Az adatbázist és az erőforráskészletet bármilyen sorrendben létrehozhatja. A lényeg az, hogy mindkettő létezik, mielőtt az adatbázist az erőforráskészlethez köti.

Az adatbázis létrehozása

Az alábbi Transact-SQL létrehoz egy IMOLTP_DB nevű adatbázist, amely egy vagy több memóriaoptimalizált táblát tartalmaz. A parancs futtatása előtt a <meghajtónak és az elérési útnak> léteznie kell.

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  

A MIN_MEMORY_PERCENT és MAX_MEMORY_PERCENT minimális értékének meghatározása

Miután meghatározta a memóriaoptimalizált táblák memóriaigényét, meg kell határoznia, hogy a rendelkezésre álló memória hány százaléka szükséges, és állítsa a memória százalékos értékét erre az értékre vagy magasabbra.

példa:
Ebben a példában azt feltételezzük, hogy a számítások alapján megállapította, hogy a memóriaoptimalizált tábláknak és indexeknek 16 GB memóriára van szükségük. Tegyük fel, hogy 32 GB memória van lekötve a használatra.

Első pillantásra úgy tűnhet, hogy MIN_MEMORY_PERCENT és MAX_MEMORY_PERCENT 50-be kell állítania (16 50% a 32-ből). Ez azonban nem biztosít elegendő memóriát a memóriaoptimalizált táblák számára. Az alábbi táblázatot tekintve (Memóriaoptimalizált táblákhoz és indexekhez rendelkezésre álló memória százalékos aránya) azt látjuk, hogy ha 32 GB lekötött memória áll rendelkezésre, akkor csak 80% érhető el a memóriaoptimalizált táblákhoz és indexekhez. Ezért a minimális és maximális százalékértékeket a rendelkezésre álló memória alapján számítjuk ki, nem pedig a véglegesített memóriát.

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

Valós számok behelyettesítése
percentNeeded = 16 / (32 * 0.8) = 16 / 25.6 = 0.625

Így a memóriaoptimalizált táblák és indexek 16 GB-os követelményeinek teljesítéséhez a rendelkezésre álló memória legalább 62,5% részére van szükség. Mivel a MIN_MEMORY_PERCENT és MAX_MEMORY_PERCENT értékeinek egész számoknak kell lenniük, legalább 63%értékre állítjuk őket.

Erőforráskészlet létrehozása és a memória konfigurálása

A memóriaoptimalizált táblák memóriájának konfigurálásakor a kapacitástervezést a MIN_MEMORY_PERCENT alapján kell elvégezni, nem pedig a MAX_MEMORY_PERCENT alapján. A MIN_MEMORY_PERCENT és MAX_MEMORY_PERCENT a ALTER RESOURCE POOL (Transact-SQL) című témakörben található. Ez kiszámíthatóbb memória-rendelkezésre állást biztosít a memóriaoptimalizált táblák számára, mivel MIN_MEMORY_PERCENT más erőforráskészletekre nehezedő memóriaterhelést okoz annak biztosítása érdekében, hogy a rendszer betartsa azt. A memória rendelkezésre állásának és a memóriakihasználtság elkerülésének érdekében a MIN_MEMORY_PERCENT és a MAX_MEMORY_PERCENT értékeinek meg kell egyeznie. Lásd Memóriaoptimalizált táblákhoz és indexekhez rendelkezésre álló memória százalékos aránya alább a memóriaoptimalizált táblákhoz rendelkezésre álló memória százalékos arányát a lekötött memória mennyisége alapján.

Kérjük, tekintse meg a ajánlott eljárásokat, különösen a In-Memory OLTP használatát virtuális gép környezetben, további információért, hogy hogyan kell dolgozni ilyen környezetben.

Az alábbi Transact-SQL kód létrehoz egy Pool_IMOLTP nevű erőforráskészletet, amelynek a memória fele elérhető a számára. A Resource Governor újrakonfigurálásra kerül, hogy magában foglalja a Pool_IMOLTP-t, miután a készlet létre lett hozva.

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

Az adatbázis csatlakoztatása a gyűjteményhez

A sp_xtp_bind_db_resource_pool rendszerfüggvény használatával kösse az adatbázist az erőforráskészlethez. A függvény két paramétert vesz fel: az adatbázis nevét és az erőforráskészlet nevét.

Az alábbi Transact-SQL az IMOLTP_DB adatbázis kapcsolását határozza meg az erőforráskészlethez Pool_IMOLTP. A kötés csak akkor lép érvénybe, ha online állapotba nem hozza az adatbázist.

EXEC sp_xtp_bind_db_resource_pool 'IMOLTP_DB', 'Pool_IMOLTP'  
GO  

A rendszerfüggvény sp_xtp_bind_db_resource_pool két sztringparamétert vesz fel: database_name és pool_name.

A kötés megerősítése

Erősítse meg a kötést, az IMOLTP_DB erőforráskészlet azonosítóját megjegyezve. Nem lehet NULL.

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

A kötés érvénybe léptetése

A kötés érvénybe lépéséhez offline állapotba kell helyeznie az adatbázist, és vissza kell kapcsolódnia az erőforráskészlethez. Ha az adatbázis korábban egy másik készlethez volt kötve, ez eltávolítja a lefoglalt memóriát az előző erőforráskészletből, valamint a memóriaoptimalizált táblához tartozó memóriafoglalásokat, és az indexek mostantól az adatbázishoz újonnan kötött erőforráskészletből származnak.

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

Most pedig az adatbázis az erőforráskészlethez van kötve.

A MIN_MEMORY_PERCENT és MAX_MEMORY_PERCENT értékek módosítása egy meglévő készletben

Ha további memóriát ad hozzá a kiszolgálóhoz, vagy a memóriaoptimalizált táblák változásaihoz szükséges memóriamennyiséget, előfordulhat, hogy módosítania kell a MIN_MEMORY_PERCENT és a MAX_MEMORY_PERCENT értékét. Az alábbi lépések bemutatják, hogyan módosíthatja az erőforráskészlet MIN_MEMORY_PERCENT és MAX_MEMORY_PERCENT értékét. A MIN_MEMORY_PERCENT és MAX_MEMORY_PERCENT használható értékekről az alábbi szakaszban olvashat. További információért tekintse meg az ajánlott eljárásokat: Az In-Memory OLTP használata virtuálisgép-környezetben.

  1. A ALTER RESOURCE POOL használatával módosíthatja MIN_MEMORY_PERCENT és MAX_MEMORY_PERCENT értékét is.

  2. A ALTER RESOURCE GOVERNOR használatával konfigurálja újra az erőforrás-kormányzót az új értékekkel.

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

Memória-optimalizált táblákhoz és indexekhez rendelkezésre álló memória százalékos aránya

Ha egy adatbázist memóriaoptimalizált táblákkal és SQL Server-számítási feladatokkal rendel ugyanahhoz az erőforráskészlethez, a Resource Governor beállít egy belső küszöbértéket In-Memory OLTP-használathoz, hogy a készlet felhasználói ne ütközhessenek a készlet használatával. Általánosságban elmondható, hogy az In-Memory OLTP-használat küszöbértéke a pool körülbelül 80%. Az alábbi táblázat a különböző memóriaméretek tényleges küszöbértékeit mutatja be.

Ha dedikált erőforráskészletet hoz létre az In-Memory OLTP-adatbázishoz, meg kell becsülnie, hogy mennyi fizikai memóriára van szüksége a memóriában lévő táblákhoz a sorverziók és az adatnövekedés elszámolása után. Miután megbecsülte a szükséges memóriát, létre kell hoznia egy erőforráskészletet az SQL-példány véglegesítési célmemóriának egy százalékával a DMV sys.dm_os_sys_info"committed_target_kb" oszlopában látható módon. Létrehozhat például egy P1 erőforráskészletet, amely 40% a példány számára elérhető teljes memóriamennyiségből. Ebből a 40%-ból a In-Memory OLTP motor kevesebb százalékot kap a In-Memory OLTP-adatok tárolásához. Ez annak érdekében történik, hogy In-Memory OLTP ne használja fel a készlet összes memóriáját. A kisebb százalékos érték a célként lekötött memória függvényétől függ. Az alábbi táblázat az OOM-hiba felmerülése előtt In-Memory (névvel ellátott vagy alapértelmezett) erőforráskészlet OLTP-adatbázisának rendelkezésére álló memóriát ismerteti.

Allokált célmemória Memóriabeli táblákhoz elérhető százalék
<= 8 GB 70%
<= 16 GB 75%
<= 32 GB 80%
<= 96 GB 85%
>96 GB 90%

Ha például a "lekötött célmemória" 100 GB, és megbecsüli, hogy a memóriaoptimalizált tábláknak és indexeknek 60 GB memóriára van szükségük, ezután létrehozhat egy erőforráskészletet MAX_MEMORY_PERCENT = 67 (60 GB szükséges / 0,90 = 66,667 GB - kerekíthet fel 67 GB-ra; 67 GB / 100 GB telepítve = 67%) annak érdekében, hogy az In-Memory OLTP-objektumok rendelkeznek a szükséges 60 GB-tal.

Ha egy adatbázist egy elnevezett erőforráskészlethez kötöttek, az alábbi lekérdezéssel megtekintheti a különböző erőforráskészletek memóriafoglalásait.

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  

Ez a mintakimenet azt mutatja, hogy a memóriaoptimalizált objektumok által felvett memória 1356 MB a PoolIMOLTP erőforráskészletben, amelynek felső határa 2307 MB. Ez a felső korlát szabályozza a készlethez hozzárendelt felhasználó- és rendszermemória-optimalizált objektumok által igénybe vehető teljes memóriát.

mintakimeneti
Ez a kimenet a fent létrehozott adatbázisból és táblákból származik.

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  

További információ: sys.dm_resource_governor_resource_pools (Transact-SQL).

Ha nem egy elnevezett erőforráskészlethez köti az adatbázist, az az "alapértelmezett" készlethez van kötve. Mivel az SQL Server az alapértelmezett erőforráskészletet használja a legtöbb más foglaláshoz, nem fogja tudni pontosan monitorozni a memóriaoptimalizált táblák által felhasznált memóriát a DMV sys.dm_resource_governor_resource_pools használatával a fontos adatbázis számára.

Lásd még:

sys.sp_xtp_bind_db_resource_pool (Transact-SQL)
sys.sp_xtp_unbind_db_resource_pool (Transact-SQL)
Erőforrás-kezelő
Erőforrás-korlátozó erőforráskészlet
Erőforráskészlet létrehozása
Erőforráskészlet beállításainak módosítása
Erőforráskészlet törlése