עבודה עם קובצי יומן WAL של מסד נתונים של PostgreSQL

‫Datastream קורא את יומן הכתיבה מראש (WAL) של PostgreSQL כדי לתעד ולשכפל שינויים בנתונים ברמת השורה מטבלאות המקור. שרת מסד הנתונים שומר כל שינוי בעסקה בקובצי WAL. כדי למנוע זמן אחזור ארוך בסטרימינג וניצול מלא של נפח האחסון, אתם יכולים להגדיר את הפרמטרים של שמירת WAL, זמן קצוב לתפוגה ומשבצת שכפול ולשפר את קצב הגידול של קובץ היומן.

הגדרת פרמטרים לקובצי WAL של PostgreSQL

מומלץ להחיל את הגדרות התצורה הבאות על מסד הנתונים של PostgreSQL:

  • ‫max_slot_wal_keep_size: מגדירים את הפרמטר הזה (זמין רק ב-PostgreSQL מגרסה 13 ומעלה) כדי להגביל את נפח האחסון שמשמש את משבצת הרפליקציה. זה חשוב במיוחד לטרנזקציות ארוכות, שבמקרים קיצוניים יכולות לגרום לכך שקובץ ה-WAL יתפוס את כל נפח האחסון ומסד הנתונים יקרוס.

  • ‫statement_timeout: מגדירים את הפרמטר הזה לערך שנבחר כדי לצמצם את זמן האחזור שנגרם בגלל טרנזקציות ארוכות. אפשר גם להשתמש ב-statement_timeout כאמצעי זהירות חלופי למסדי נתונים שלא תומכים ב-max_slot_wal_keep_size.

  • wal_sender_timeout: מגדירים את הפרמטר הזה לערך 0 (כדי להשבית את הזמן הקצוב לתפוגה) או לערך שגדול מ-10 דקות או שווה ל-10 דקות.

אם אתם מתכננים ליצור יותר מ-10 מקורות נתונים, או אם מספר משבצות השכפול הלוגי שמשמשות משאבים אחרים בנוסף למספר מקורות הנתונים המתוכננים הוא יותר מ-10, הקפידו לשנות את הפרמטרים הבאים:

  • ‫max_replication_slots: מגדילים את הערך של הפרמטר הזה, בהתאם למספר משבצות השכפול שהוגדרו למסד הנתונים (צריך משבצת שכפול אחת לכל סטרימינג). אפשר להגדיר את max_replication_slots רק כשהשרת מופעל.

  • ‫max_wal_senders: מגדילים את הערך של הפרמטר הזה, כך שהוא יהיה גדול מהערך של הפרמטר max_replication_slots. אפשר להגדיר את max_wal_senders רק כשמפעילים את השרת.

אופטימיזציה של קובצי יומן WAL

כדי למנוע זמן אחזור גבוה של הסטרימינג וגידול מהיר בגודל של קובצי היומן של WAL כשמשכפלים נתונים ממקור PostgreSQL, כדאי ליישם את אמצעי הזהירות הבאים:

  • הימנעו מפעולות גדולות שפועלות לאורך זמן, כי הן יכולות להגדיל באופן משמעותי את קובץ ה-WAL.
  • משתמשים בטבלאות UNLOGGED או TEMPORARY במהלך פעולות באצווה.
  • בודקים את הגדרות ה-WAL ואולי כדאי להפחית את תדירות נקודות הבדיקה. מידע נוסף זמין במאמר הגדרת WAL.
  • כדאי לבדוק אם יש פעולות DELETE גדולות ולשקול להחליף אותן בפעולות TRUNCATE. כך אפשר לצמצם משמעותית את נתוני קובץ ה-WAL, אבל צריך להיזהר כי Datastream לא משכפל פעולות TRUNCATE.

המאמרים הבאים