Kai pritaikote šį naujinimą, turite įtraukti sekimo vėliavėlę – T8075 kaip paleisties parametrą, kad įgalintumėte šį keitimą.
Simptomai
Kai vykdote užklausą "Microsoft SQL Server 2012" 64 bitų versijoje, gaunate atminties stokos klaidos pranešimą, panašų į šį SQL serverio klaidos pranešime:
Nepavykę priskirti puslapiai: FAIL_PAGE_ALLOCATION 513
Užklausos baigia vykdyti ir susiduria su SOS_MEMORY_TOPLEVELBLOCKALLOCATOR laukia. Kai patikrinsite šiuos informacijos punktus, rasite, kad yra labai mažai galimos virtualios adresų erdvės:
-
DBCC MEMORYSTATUS – proceso/sistemos skaičiuoja sekciją – virtualioji atmintis
-
DMV: sys.dm_os_process_memory stulpelis virtual_address_space_available_kb
Šios reikšmės turi prasidėti maždaug 8 terabaitus (TB) x64 proceso metu, o toliau nulipti ir pasiekti kelis gigabaitus (GB). Kai esate stadijoje, kur galima virtualioji adresų sritis labai maža, užklausos, kurios bando atlikti atminties paskirstymą, taip pat gali susidurti su laukimo tipu CMEMTHREAD. Toliau nurodyti duomenų taškai laikui bėgant didės:
-
DMV: sys.dm_os_process_memory ir sys.dm_os_memory_nodes-stulpelis virtual_address_space_reserved_kb
-
DBCC MEMORYSTATUS – atminties tvarkytuvo sekcija – VM rezervuota
Paprastai šios reikšmės didės "Max Server Memory" reikšmės iki beveik 8 TB.
Priežastis
Kai SQL serverio procesas pasiekia būseną, kurioje iš viso serverio atmintis = paskirties serverio atmintis = Max serverio atmintis, yra "SQL Server Memory Manager" strategijų, kurios suteikia galimybę naujiems priskyrimams laikinai atlikti kelis 8 KB puslapius. Kartotinis priskyrimo raštas esant tokiai sąlygai gali sukelti atminties blokų fragmentaciją ir virtualiosios adresų erdvės naudojimą. Jei šis procesas kartojamas daug kartų, SQL serverio virtualioji adresų sritis bus išnaudota ir pastebėsite anksčiau minėtus požymius.
Sprendimas
Kaupiamojo naujinimo informacija
Problema pirmą kartą buvo išspręsta šį kaupiamąjį naujinimą SQL serverio.
Kiekvienas naujas Kaupiamasis naujinimas, skirtas "SQL Server", yra visos karštosios pataisos ir visos saugos pataisos, kurios buvo pridėtos prie ankstesnio kaupiamojo naujinimo. Rekomenduojame atsisiųsti ir įdiegti naujausius kaupiamuosius SQL serverio naujinimus:
Šios karštosios pataisos neleidžia atsirasti ir iš atminties, ir dėl besitęsiančio galimos virtualiosios adresų erdvės sumažinimo.
Statusą
"Microsoft" patvirtino, kad tai yra "Microsoft" produktų, išvardytų skyriuje "taikoma", problema.
Daugiau informacijos
-
"Windows 2012 R2" leidžia virtualiai adresų erdvę padidinti iki "128 TB". Todėl galite pastebėti šią problemą "Windows 2012 R2" aplinkose. Daugiau informacijos ieškokite temoje "Windows" kūrėjų centre:atminties ribos, skirtos "Windows" ir "Windows Server" leidimams
-
Jei matote nepertraukiamą augimą virtualiojoje adresų srityje net pritaikę pataisą, galite nustatyti, kurios užklausos arba operacijos reikalauja daug atminties gabaliukų, naudojant Page_allocated išplėstinį įvykį. Pavyzdinis scenarijus atrodo taip:
CREATE EVENT SESSION [memory_tracking] ON SERVERADD 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)GO
Paprastai tai yra žurnalų atsarginės kopijos ir indekso palaikymo operacijos, kurios dažnai pasitaiko.