מידע על ניהול זיכרון אוטומטי

בחירת גרסה של מאמר העזרה:

‫AlloyDB Omni משתמש באלגוריתמים אדפטיביים לניהול זיכרון.

אתם יכולים להגדיר את הגבול העליון של המאגר המשותף כשמפעילים את AlloyDB Omni. אם לא מגדירים את הגבול העליון, המערכת של AlloyDB Omni מגדירה באופן אוטומטי את גודל הגיבוי של מאגר הנתונים הזמני המשותף ל-80% מזיכרון המערכת. גודל הגיבוי הראשוני של מאגר הנתונים הזמני המשותף יכול להיות שונה מהגבול העליון.

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

זיכרון אוטומטי

כברירת מחדל, הפרמטר shared_buffers מוגדר לערך 0, שהוא ערך מיוחד שמגדיר את המגבלה העליונה של גודל מטמון shared buffers ל-80% מזיכרון המערכת. השימוש ב-AlloyDB Omni מתחיל ב-10% מהתקרה של shared_buffers. אם הערך של shared_buffers מוחלף בערך מותאם אישית, AlloyDB Omni מתייחס לערך הזה כגבול העליון של הגודל של shared_buffers, ומתחיל בגודל המותאם אישית שצוין.

כדי לציין גודל מותאם אישית, אפשר להגדיר את shared_buffers לערך 1GB. השיטה תלויה בסוג הפריסה:

בפריסות של קונטיינרים של Docker, משתמשים באחת מהפקודות הבאות:

  • docker run --name CONTAINER_NAME -e INITDB_ARGS="-c shared_buffers=1GB" $image

  • docker run --name CONTAINER_NAME $image -c shared_buffers=1GB

מחליפים את CONTAINER_NAME בשם שהקציתם לקונטיינר של AlloyDB Omni כשהתקנתם אותו.

אופטימיזציה של ביצועי השאילתות

ערך ברירת המחדל של הפרמטר shared_buffers מתאים לתרחישים נפוצים.

עם זאת, אתם יכולים לשנות את הערך כדי לשפר את הביצועים. אם תבחרו להסתמך על ערך ברירת המחדל shared_buffers כדי להסיק את הגבול העליון של מאגר הנתונים הזמני המשותף, תצטרכו להשתמש בערך של cgroup memory.max כדי להשפיע על החישוב.

זיכרון של מנוע מבוסס-עמודות

ה-shared_buffers הדינמי לא תלוי בזיכרון של המנוע מבוסס-העמודות. כשהמנוע מבוסס-העמודות מופעל, אפשר לחשב את הגודל הדינמי של shared_buffers על ידי הפחתת כמות הזיכרון שבה משתמש המנוע מבוסס-העמודות מ-80% מסך הזיכרון שזמין למערכת או ל-cgroup.

דפים ענקיים

דפים גדולים משפרים את הביצועים של מסד הנתונים. ‫AlloyDB Omni מנהל דפים גדולים באופן מפורש אם אפשר, אחרת הוא מסתמך על התכונה 'דפים גדולים שקופים' (THP) של מערכת ההפעלה. אם אף אחד מסוגי הדפים הגדולים לא נתמך, AlloyDB Omni חוזר לדף בגודל 4k ומציג אזהרה ביומני של קונטיינר Docker‏ docker logs $container_name עם הוראות ספציפיות להגדרת דפים גדולים. במאמר הפעלת AlloyDB Omni מוסבר איך להפעיל קונטיינר.

האזהרה נראית בערך כך:


HINT:  Please either execute the all-in-one setup script:
          docker run --rm --privileged $image setup-host
        OR manually execute:
          echo within_size | sudo tee /sys/kernel/mm/transparent_hugepage/shmem_enabled
          sudo sysctl -w vm.nr_overcommit_hugepages=1048576

ניהול זיכרון אוטומטי בזמן ריצה

‫AlloyDB Omni עוקב כל הזמן אחרי העומס על המערכת ומתאים את צריכת הזיכרון כדי לשפר את הביצועים. באופן ספציפי, יכול להיות שתבחינו במצבים הבאים:

שינוי דינמי של גודל shared_buffers
‫
AlloyDB Omni מגדיל את הגודל הדינמי של shared_buffers כשצריכת הזיכרון של המערכת נמוכה, ומקטין את הגודל כשצריכת הזיכרון של המערכת גבוהה. התוסף `g_memory` כלול בהפצה של AlloyDB Omni. כדי להפעיל את התכונה ולעקוב אחרי הגודל הדינמי של shared_buffers, מריצים את הפקודות הבאות:
CREATE EXTENSION IF NOT EXISTS g_memory;
SELECT g_dynamic_shared_size();
סגירת חיבור ל-PostgreSQL כשהזיכרון במערכת נמוך מאוד
כש-AlloyDB Omni מזהה שאין כמעט זיכרון במערכת, הוא מנסה למחוק את חיבורי PostgreSQL שצורכים הכי הרבה זיכרון עד שהעומס יחזור לרמה סבירה. כשאירוע כזה קורה, AlloyDB Omni מתעד רשומה דומה לדוגמה הבאה ביומני מאגר Docker:
WARNING: Sending SIGTERM to pid=12345 NSpid=67890 (VA size = 1024MB) (RSS size = 512MB)