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


Kiszolgáló memóriakonfigurációs beállításai

A következőkre vonatkozik:SQL Server

Az SQL Server adatbázismotor memóriakihasználtságának korlátját két konfigurációs beállítás jelöli meg, min server memory (MB) és max server memory (MB). Idővel és normál körülmények között az SQL Server a megadott korlátig max server memory (MB)megkísérli a memóriát igényelni.

Megjegyzés:

Oszlopcentrikus indexek: áttekintés és In-Memory OLTP áttekintés és használati forgatókönyvek objektumai saját memóriajegyzőkkel rendelkeznek, ami megkönnyíti a pufferkészletek használatának monitorozását. További információ: sys.dm_os_memory_clerks.

Az SQL Server régebbi verzióiban a memória kihasználtsága gyakorlatilag nem volt korlátozva, ami azt jelzi az SQL Server számára, hogy az összes rendszermemória használható volt. Az SQL Server minden verziójában ajánlott az SQL Server memóriahasználatának felső korlátját konfigurálni a max server memory (MB).

  • Az SQL Server 2019 (15.x) óta a Windows-kiszolgálók SQL-beállítása javaslatot tesz egy önálló SQL Server-példányra max server memory (MB) a telepítéskor rendelkezésre álló rendszermemória százalékos aránya alapján.
  • Bármikor újrakonfigurálhatja a memóriakorlátokat (megabájtban) az SQL Server egy példánya által használt SQL Server-folyamathoz a min server memory (MB) konfigurációs beállításokon max server memory (MB) keresztül.

Megjegyzés:

Ez az útmutató windowsos SQL Server-példányra hivatkozik. A linuxos memóriakonfigurációval kapcsolatos információkért tekintse meg a linuxos SQL Server teljesítményre vonatkozó ajánlott eljárásait és konfigurációs irányelveit , valamint a memory.memorylimitmb beállítást.

Ajánlások

A beállítások alapértelmezett beállításai és minimálisan engedélyezett értékei a következők:

Lehetőség Alapértelmezett Minimálisan engedélyezhető Ajánlott
min server memory (MB) 0 0 0
max server memory (MB) 2 147 483 647 megabájt (MB) 128 MB 75% olyan rendelkezésre álló rendszermemória, amelyet más folyamatok nem használnak fel, beleértve más példányokat is. Részletesebb javaslatokért tekintse meg a kiszolgálói memória maximális méretét.

Ezeken a korlátokon belül az SQL Server a rendelkezésre álló rendszererőforrások alapján dinamikusan módosíthatja a memóriakövetelményeit. További információ: dinamikus memóriakezelés.

  • A túl magas érték beállításával max server memory (MB) az SQL Server egyetlen példánya versenghet a memóriáért az ugyanazon a gazdagépen üzemeltetett más SQL Server-példányokkal.
  • A túl alacsony beállítás max server memory (MB) azonban elveszett teljesítménylehetőség, és memóriaterhelést és teljesítményproblémát okozhat az SQL Server-példányban.
  • A minimális értékre való beállítás max server memory (MB) még az SQL Server indítását is megakadályozhatja. Ha a beállítás módosítása után nem tudja elindítani az SQL Servert, indítsa el az indítási -f beállítással, és állítsa vissza max server memory (MB) a korábbi értékére. További információ: Database Engine Service indítási beállításai.
  • Nem ajánlott, hogy max server memory (MB) és min server memory (MB) ugyanazt az értéket vegyék fel, vagy közel ugyanolyan értékeket kapjanak.

Megjegyzés:

A kiszolgáló maximális memóriabeállítása csak az SQL Server pufferkészlet méretét korlátozza. A kiszolgáló maximális memóriabeállítása nem korlátozza az SQL Server által más összetevők, például a kiterjesztett tárolt eljárások, COM-objektumok, nem megosztott DLL-ek és EXE-k lefoglalására hagyott fennmaradó nem fenntartott memóriaterületet.

Az SQL Server dinamikusan használhat memóriát. Manuálisan azonban beállíthatja a memóriabeállításokat, és korlátozhatja az SQL Server által elérhető memória mennyiségét. Az SQL Server memóriamennyiségének beállítása előtt határozza meg a megfelelő memóriabeállítást úgy, hogy kivonja a teljes fizikai memóriából az operációs rendszerhez (operációs rendszerhez) szükséges memóriát, a beállítás által max server memory (MB) nem szabályozott memóriafoglalásokat és az SQL Server bármely más példányát (és más rendszerhasználatot, ha a kiszolgáló más memóriát használó alkalmazásoknak ad otthont, más SQL Server-példányokat is beleértve). Ez a különbség az aktuális SQL Server-példányhoz hozzárendelhető memória maximális mennyisége.

A memória konfigurálható a folyamat virtuális címtartományára vonatkozó korlátig minden SQL Server-kiadásban. További információt a Windows és a Windows Server kiadások memóriakorlátjai című témakörben talál.

Minimális kiszolgálómemória

A min server memory (MB) használatával garantálja az SQL Server Memóriakezelő számára elérhető minimális memóriamennyiséget.

  • Az SQL Server nem foglalja le azonnal az indításkor megadott min server memory (MB) memória mennyiségét. Az ügyfélbetöltés miatt, miután a memóriahasználat elérte ezt az értéket, az SQL Server csak akkor szabadíthat fel memóriát, ha csökken az min server memory (MB) értéke. Ha például az SQL Server több példánya egyszerre van telepítve ugyanabban a kiszolgálón, fontolja meg a min server memory (MB) paraméter beállítását a példány memóriájának lefoglalására.

  • Az min server memory (MB) érték beállítása elengedhetetlen egy virtualizált környezetben, hogy biztosítsuk, a mögöttes gazdagép memóriaterhelése ne próbálja meg felszabadítani a vendég virtuális gép (VM) pufferkészletéből szükségesnél több memóriát, ami szükséges az elfogadható teljesítmény fenntartásához. Ideális esetben a virtuális gépek SQL Server példányainak nem kell versenyezniük a virtuális gazdagép proaktív memóriaelosztási folyamataival.

  • Az SQL Server nem garantáltan lefoglalja a megadott min server memory (MB)memória mennyiségét. Ha a kiszolgáló terhelése soha nem követeli meg a megadott min server memory (MB)memóriamennyiség kiosztását, az SQL Server kevesebb memóriát fog használni.

Kiszolgálómemória maximális mennyisége

Annak max server memory (MB) érdekében, hogy az operációs rendszer és más alkalmazások ne szenvedjenek hátrányos memóriaterhelést az SQL Server által.

  • A konfiguráció beállítása előtt monitorozza az max server memory (MB) SQL Server-példányt üzemeltető kiszolgáló általános memóriahasználatát a normál működés során a memória rendelkezésre állásának és követelményeinek meghatározásához. Egy kezdeti konfiguráció esetén, vagy ha nem volt lehetőség az SQL Server folyamatmemória-használatának gyűjtésére, használja az alábbi általános ajánlott eljárásokat egyetlen példány konfigurálásához max server memory (MB) :
    • A teljes operációsrendszer-memóriából kivonja a vezérlőn kívüli max server memory (MB) lehetséges SQL Server-szálmemória-foglalások megfelelőjét, ami az 1. veremméret szorozva a számított maximális feldolgozószálak2-vel.
    • Ezután vonjon ki 25%-ot az egyéb, külső max server memory (MB) memóriafoglalásokhoz, például a biztonsági mentési pufferekhez, a kiterjesztett tárolt eljárás DLL-jeihez, az Automation-eljárások (sp_OA hívások) használatával létrehozott objektumokhoz és a kapcsolt kiszolgálószolgáltatóktól származó foglalásokhoz. Ez egy általános közelítés, és az Ön eredményei eltérőek lehetnek.
    • Ami marad, az max server memory (MB) egyetlen példány beállításának kell lennie.

1 A szálveremek architektúránkénti méretével kapcsolatos információkért tekintse meg a Memóriakezelési architektúra útmutatóját .

2 Az aktuális gazdagép adott számú affinitással rendelkező processzorának számított alapértelmezett feldolgozói szálával kapcsolatos további információkért lásd : Kiszolgálókonfiguráció: feldolgozószálak maximális száma.

Beállítások manuális beállítása

A kiszolgáló beállításai min server memory (MB) , és max server memory (MB) beállítható, hogy több memóriaértékre is kiterjedjenek. Ez a módszer akkor hasznos, ha a rendszer- vagy adatbázis-rendszergazdák az SQL Server egy példányát más alkalmazások vagy más, ugyanazon a gazdagépen futó SQL Server-példányok memóriaigényével konfigurálják.

Használd a Transact-SQL-t

A min server memory (MB) és a max server memory (MB) lehetőségek haladó beállítások. Ha a sp_configure rendszer által tárolt eljárással módosítja ezeket a beállításokat, csak akkor módosíthatja őket, ha a speciális beállítások megjelenítése 1 értékre van állítva. Ezek a beállítások azonnal érvénybe lépnek a kiszolgáló újraindítása nélkül. További információ: sp_configure.

Az alábbi példa 12 288 MB-ra vagy 12 GB-ra állítja max server memory (MB) a beállítást. Bár a sp_configure megadja az opció nevét mint max server memory (MB), kihagyhatja a (MB).

EXECUTE sp_configure 'show advanced options', 1;
GO

RECONFIGURE;
GO

EXECUTE sp_configure 'max server memory', 12288;
GO

RECONFIGURE;
GO

Az alábbi lekérdezés a jelenleg konfigurált értékekre és a jelenleg használt értékre vonatkozó információkat adja vissza. Ez a lekérdezés az eredményeket attól függetlenül adja vissza, hogy a sp_configure "speciális beállítások megjelenítése" lehetőség engedélyezve van-e.

SELECT [name],
       [value],
       [value_in_use]
FROM sys.configurations
WHERE [name] = 'max server memory (MB)'
      OR [name] = 'min server memory (MB)';

Az SQL Server Management Studio használata

Használja min server memory (MB) és max server memory (MB) konfigurálja újra az SQL Server Memóriakezelő által felügyelt memória mennyiségét (megabájtban) egy SQL Server-példányhoz.

  1. Az Object Explorerben kattintson a jobb gombbal egy kiszolgálóra, és válassza a Tulajdonságok lehetőséget.

  2. Válassza a Kiszolgáló tulajdonságai ablak Memória lapját. A minimális kiszolgálói memória és a kiszolgálómemória maximális értéke jelenik meg.

  3. A kiszolgáló memóriabeállításaiban adja meg a kiszolgáló minimális memóriájának és maximális kiszolgálómemóriának megfelelő számokat. A javaslatokért tekintse meg a jelen cikkben szereplő minimális kiszolgálói memóriát (MB) és a kiszolgálói memória maximális méretét (MB ).

Az alábbi képernyőkép mindhárom lépést bemutatja:

Képernyőkép az SSMS memóriakonfigurációs beállításairól.

Lapok zárolása a memóriában (LPIM)

A Windows-alapú alkalmazások a Windows Address Windowing Extensions (AWE) API-kkal lefoglalhatják és hozzárendelhetik a fizikai memóriát a folyamatcímtérbe. Az LPIM Windows-szabályzata meghatározza, hogy mely fiókok férhetnek hozzá az API-hoz az adatok fizikai memóriában való megőrzéséhez, megakadályozva, hogy a rendszer a lemezen lévő virtuális memóriába lapozza az adatokat. Az AWE használatával lefoglalt memória zárolva van, amíg az alkalmazás fel nem szabadítja, vagy ki nem lép. Az AWE API-k 64 bites SQL Serveren történő memóriakezeléshez való használatát gyakran zárolt oldalaknak is nevezik. A memória lapjainak zárolása segíthet abban, hogy a kiszolgáló megőrizze a válaszkészségét, amikor a memória lapozása a lemezre történik. A memória lapjainak zárolása beállítás engedélyezve van az SQL Server Standard kiadás példányaiban, és magasabb, ha a futtatandó sqlservr.exe jogosultságokkal rendelkező fiók jogosult a Windows Lock pages in memory (LPIM) felhasználói jogosultságra.

Ha le szeretné tiltani az SQL Server memóriabeli lapjainak zárolását, távolítsa el a jogosultságokkal rendelkező fiók (az SQL Server indítási fiókja) memóriabeli lapjainak zárolása felhasználói jogát.

Az LPIM használata nem befolyásolja az SQL Server dinamikus memóriakezelését, így más memóriajegyzők kérésére bővíthető vagy zsugorodhat. Ha a Lapok zárolása a memóriában felhasználói jogot használja, erősen ajánlott felső korlátot beállítani a max server memory (MB) számára. További információ: maximális kiszolgálói memória (MB).

Az LPIM-et akkor kell használni, ha a sqlservr folyamat felfelé mutat. Ebben az esetben az 17890-s hiba jelenik meg a hibanaplóban, az alábbi példához hasonlóan:

A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: #### seconds. Working set (KB): ####, committed (KB): ####, memory utilization: ##%.

Az LPIM helytelenül konfigurált max server memory (MB) beállítással való használata, amely nem veszi figyelembe a rendszer többi memóriafogyasztóját, instabilitást okozhat a más folyamatok által igényelt memóriamennyiségtől függően, vagy az max server memory (MB)SQL Server hatókörén kívüli memóriakövetelményektől függően. További információkért tekintse meg a kiszolgálói memória maximális méretét. Ha megkapja a memória lapjainak zárolása (LPIM) jogosultságot (32 bites vagy 64 bites rendszereken), nyomatékosan javasoljuk, hogy állítsa be max server memory (MB) egy adott értékre, ahelyett hogy a 2 147 483 647 megabájt (MB) alapértelmezett értéket hagyná meg.

Megjegyzés:

Az SQL Server 2012-től (11.x) kezdődően a 845-ös nyomkövetési jelző nem szükséges a Standard Editionhez a zárolt lapok használatához.

Lapok zárolásának engedélyezése a memóriában

Az előző információk mérlegelése után az SQL Server-példány szolgáltatásfiókjának jogosultságának biztosításával engedélyezheti a memóriabeli lapok zárolását , lásd : Lapok zárolásának engedélyezése a memóriabeállításban (Windows).

Az SQL Server példány szolgáltatási fiókjának meghatározásához tekintse meg az SQL Server Configuration Managert, vagy kérdezze le a service_account-t a sys.dm_server_services-ből. További információ: sys.dm_server_services.

A "Lock pages in memory" jogosultság állapotának megtekintése

Annak megállapításához, hogy a memóriajogosulatban lévő lapok zárolása az SQL Server-példány szolgáltatásfiókjának van-e megadva, használja az alábbi lekérdezést. Ez a lekérdezés az SQL Server 2016 (13.x) SP1 és újabb verzióiban támogatott.

SELECT sql_memory_model_desc FROM sys.dm_os_sys_info;

Az LPIM állapotát a következő értékek sql_memory_model_desc jelölik:

  • CONVENTIONAL. A lapok memóriában való zárolási joga nincs megadva.
  • LOCK_PAGES. A lapok memóriazárolási jogosultsága megadva lett.
  • LARGE_PAGES. A memóriajoggal rendelkező lapok zárolása vállalati módban történik, a nyomkövetési jelző 834 engedélyezve van. Ez egy speciális konfiguráció, és a legtöbb környezetben nem ajánlott. További információ és fontos kikötések: nyomkövetési jelző 834.

Az alábbi módszerekkel állapítsa meg, hogy az SQL Server-példány zárolt oldalakat használ-e:

  • A következő Transact-SQL lekérdezés kimenete nemzero értékeket jelez a következőhöz locked_page_allocations_kb:

    SELECT osn.node_id,
           osn.memory_node_id,
           osn.node_state_desc,
           omn.locked_page_allocations_kb
    FROM sys.dm_os_memory_nodes AS omn
         INNER JOIN sys.dm_os_nodes AS osn
             ON (omn.memory_node_id = osn.memory_node_id)
    WHERE osn.node_state_desc <> 'ONLINE DAC';
    
  • Az SQL Server aktuális hibanaplója a kiszolgáló indításakor jelenti az üzenetet Using locked pages in the memory manager .

  • A DBCC MEMORYSTATUS kimenet memóriakezelő szakasza az AWE Allocated elem nemero értékét jeleníti meg.

Az SQL Server több példánya

Ha az adatbázismotor több példányát futtatja, a memória kezeléséhez különböző módszerek használhatók:

  • Használja a max server memory (MB) az összes esetben a memóriahasználat szabályozására, ahogy azt a korábban részleteztük. Hozza létre az egyes instanciák maximális beállításait, ügyelve arra, hogy a teljes megengedett memória ne haladja meg a számítógép fizikai memóriáját. Érdemes lehet az egyes példányok számára a várt számítási feladat vagy adatbázis méretével arányos memóriát biztosítani. Ennek a megközelítésnek az az előnye, hogy amikor új folyamatok vagy példányok indulnak el, a szabad memória azonnal elérhető lesz számukra. A hátránya, hogy ha nem futtatja az összes példányt, a futó példányok egyike sem fogja tudni használni a fennmaradó szabad memóriát.

  • Használja a min server memory (MB) az összes esetben a memóriahasználat szabályozására, ahogy azt a korábban részleteztük. Hozzon létre minimális beállításokat az egyes példányokhoz, hogy ezeknek a minimumoknak az összege 1–2 GB-kal kevesebb legyen, mint a gép teljes fizikai memóriája. Előfordulhat, hogy ezeket a minimumokat a példány várható terhelésével arányosan állapítja meg. Ennek a megközelítésnek az az előnye, hogy ha nem minden példány fut egyszerre, a futó példányok használhatják a fennmaradó szabad memóriát. Ez a megközelítés akkor is hasznos, ha egy másik memóriaigényes folyamat van a számítógépen, mivel ez biztosítaná, hogy az SQL Server legalább ésszerű mennyiségű memóriát kapjon. A hátránya az, hogy amikor egy új példány (vagy bármely más folyamat) elindul, a futó példányok memóriájának felszabadítása eltarthat egy ideig, különösen akkor, ha ehhez vissza kell írniuk a módosított lapokat az adatbázisukba.

  • Használja mindkettőt, a max server memory (MB) és a min server memory (MB) az egyes példányok memóriahasználatának szabályozására, hogy megfigyelje és finomhangolja az egyes példányok maximális kihasználtságát és minimális memóriavédelmét a lehetséges memóriakihasználtsági szintek széles skáláján belül.

  • Ne tegyen semmit (nem ajánlott). A számítási feladat első példányai általában az összes memóriát lefoglalják. Előfordulhat, hogy az inaktív példányok vagy a később elindított példányok csak minimális mennyiségű memóriával futnak. Az SQL Server nem próbálja kiegyensúlyozni a memóriahasználatot a példányok között. A windowsos memóriaértesítési jelekre azonban minden példány válaszol a memóriaigény méretének módosításához. A Windows nem egyensúlyozza a memóriát az alkalmazások között a Memóriaértesítés API-val. Csupán globális visszajelzést ad a rendszer memóriájának rendelkezésre állásáról.

Ezeket a beállításokat a példányok újraindítása nélkül módosíthatja, így könnyedén kísérletezhet a használati minta legjobb beállításainak megtalálásával.

Példák

Egy. A kiszolgáló maximális memóriabeállításának beállítása 4 GB-ra

Az alábbi példa 4096 MB-ra vagy 4 GB-ra állítja a max server memory (MB) beállítást. Bár a sp_configure megadja az opció nevét mint max server memory (MB), kihagyhatja a (MB).

EXECUTE sp_configure 'show advanced options', 1;
GO

RECONFIGURE;
GO

EXECUTE sp_configure 'max server memory', 4096;
GO

RECONFIGURE;
GO

Ez az új memóriakorláthoz Configuration option 'max server memory (MB)' changed from 2147483647 to 4096. Run the RECONFIGURE statement to install. hasonló utasítást ad ki, amely azonnal érvénybe lép a RECONFIGUREvégrehajtáskor. További információ: sp_configure.

B. Az aktuális memóriafoglalás meghatározása

Az alábbi lekérdezés az aktuálisan lefoglalt memóriával kapcsolatos információkat adja vissza.

SELECT physical_memory_in_use_kb / 1024 AS sql_physical_memory_in_use_MB,
       large_page_allocations_kb / 1024 AS sql_large_page_allocations_MB,
       locked_page_allocations_kb / 1024 AS sql_locked_page_allocations_MB,
       virtual_address_space_reserved_kb / 1024 AS sql_VAS_reserved_MB,
       virtual_address_space_committed_kb / 1024 AS sql_VAS_committed_MB,
       virtual_address_space_available_kb / 1024 AS sql_VAS_available_MB,
       page_fault_count AS sql_page_fault_count,
       memory_utilization_percentage AS sql_memory_utilization_percentage,
       process_physical_memory_low AS sql_process_physical_memory_low,
       process_virtual_memory_low AS sql_process_virtual_memory_low
FROM sys.dm_os_process_memory;

C. A következő érték megtekintése: max server memory (MB)

Az alábbi lekérdezés a jelenleg konfigurált értékről és a használatban lévő értékről ad vissza információkat. Ez a lekérdezés az eredményeket attól függetlenül adja vissza, hogy a sp_configure "speciális beállítások megjelenítése" lehetőség engedélyezve van-e.

SELECT [value], [value_in_use]
FROM sys.configurations
WHERE [name] = 'max server memory (MB)';