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

‫Datastream משתמש ביומן העסקאות WAL (Write Ahead Log) של PostgreSQL כדי לקרוא נתונים מ-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, הקפידו לשנות את הפרמטרים הבאים:

  • 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.

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