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.