KB3074434 - תיקון: אין די זיכרון כאשר שטח הכתובות הווירטואלי של תהליך SQL Server נמוך מאוד בזיכרון זמין

חל על
SQL Server 2012 Service Pack 3 SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Enterprise Core SQL Server 2012 Standard

לאחר החלת עדכון זה, עליך להוסיף את דגל המעקב -T8075 כפרמטר אתחול כדי להפוך שינוי זה לזמין.

סימפטומים

בעת הפעלת שאילתה בגירסת 64 סיביות של Microsoft SQL Server 2012, אתה מקבל הודעת שגיאה מסוג 'אין זיכרון פנוי' הדומה להודעה הבאה SQL Server השגיאות:

הערה

הקצאת דפים נכשלה: FAIL_PAGE_ALLOCATION 513

השלמת הביצוע של שאילתות נמשכת זמן רב SOS_MEMORY_TOPLEVELBLOCKALLOCATOR ההמתנה.

כאשר תבחן את נקודות המידע הבאות, תבדוק שקיים שטח כתובות וירטואלי נמוך מאוד:

  • DBCC MEMORYSTATUS - המקטע Process/System Counts - הזיכרון הווירטואלי הזמין
  • DMV: sys.dm_os_process_memory - עמודות virtual_address_space_available_kb

ערכים אלה מתחילים כ- 8 טרה-בתים (TB) בתהליך x64 ו ממשיכים לרדת ולהישג כמה ג'יגה-בתים (GB). 

כאשר אתה נמצא בשלב שבו שטח הכתובות הווירטואלי הזמין נמוך מאוד, שאילתות המנסות לבצע הקצאת זיכרון עשויות גם להיתקל בסוג המתנה של CMEMTHREAD.

נקודות הנתונים הבאות ימשיכו לגדל לאורך זמן:

  • DMV: sys.dm_os_process_memory ו- sys.dm_os_memory_nodes - עמודות virtual_address_space_reserved_kb
  • DBCC MEMORYSTATUS - מקטע מנהל הזיכרון - VM שמור

ערכים אלה גדלה בדרך כלל במכפלות של הערך "זיכרון שרת מרבי" עד לכמעט 8 TB.

גורם

כאשר תהליך SQL Server הגיע למצב שבו Total Server Memory = Target Server Memory = max server memory, קיימים מדיניות במנהל הזיכרון של SQL Server כדי לאפשר להקצאות חדשות לבקש 8 דפי KB מרובים להצליח באופן זמני. תבנית הקצאה חוזרת בתנאי כזה עלולה לגרום לפיצול של בלוקי הזיכרון והצריכה של שטח הכתובות הווירטואלי. אם תהליך זה חוזר פעמים רבות, SQL Server הכתובות הווירטואליות יהיה מוצה, ותבחין בתסמינים שהוזכרו קודם לכן.

פתרון

מידע עדכון מצטבר

הבעיה תוקנה תחילה בעדכון המצטבר הבא של SQL Server.

המלצה: התקן את העדכון המצטבר האחרון עבור SQL Server

כל עדכון מצטבר חדש עבור SQL Server מכיל את כל התיקונים החמים ואת כל תיקוני האבטחה שנכללו בעדכון המצטבר הקודם. אנו ממליצים להוריד ולהתקין את העדכונים המצטברים האחרונים עבור SQL Server:

תיקון חם זה מונע הן את הזיכרון הפנוי והן את ההפחתה הרציפה של שטח הכתובות הווירטואלי הזמין שאתה עשוי להיתקל בו.

מצב

Microsoft אישרה שזוהי בעיה במוצרי Microsoft המפורטים בסעיף "חל על".

מידע נוסף

  • Windows 2012 R2 מאפשר שטח כתובות וירטואלי לגדול עד 128 TB. לכן, ייתכן שלא תבחין בבעיה זו בסביבות Windows 2012 R2. לקבלת מידע נוסף, עיין בנושא הבא במרכז הפיתוח של Windows:

    מגבלות זיכרון עבור Windows Windows Server אפליקציות

  • אם אתה רואה גידול מתמשך בשטח הכתובות הווירטואלי גם לאחר החלת התיקון, באפשרותך לקבוע אילו שאילתות או פעולות מבקשות קטעים גדולים של זיכרון באמצעות Page_allocated המורחב. קובץ Script לדוגמה נראה כך:

    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)
    GO
    
    
    

    בדרך כלל אלה הם גיבויי יומן רישום ופעולות תחזוקת אינדקס, המתרחשות לעתים קרובות.