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.