SQL Server-erőforrások szabályozása

Befejeződött

Míg egyes SQL-kiszolgálók vagy felügyelt Azure SQL-példányok egyetlen alkalmazás adatbázisaihoz vannak dedikáltan, a kritikus fontosságú alkalmazásokban gyakran látható konfiguráció, számos kiszolgáló támogatja a különböző teljesítményigényű és csúcsterhelési ciklusú alkalmazások adatbázisait. A különböző követelmények kiegyensúlyozása kihívást jelenthet a rendszergazdák számára. A kiszolgálói erőforrások kezelésének egyik hatékony módja az SQL Server 2008-ban bevezetett Resource Governor használata.

A Resource Governor az SQL Server és az Azure SQL felügyelt példányainak egyik funkciója, amely lehetővé teszi a bejövő alkalmazáskérelmek processzor-, fizikai I/O- és memóriaerőforrásainak részletes vezérlését. Ha a példány szintjén engedélyezve van, a Resource Governor egy osztályozó függvénnyel határozza meg a kapcsolatok kezelését, és a munkameneteket számítási feladatok csoportjaira osztva. Minden számítási feladatcsoport úgy van konfigurálva, hogy egy adott rendszererőforrás-készletet használjon.

Erőforráskészletek

Az erőforráskészlet a kiszolgálón elérhető fizikai erőforrásokat jelöli. Az SQL Server mindig két készletből áll: alapértelmezett és belső, még akkor is, ha a Resource Governor nincs engedélyezve. A belső készlet a kritikus SQL Server-függvényekhez van fenntartva, és nem korlátozható. Az alapértelmezett készlet és a kifejezetten definiált erőforráskészletek konfigurálhatók az általuk használható erőforrásokra vonatkozó korlátozásokkal. Minden neminternális készlethez a következő korlátokat adhatja meg:

  • Minimális/maximális processzorhasználati százalék
  • A cpu-százalék korlátja
  • Minimális/maximális memóriaszázalék
  • NUMA-csomópont affinitása
  • Kötetenkénti minimális/maximális IOP-k

Feljegyzés

Az erőforráskészlet módosításai csak az új munkameneteket érintik, a már folyamatban lévőket nem. Ezért a készlet módosítása nem korlátozza egy hosszú ideig futó folyamat erőforrásait. Ez alól a szabály alól kivételt képeznek az SQL Server Machine Learning Services szolgáltatással használt külső készletek, amelyeket még a folyamatban lévő munkamenetek készletváltozása is korlátozhat.

Az erőforráskészlet összes beállítása, a minimális és a maximális CPU-százalék kivételével, olyan kemény korlátokat jelöl, amelyeket nem lehet túllépni. A minimális/maximális cpu-százalékos érték csak akkor érvényes, ha processzor-versengés történik. Ha például legfeljebb 70%állít be, a számítási feladat akár 100% rendelkezésre álló processzorciklust is igénybe vehet, ha nincs versengés. Ha azonban más számítási feladatok is futnak, a számítási feladat 70%lesz korlátozva.

Számítási feladatcsoport

A számítási feladatok csoportja tárolóként szolgál a munkamenet-kérelmekhez, amelyeket az osztályozó függvény osztályoz. Az erőforráskészletekhez hasonlóan két beépített csoport létezik: az alapértelmezett és a belső. Minden számítási feladatcsoport egyetlen erőforráskészlethez van társítva, de egy erőforráskészlet több számítási feladatcsoportot is üzemeltethet. Alapértelmezés szerint az összes kapcsolat az alapértelmezett számítási feladatcsoporthoz lesz irányítva, kivéve, ha az osztályozó függvény hozzárendeli őket egy felhasználó által definiált csoporthoz. Az alapértelmezett számítási feladatcsoport az alapértelmezett erőforráskészlethez lefoglalt erőforrásokat használja.

Osztályozó függvény

Az osztályozó függvény akkor fut, amikor létrejön egy kapcsolat az SQL Server-példányhoz, és az egyes kapcsolatokat egy adott számítási feladatcsoportba sorolja. Ha a függvény NULL értéket, alapértelmezett értéket vagy a nem létező számítási feladatcsoport nevét adja vissza, a munkamenet át lesz adva az alapértelmezett számítási feladatcsoportba. Mivel az osztályozó minden kapcsolaton fut, a hatékonyságot tesztelni kell. Az alábbi képen egy mintaosztályozó függvény látható, amely a felhasználókat a felhasználónév alapján sorolja be.

CREATE FUNCTION dbo.RGClassifier()
RETURNS SYSNAME
WITH SCHEMABINDING
AS
BEGIN
DECLARE @WorkloadGroup AS SYSNAME
IF(SUSER_NAME() = 'ReportUser')
    SET @WorkloadGroup = 'ReportServerGroup'

ELSE IF (SUSER_NAME() = 'PrimaryUser')
    SET @WorkloadGroup = 'PrimaryServerGroup'
ELSE
    SET @WorkloadGroup = 'default'

RETURN @WorkloadGroup
END

Növelheti a példában látható függvénydefiníció összetettségét, de ellenőriznie kell, hogy az összetettebb függvény nem befolyásolja-e a felhasználói teljesítményt.

Erőforrás-kormányzó használati esetei

A Resource Governort elsősorban olyan több-bérlős helyzetekben használják, ahol egy adatbáziscsoport egyetlen SQL Server-példányban osztozik, és a teljesítményt konzisztensen kell tartani a kiszolgáló összes felhasználója számára. A Resource Governor használatával korlátozhatja a karbantartási műveletek, például a konzisztencia-ellenőrzések és az indexek újraépítése által használt erőforrásokat, hogy elegendő erőforrást biztosítson a felhasználói lekérdezésekhez a karbantartási időszakokban.