השוואה בין תמונות מצב של הביצועים

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

במסמך הזה מוסבר איך לזהות ולפתור בעיות בביצועים של מסד הנתונים של AlloyDB Omni, באמצעות דוח שמשווה בין תמונות מצב של מדדי המערכת בשתי נקודות זמן שונות. המדדים של המערכת שמתועדים בכל תמונת מצב כוללים שימוש במעבד וירטואלי (vCPU), שימוש בזיכרון, קלט/פלט (I/O) בדיסק, מספר הטרנזקציות ואירועי המתנה.

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

דוחות של תמונת מצב של ביצועים הם כלי מובנה ב-AlloyDB Omni שמתעד ומנתח נתוני ביצועים כדי לעזור לכם לזהות את הגורם לבעיות בביצועים.

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

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

למידע על אירועי המתנה בדוח תמונת המצב של הביצועים, קראו את ההפניה לדוח תמונת המצב של ביצועי מסד הנתונים.

התפקידים הנדרשים

חשוב לוודא שיש לכם את התפקיד pg_monitor. התפקיד הזה מוקצה למשתמשי-על, שיכולים להקצות את pg_monitor למשתמשים אחרים.

לדוגמה, postgres הוא משתמש-העל כברירת מחדל. אתם יכולים להריץ את GRANT pg_monitor TO my_user בתור postgres כדי לאפשר ל-my_user להשתמש בכלי ליצירת קובץ snapshot של הביצועים, כמו שמתואר במסמך הזה.

דוח תמונת מצב של ביצועי ההתקנות

‫perfsnap הוא שם הסכימה שמכילה פונקציות SQL שמאפשרות למשתמשים ליצור תמונות מצב או דוחות. הסכימה הזו היא חלק מהתוסף g_stats של AlloyDB Omni. כדי להתקין את הדוח "תמונת מצב של הביצועים", צריך להשתמש בתפקיד של משתמש-על.

כדי להשתמש בממשקי ה-API של perfsnap, מתחברים למסד נתונים שבו המשתמשים רוצים להתקין את התוסף, ויוצרים את התוסף g_stats באמצעות הפקודה הבאה:

CREATE EXTENSION IF NOT EXISTS g_stats;

יצירת תמונת מצב של מדדי המערכת

יוצרים קובץ snapshot בתחילת עומס העבודה שמעניין אתכם ובסופו. מרווח הזמן בין שתי תמונות המצב מאפשר לעומס העבודה להתקדם, כדי שהמערכת תוכל לצבור מדדים שמשקפים את עומס העבודה. אחרי שמקבלים מדדים מדוח תמונת המצב של הביצועים, אפשר ליצור קבוצה נוספת של תמונות מצב ולחזור על התהליך.

  1. חיבור לקוח psql למכונה של AlloyDB.
  2. מריצים את SELECT perfsnap.snap(). הפלט אמור להיראות כך:

    postgres=# select perfsnap.snap();
     snap
    ------
        1
    (1 row)
    

הצגת רשימה של תמונות מצב

  1. חיבור לקוח psql למכונה של AlloyDB.
  2. מריצים את SELECT * FROM perfsnap.g$snapshots. הפלט אמור להיראות כך:

    postgres=# select * from perfsnap.g$snapshots;
     snap_id |           snap_time           | instance_id | node_id | snap_description   | snap_type | is_baseline
    ---------+-------------------------------+-------------+---------+--------------------+-----------+-------------
           1 | 2023-11-13 22:13:43.159237+00 | sr-primary  |         | Manual snapshot    | Manual    | f
           2 | 2023-11-13 22:53:40.49565+00  | sr-primary  |         | Automatic snapshot | Automatic | f
    (2 rows)
    

יצירת דוח תמונת מצב

כדי ליצור דוח שמתעד את ההבדל בין תמונות המצב 1 ו-2, לדוגמה, מריצים את
SELECT perfsnap.report(1,2).

התמונה השנייה בפעולה דיפרנציאלית לא חייבת להיות מיד אחרי התמונה הראשונה. עם זאת, חשוב לוודא שאתם יוצרים את קובץ ה-snapshot השני אחרי קובץ ה-snapshot הראשון.

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

דוח לדוגמה של תמונת מצב של הביצועים

$ psql -d postgres -U postgres
postgres=> select perfsnap.report(22, 23);

report
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 PGSNAP DB Report for:

 Snapshot details
 --------------------------------------
 Host                   i841-sr-primary-2a34f46e-06bc
 Release                14.12
 Startup Time           2024-10-08 03:23:15+00

              Snap Id    Snap Time
 ------------ ---------- ------------------------
 Begin Snap:          22 24.10.2024 04:33:56 (UTC) Automatic snapshot
   End Snap:          23 25.10.2024 04:38:56 (UTC) Automatic snapshot
    Elapsed:                      1 day 00:04:59.979321

 Database Cache sizes
 ~~~~~~~~~~~~~
            Shared Buffers:       31 GB        Block Size:         8192
      Effective Cache Size:       25 GB       WAL Buffers:        16384

 Host CPU
 ~~~~~~~~~~
       %User   %Nice %System   %Idle    %WIO    %IRQ   %SIRQ  %Steal  %Guest
     ------- ------- ------- ------- ------- ------- ------- ------- -------
        1.07    0.22    0.91   97.40    0.09    0.00    0.31    0.00    0.00

 Host Memory
 ~~~~~~~~~~~~
              Total Memory:       63 GB
          Available Memory:       11 GB
               Free Memory:      726 MB
            Buffers Memory:     3706 MB

 Load profile (in bytes)
 ~~~~~~~~~~~~~~~~~~~~~~~            Per Second         Per Transaction
                                    ------------       ---------------
                     Redo size:         63083.64               4489.93
                 Logical reads:          1961.21                139.59
                 ...

 Response Time Profile (in s)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 CPU time:               5399 (   0.39%)
 Wait time:           1386906 (  99.61%)
 Total time:           1392306

 Backend Processes Wait Class Breakdown (in s)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 IO                   119.300 (  98.91%)
 LWLock                 1.305 (   1.08%)
 IPC                     .010 (   0.01%)
 Lock                    .000 (   0.00%)

 Backend Processes Wait Information
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Event                                          Class         Waits      Time (us)      Avg (us)
 -------------------------------------- ------------- ------------- -------------- -------------
 CPU                                                                    1995948632
 WALInsert                                     LWLock             1           6656          6656

 Vacuum Information
 ~~~~~~~~~~~~~~~~~~~
             Num Analyze operations:             1976
              Num Vacuum operations:             3435

 Per Database Information
 ~~~~~~~~~~~~~~~~~~~~~~~~~
 Name                      Commits       Rollbacks     BlkRds        Blkhits       TempFiles     TempBytes
 ------------------------- ------------- ------------- ------------- ------------- ------------- -------------
 bench                             27939             0             0       7823038             0       0 bytes
 postgres                          39792             0             7      11089243             0       0 bytes

 Per Database DML & DQL Information
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Name                      Tuples returned  Tuples fetched   Tuples inserted  Tuples updated   Tuples deleted   Index splits     Index Only heap fetches   HOT updates
 ------------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ------------------------- ----------------
 bench                             16119481          4843262                0                0                0                0                        16                0
 postgres                          25415473          6327188                0               10                0                0                         0                8

 Per Database Conflict Information
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Name                      Lock Timeout  Old Snapshot  Buffer Pins   Deadlock
 ------------------------- ------------- ------------- ------------- -------------
 bench                                 0             0             0             0
 postgres                              0             0             0             0

 Per Database Vacuum Information
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Name                      Frozen XID    % Consumed    Aggregate Vacuum Gap
 ------------------------- ------------- ------------- --------------------
 bench                         179460916         9.00%         20539084
 postgres                      179339239         9.00%         20660761

 Per Database Sizing Information
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                    Conn.
 Name                 Collation     Limit   Tablespace           DB Size    Growth
 -------------------- ------------- ------- -------------------- ---------- ----------
 bench                C.UTF-8            -1 pg_default                80 GB    0 bytes
 postgres             C.UTF-8            -1 pg_default               135 MB    0 bytes

 Backend Wait Event Histogram
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Event                                          Class       Waits    <= 1us    <= 2us    <= 4us    <= 8us   <= 16us   <= 32us   <= 64us  <= 128us  <= 256us  <= 512us
 -------------------------------------- ------------- ----------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------
 WALInsert                                  LWLock             1         0         0         0         0         0         0         0         0         0         0

 Background Wait Event Histogram
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Event                                          Class       Waits    <= 1us    <= 2us    <= 4us    <= 8us   <= 16us   <= 32us   <= 64us  <= 128us  <= 256us  <= 512us
 -------------------------------------- ------------- ----------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------
 WALInsert                                  LWLock           542       107       174        39       113        93         8         1         1         0         1

 Write Ahead Log (WAL) Statistics
 --------------------------------
 Records       Full Page Images   Bytes        Buffers Full   Write         Sync          Write Time    Sync Time
 -----------   ----------------   -----------  ------------   -----------   -----------   -----------   -----------
     2936305                100     805989345             0             0             0             0             0

 Summary Stats (across all databases)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Name                             Value
 -------------------------------- ----------------------------------
 Buffers evicted                  0
 Commits                          1216693
 ...

 Parameter Settings
 ~~~~~~~~~~~~~~~~~~~
 Parameter                         Value
 --------------------------------- --------------------------------------------------------------
 DateStyle                            ISO, MDY
 TimeZone                             UTC
 autovacuum                           on
 work_mem                             4096

 Columnar Engine available size  Columnar Engine configured size
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                       14959MB                         19293MB

 Columnar Engine Statistics
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 name                                                       count
 ---------------------------------------------------------- ------------
 CU Populations/Refreshes                                          13197
 CU Auto Refreshes                                                 10975
 ...
 Columnar Engine Ultra-fast Cache Statistics
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Ultra-fast Cache Size (MB):                        19200
 Ultra-fast Cache Used Size (MB):                       0
 Ultra-fast Cache Block Size (MB):                     80

 ----------------------------------------------------
 Created by G_STATS v1.0.100
 ----------------------------------------------------
(xxx rows)

  

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

מחיקת תמונת מצב

כדי למחוק קובצי snapshot שהם חלק מקו בסיס קיים, צריך קודם לנקות את קו הבסיס .

כדי למחוק קובץ snapshot, מריצים את הפקודה SELECT perfsnap.delete(n). אחרי שמוחקים קובץ snapshot, אי אפשר לשחזר אותו.

סימון תמונת מצב כקו בסיס לביצועים

כדי לסמן את כל תמונות המצב עם מזהים בין 1 ל-3, לדוגמה, כקו בסיס לביצועי המערכת, מריצים את
SELECT perfsnap.make_baseline(1, 3).

ניקוי נתוני הביצועים הבסיסיים

כדי למחוק את כל תמונות המצב עם מזהים בין 1 ל-3, לדוגמה, מריצים את הפקודה SELECT perfsnap.clear_baseline(1, 3).

אופטימיזציה של ביצועי מסד הנתונים באמצעות תוצאות של דוחות תמונת מצב

כדי לשפר את הביצועים של מסד הנתונים ב-AlloyDB:

  1. כדאי ליצור תמונות מצב של בסיס נתונים כשהוא לא פעיל או כשהוא פועל בעומס ממוצע.
  2. מפעילים את עומס העבודה או את השאילתה שרוצים לשפר את הביצועים שלהם.
  3. כשהשימוש במשאבים של עומס העבודה או השאילתה מגיע לשיא, יוצרים קבוצה נוספת של קובצי snapshot. מומלץ להשתמש באותו מרווח זמן בשני הדוחות.
  4. משווים בין הדוחות שיצרתם עם שתי קבוצות של תמונות המצב ומזהים שינויים שיכולים לשפר את הביצועים. למידע נוסף על המלצות לביצועים, קראו את המאמר המלצות לאופטימיזציה של ביצועי מסד הנתונים.

המלצות לאופטימיזציה של ביצועי מסד הנתונים

בטבלה הבאה מפורטים הקטעים בדוח תמונת המצב של הביצועים והשיפורים המומלצים לכל קטע בדוח. למידע נוסף על החלקים של דוח תמונת המצב של הביצועים ועל אירועי ההמתנה, קראו את המסמך בנושא דוח תמונת המצב של ביצועי מסד הנתונים.

קטע השדה בדוח תיאור השדות בדוח המלצות לאופטימיזציה
פרטי תמונת המצב פרטי תמונת המצב מספק את המארח, גרסת ההפצה שתואמת ל-PostgreSQL ואת הזמן שבו המכונה פועלת. לא רלוונטי
מזהה תמונת המצב מציג את המזהה ואת נקודת הזמן של תמונות המצב ששימשו ליצירת הדוח הזה. לא רלוונטי
תובנות לגבי המערכת מעבד (CPU) מארח פרטים על ניצול המעבד (CPU) של המארח. אם ניצול המעבד (CPU) גדול מ-80%, מומלץ לעבור למערכת עם יותר מעבדי vCPU.
זיכרון המארח פרטים על ניצול הזיכרון במארח. אם הזיכרון הפנוי קטן מ-15%, מומלץ להגדיל את הנפח לגודל הזמין הבא.
טעינת פרופיל מונה את המונים שעוזרים לאפיין את עומס העבודה מבחינת כתיבה מראש ביומן (WAL) שנוצר, דרישות קלט/פלט וניהול החיבורים. אם הקריאות הפיזיות גבוהות מהקריאות הלוגיות, כדאי לשקול להגדיל את הגודל הזמין הבא כדי לתמוך במטמון נתונים גדול יותר.
פירוט של זמן התגובה וסוג ההמתנה פירוט הזמן שבו תהליכי Postgres פעלו במהלך עומס העבודה. לדוגמה, אם התהליכים נמצאים בעיקר במצב המתנה, כדאי להתמקד בקיצור זמן ההמתנה לקלט/פלט.
מידע על עומס העבודה במסד הנתונים מידע על עומס העבודה בכל מסד נתונים מדדים עיקריים לכל מסד נתונים, כולל ביצוע שינויים, ביטול שינויים, יחס היטים ומידע על טבלאות זמניות ופעולות מיון. אם יש הרבה חזרות לגרסה קודמת, כדאי לבדוק את האפליקציה.
מידע על DML ו-DQL לכל מסד נתונים מונים לפעולות של שאילתות. הגדירו את עומס העבודה כעומס קריאה או כעומס כתיבה.
מידע על התנגשויות במסד הנתונים מונים לבעיות נפוצות באפליקציות ובמסדי נתונים. לאתר בעיות באפליקציה אם יש מבוי סתום.
מידע על גודל
מסד הנתונים
מראה כמה מסד הנתונים גדל במרווח הזמן שבין שתי תמונות המצב. בשדה הזה אפשר גם לראות אם הוגדרו מגבלות חיבור למסד הנתונים. אם מסד הנתונים גדל יותר מדי, צריך לאתר את הבעיות באפליקציה.
מידע על שואב האבק מידע על שואב האבק פרטים של קלט/פלט ומונים לפעולות ואקום. כברירת מחדל, AlloyDB מבצעת פעולות VACUUM מותאמות. אתם יכולים לשנות חלק מהגדרות ה-VACUUM כך שיתאימו לעומס העבודה שלכם. לדוגמה, צמצמו את פעולות ה-vacuum אם יותר מדי קלט/פלט מוקדש לבקשות האלה.
מידע על פקודת VACUUM לכל מסד נתונים המידע הבא מוצג:
  • הגיל הנוכחי של datfrozenxid (מזהי העסקאות הישנים ביותר שלא הוקפאו) של כל מסד נתונים, או מספר העסקאות מ-datfrozenxid ועד למזהה העסקה הנוכחית.
  • מזהי עסקאות שהופשרו מתוך כל מזהי העסקאות.
  • התוצאה של autovacuum_freeze_max_age - age(pg_database.datfrozenxid), שמציינת את פערי הגילאים המשוערים (בעסקאות) בזמן של תמונת המצב השנייה, כשמופעל autovacuum כדי למנוע גלישות ברמה של צבירת מסד נתונים.
אם הגיל של השדה Frozen XID ישן מדי, או אם אחוז הטרנזקציות שנוצלו קרוב ל-90%, כדאי לשקול לבצע vacuuming. אם הפער המצטבר של ה-vacuum מצטמצם, סימן ש-Postgres יאכוף vacuum כדי למנוע wraparound.
פרטי ההמתנה של תהליכי מסד הנתונים מידע מפורט על תהליכים
ברקע וב-backend
פרטים על כל ההמתנות של תהליכי הקצה העורפי והתהליכים ברקע במרווח הזמן של הדוח. המידע כולל את זמן ההמתנה המצטבר, זמן המעבד (CPU) והזמן הממוצע לכל סוג המתנה. לדוגמה, כדי להפחית את זמן ההמתנה ב-WALWrite, מגדילים את מספר ה-wal_buffers שזמינים למסד הנתונים.
היסטוגרמה מפורטת של אירועי המתנה ברקע ובקצה העורפי הוא נכלל בדוח "תמונת מצב של הביצועים" כברירת מחדל. הרשימה מכילה את ההיסטוגרמה של אירועי ההמתנה לתהליכים בקצה העורפי וברקע, שמחולקים ל-32 קטגוריות, ממיקרו-שנייה אחת ועד יותר מ-16 שניות. מאתרים את אירועי ההמתנה ובודקים אם יש יותר מדי אירועי המתנה בקטגוריית זמן ההמתנה הארוך יותר. יכול להיות שיש יותר מדי אירועי המתנה או שכל אירוע המתנה נמשך יותר מדי זמן.
נתונים סטטיסטיים שונים נתונים סטטיסטיים של כתיבה מראש ביומן (WAL) סיכום הנתונים הסטטיסטיים של WAL. אם זמן הסנכרון ארוך מדי, אפשר לשנות את הדגלים הרלוונטיים לניהול מסד הנתונים (GUC) כדי לשפר את עומס העבודה. ‫GUC היא תת-המערכת של PostgreSQL שמטפלת בהגדרות השרת.
נתונים סטטיסטיים מסכמים (בכל מסדי הנתונים) סיכום של כל הפעולות במסד הנתונים שמתרחשות במהלך מרווח הזמן של תמונת המצב. לא רלוונטי
הגדרות הפרמטרים הגדרות הפרמטרים פרמטרים מרכזיים של הגדרת Postgres בזמן תמונת המצב בסיום. בודקים את הגדרות הפרמטרים של GUC (הדגלים לניהול מסד נתונים של Postgres) כדי לראות אם הערכים לא צפויים או לא מומלצים.

מגבלות

  • כדי למנוע ניפוח של המקום, אפשר ליצור באופן ידני עד 2,500 קובצי snapshot במכונה אחת. ניפוח נפח האחסון מבטיח שתמונות המצב לא יתפסו יותר מדי נפח אחסון במסד הנתונים.

  • אם מספר קובצי ה-snapshot חורג מהמגבלה, AlloyDB Omni מוחק את כל קובצי ה-snapshot הידניים שנוצרו לפני יותר מ-90 יום. כדי לא לחרוג ממגבלת תמונות המצב, צריך למחוק תמונות מצב מיותרות לפני שיוצרים תמונת מצב חדשה.

  • ‫AlloyDB Omni מנקה מדי פעם תמונות מצב ידניות שנוצרו לפני יותר מ-90 יום.

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