Az In-Memory OLTP hardveres szempontjai az SQL Serverben

In-Memory OLTP a hagyományos lemezalapú tábláktól eltérő módon használ memóriát és lemezt. Az In-Memory OLTP teljesítményének javulása attól függ, milyen hardvert használunk. Ebben a cikkben számos általános hardveres szempontot ismerünk meg, és általános irányelveket adunk az In-Memory OLTP-vel használható hardverekről.

Megjegyzés:

Ez a cikk a Microsoft SQL Server 2014 csapata által 2013. augusztus 1-jén közzétett blog volt. A blog weboldala kivezetés alatt áll.

SQL Server In-Memory-OLTP

CPU

In-Memory OLTP nem igényel csúcskategóriás kiszolgálót a nagy átviteli sebességű OLTP-számítási feladatok támogatásához. Javasoljuk, hogy használjon egy középkategóriás kiszolgálót két processzorcsatornával. Az In-Memory OLTP által biztosított megnövekedett átviteli sebesség miatt valószínű, hogy a két processzorfoglalat elegendő lesz az üzleti igényeinek.

Javasoljuk az egyidejű többszálú végrehajtás (SMT) bekapcsolását az In-Memory OLTP esetében. Néhány OLTP számítási feladat esetén akár 40% teljesítménynövekedést is láthattunk az SMT használatakor.

Memory

Minden memóriaoptimalizált tábla teljes mértékben a memóriában található. Ezért elegendő fizikai memóriával kell rendelkeznie maguknak a tábláknak, és fenn kell tartania az adatbázison futó számítási feladatot – a ténylegesen szükséges memória mennyisége a számítási feladattól függ, de kiindulási pontként elegendő rendelkezésre álló memóriára van szüksége az adatméret körülbelül kétszereséhez. Elegendő memóriára is szüksége van a pufferkészlethez, ha a számítási feladat hagyományos lemezalapú táblákon is működik.

Annak megállapításához, hogy egy adott memóriaoptimalizált tábla mennyi memóriát használ, futtassa a következő lekérdezést:

select object_name(object_id), * from sys.dm_db_xtp_table_memory_stats;

Az eredmények a memóriaoptimalizált táblákhoz és indexeikhez használt memóriát mutatják. A táblaadatok tartalmazzák a felhasználói adatokat, valamint az összes régebbi sorverziót, amelyre továbbra is szükség van a tranzakciók futtatásához, vagy amelyeket a rendszer még nem tisztított meg. A kivonatindexek által használt memória állandó, és nem függ a tábla sorainak számától.

Fontos szem előtt tartani, hogy In-Memory OLTP használatakor a teljes adatbázisnak nem kell a memóriába illeszkednie. Több terabájtos adatbázissal rendelkezhet, és továbbra is kihasználhatja In-Memory OLTP előnyeit, amennyiben a gyakori adatok (azaz a memóriaoptimalizált táblák) mérete nem haladja meg a 256 GB-ot. Az SQL Server által egyetlen adatbázishoz kezelhető ellenőrzőpont-adatfájlok maximális száma 4000, és mindegyik fájl 128 MB. Bár ez elméletileg legfeljebb 512 GB-ot adna, annak érdekében, hogy az SQL Server lépést tudjon tartani az ellenőrzőpontok fájljainak egyesítésével, és ne érje el a 4000 fájlra vonatkozó korlátot, akár 256 GB-ot is támogatunk. Ez a korlát csak a memóriaoptimalizált táblákat alkalmazza; Nincs ilyen méretkorlátozás az ugyanabban az SQL Server-adatbázisban található hagyományos lemezalapú táblákra.

A nem tartós memóriaoptimalizált táblák (NDT-k), vagyis a memóriaoptimalizált táblák a DURABILITY=SCHEMA_ONLY használatával nem maradnak meg a lemezen. Bár az ellenőrzőpont-fájlok száma nem korlátozza az NDT-ket, csak 256 GB támogatott. A napló- és adatmeghajtókra vonatkozó szempontok a bejegyzés hátralévő részében nem vonatkoznak a nem tartós táblákra, mivel az adatok csak a memóriában léteznek.

Naplózási meghajtó

A memóriaoptimalizált táblákhoz tartozó naplórekordok az adatbázis tranzakciónaplójába, valamint a többi SQL Server-naplórekordba kerülnek.

Mindig fontos, hogy a naplófájlt alacsony késésű meghajtóra helyezze, így a tranzakcióknak nem kell túl sokáig várniuk, és meg kell akadályozniuk a napló I/O-n való versengést. A rendszer olyan gyorsan fut, mint a leglassabb összetevő (Amdahl törvénye). Biztosítani kell, hogy az In-Memory OLTP futtatásakor a napló I/O-eszköz ne váljon szűk keresztmetszetté. Javasoljuk, hogy alacsony késésű, legalább SSD-vel rendelkező tárolóeszközt használjon.

A memóriaoptimalizált táblák kevesebb naplózási sávszélességet használnak, mint a lemezalapú táblák, mivel nem naplózzák az indexelési műveleteket, és nem naplózzák a VISSZAVONÁS rekordokat. Ez segíthet a napló I/O-versengés enyhítésében.

Adatmeghajtó

A memóriaoptimalizált táblák ellenőrzőpontfájlok használatával való megőrzése streamelési I/O-t használ. Ezért ezeknek a fájloknak nincs szükségük alacsony késésű vagy gyors véletlenszerű I/O-meghajtóra. Ehelyett ezeknek a meghajtóknak a fő tényezője a gazdabuszadapter (HBA) szekvenciális I/O sebessége és sávszélessége. Így nincs szükség SSD-kre az ellenőrzőpont-fájlokhoz; nagy teljesítményű orsókra (például SAS) helyezheti őket, ha szekvenciális I/O-sebessége megfelel a követelményeknek.

A sebességkövetelmény meghatározásának legnagyobb tényezője az RTO [Helyreállítási idő célkitűzése] a kiszolgáló újraindításakor. Az adatbázis-helyreállítás során a memóriaoptimalizált táblák összes adatát be kell olvasni a lemezről a memóriába. Az adatbázis-helyreállítás az I/O alrendszer szekvenciális olvasási sebességével történik; a lemez jelenti a szűk keresztmetszetet.

A szigorú RTO-követelményeknek való megfelelés érdekében javasoljuk, hogy az ellenőrzőpont-fájlokat több lemezre terjessze úgy, hogy több tárolót ad hozzá a MEMORY_OPTIMIZED_DATA fájlcsoporthoz. Az SQL Server támogatja a több meghajtóról származó ellenőrzőpont-fájlok párhuzamos betöltését – a helyreállítás a meghajtók összesített sebességével történik.

A lemezkapacitás szempontjából azt javasoljuk, hogy a memóriaoptimalizált táblák méretének 2-3-szorosa legyen elérhető.