Ak chcete povoliť túto zmenu, po použití tejto aktualizácie je potrebné pridať príznak trasovania -T8075 ako počiatočný parameter.
Príznaky
Pri spustení dotazu v 64-bitovej verzii Microsoft SQL Server 2012 sa zobrazí chybové hlásenie o nedostatku pamäti, ktoré je podobné nasledujúcemu v denníku chýb SQL Server:
Poznámka
Nepodarilo sa prideliť strany: FAIL_PAGE_ALLOCATION 513
Dokončenie dotazov trvá dlho, kým sa dokončí, a stretávajú sa s SOS_MEMORY_TOPLEVELBLOCKALLOCATOR čakaním.
Po preskúmaní nasledujúcich informačných bodov zistíte, že virtuálneho miesta adries je veľmi málo:
- DBCC MEMORYSTATUS – časť Počty procesov/systémov – Dostupná virtuálna pamäť
- DMV: sys.dm_os_process_memory – stĺpec virtual_address_space_available_kb
Tieto hodnoty začínajú okolo 8 terabajtov (TB) v procese x64 a naďalej klesajú a dosahujú niekoľko gigabajtov (GB).
Keď sa nachádzate vo fáze, keď je dostupný virtuálny priestor veľmi nízky, dotazy, ktoré sa pokúšajú vykonať vyhradenie pamäte, sa tiež môžu stretnúť s typom čakania CMEMTHREAD.
Počet nasledujúcich údajových bodov sa bude postupne zväčšovať:
- DMV: sys.dm_os_process_memory a sys.dm_os_memory_nodes – stĺpec virtual_address_space_reserved_kb
- DBCC MEMORYSTATUS - sekcia Správca pamäte - VM vyhradené
Tieto hodnoty sa zvyčajne v násobkoch hodnoty "maximálna pamäť servera" zvýšia až na takmer 8 TB.
Príčina
Keď proces SQL Server dosiahne stav, keď celková pamäť servera = pamäť cieľového servera = maximálna pamäť servera, existujú politiky v správcovi pamäte SQL Server, ktoré umožnia novým vyhradeniam dočasne úspešne požadovať viacero 8 kB stránok. Opakovaný vzor prideľovania za takýchto podmienok môže spôsobiť fragmentáciu pamäťových blokov a spotrebu virtuálneho priestoru adries. Ak sa tento proces zopakuje veľakrát, virtuálny priestor adries SQL Server sa vyčerpá a všimnete si príznaky, ktoré boli uvedené vyššie.
Riešenie
Informácie o kumulatívnych aktualizáciách
Tento problém bol prvýkrát opravený v nasledujúcej kumulatívnej aktualizácii SQL Server.
Odporúčanie: Nainštalujte najnovšiu kumulatívnu aktualizáciu pre SQL Server
Každá nová kumulatívna aktualizácia pre SQL Server obsahuje všetky rýchle opravy a opravy zabezpečenia, ktoré boli zahrnuté v predchádzajúcej kumulatívnej aktualizácii. Odporúčame stiahnuť a nainštalovať najnovšie kumulatívne aktualizácie pre SQL Server:
Táto rýchla oprava zabraňuje nedostatku pamäte a neustálemu zmenšovaniu dostupného virtuálneho priestoru adries, ktoré sa môže vyskytnúť.
Stav
Spoločnosť Microsoft potvrdila, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v časti Vzťahuje sa na.
Ďalšie informácie
Windows 2012 R2 umožňuje, aby virtuálny adresný priestor narástol až na 128 TB. Preto tento problém nemusíte pozorovať v prostrediach systému Windows 2012 R2. Ďalšie informácie nájdete v nasledujúcej téme na lokalite Windows Dev Center:
Ak aj po použití opravy pozorujete nepretržitý nárast virtuálneho priestoru adries, môžete pomocou udalosti Page_allocated extended určiť, ktoré dotazy alebo operácie požadujú veľké bloky pamäte. Vzorový skript vyzerá takto:
CREATE EVENT SESSION [memory_tracking] ON SERVER ADD EVENT sqlos.page_allocated( ACTION(package0.callstack,sqlos.cpu_id,sqlos.task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.query_hash,sqlserver.request_id,sqlserver.session_id,sqlserver.sql_text) WHERE ([number_pages]>(1))) ADD TARGET package0.event_file(SET filename=N'E:\Data\MSSQL11.MSSQLSERVER\MSSQL\Log\memory_tracking.xel') WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=PER_CPU,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF) GOZvyčajne ide o zálohovanie denníka a operácie údržby indexu, ktoré sa vyskytujú často.