איך פועלים דוחות תמונת מצב של הביצועים
דוחות תמונת מצב של הביצועים הם כלי מובנה ב-AlloyDB Omni שמיועד ללכידה ולניתוח של נתוני ביצועים, כדי לעזור לכם לזהות את הגורם לבעיות בביצועים.
בדוחות של תמונת מצב של ביצועים מוצגים מדדים של מסד נתונים בין שני חותמות זמן בדוח אחד. אתם יכולים להשתמש במידע שבדוח תמונת מצב של הביצועים כדי לזהות בעיות בביצועים של המופע של דוח תמונת המצב של הביצועים, כמו ירידה בביצועים של מסד הנתונים בשעות מסוימות ביום או ירידה בביצועים לאורך תקופת זמן מסוימת.
בעזרת דוח תמונת המצב של הביצועים, אפשר להשוות את המדדים לנקודת בסיס של ביצועים כדי לקבל תובנות לגבי מדדי הביצועים של עומס העבודה. התובנות האלה יכולות לעזור לכם לבצע אופטימיזציה של ביצועי מסד הנתונים או לפתור בעיות שקשורות אליהם. נתוני בסיס הם קבוצה מותאמת אישית של תמונות מצב של מסד נתונים שמודדות את הביצועים וההתנהגות הרגילים של מסד נתונים עבור הגדרה ועומס עבודה ספציפיים.
מידע על אירועי המתנה בדוח תמונת המצב של הביצועים זמין במאמר הפניה לדוח תמונת המצב של ביצועי מסד הנתונים.
התפקידים הנדרשים
מוודאים שיש לכם את התפקיד pg_monitor.
התפקיד הזה מוענק למשתמשי-על, שיכולים להעניק את pg_monitor למשתמשים אחרים.
לדוגמה, postgres הוא משתמש העל כברירת מחדל. כדי לאפשר ל-my_user להשתמש בכלי ליצירת תמונת מצב של הביצועים כמו שמתואר במסמך הזה, אפשר להריץ את הפקודה GRANT pg_monitor TO my_user בתור postgres.
דוח תמונת מצב של ביצועים
perfsnap הוא שם הסכימה שמכילה פונקציות SQL שמאפשרות למשתמשים לצלם תמונות מצב או ליצור דוחות. הסכימה הזו היא חלק מהתוסף AlloyDB Omni g_stats. משתמשים בתפקיד סופר-אדמין כדי להתקין את הדוח 'תמונת מצב של ביצועים'.
כדי להשתמש בממשקי ה-API של perfsnap, מתחברים לכל מסד נתונים שבו המשתמשים רוצים להתקין את התוסף, ויוצרים את התוסף g_stats באמצעות הפקודה הבאה:
CREATE EXTENSION IF NOT EXISTS g_stats;
יצירת תמונת מצב של מדדי המערכת
יוצרים קובץ snapshot בתחילת עומס העבודה שמעניין אתכם ובסופו. מרווח הזמן בין שתי התמונות מאפשר לעומס העבודה להתקדם מספיק כדי שהמערכת תוכל לצבור מדדים שמשקפים את עומס העבודה. אחרי שמקבלים מדדים מדוח תמונת המצב של הביצועים, אפשר לצלם עוד תמונות מצב ולחזור על התהליך.
- חיבור לקוח
psqlלמופע AlloyDB מריצים את
SELECT perfsnap.snap(). הפלט אמור להיראות כך:postgres=# select perfsnap.snap(); snap ------ 1 (1 row)
צפייה ברשימת תמונות המצב
- חיבור לקוח
psqlלמופע AlloyDB מריצים את
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).
התמונה השנייה בגיבוי דיפרנציאלי לא חייבת להיות מיד אחרי התמונה הראשונה. עם זאת, חשוב לוודא שהתמונה השנייה של מצב המערכת נשמרת בהפרש אחרי התמונה הראשונה.
דוח סיכום הביצועים שנוצר אמור להיראות כמו הדוגמה הבאה (חלקה):
דוגמה לדוח תמונת מצב של הביצועים
$ psql -d postgres -U alloydbsuperuser
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)
מידע על שדות הדוחות והמלצות לאופטימיזציה של הביצועים זמין במאמר המלצות לאופטימיזציה של ביצועי מסד הנתונים. מידע נוסף על אירועי המתנה בדוחות תמונת מצב של ביצועים זמין במאמר הפניה לדוח תמונת מצב של ביצועי מסד נתונים.
מחיקת תמונת מצב
כדי למחוק תמונות מצב שכלולות בבסיס נתונים קיים, צריך לנקות את בסיס הנתונים .
כדי למחוק תמונת מצב, מריצים את הפקודה SELECT perfsnap.delete(n). אחרי שמוחקים תמונת מצב, אי אפשר לשחזר אותה.
סימון תמונת מצב כנקודת השוואה לביצועים
כדי לסמן את כל תמונות המצב עם מזהים בין 1 ל-3, למשל, כנקודת בסיס לביצועי המערכת, מריצים את הפקודה SELECT perfsnap.make_baseline(1, 3).
מחיקת נתוני הבסיס של הביצועים
כדי למחוק את כל נקודות הבסיס עם מזהים בין 1 ל-3, למשל, מריצים את הפקודה
SELECT perfsnap.clear_baseline(1, 3).
אופטימיזציה של ביצועי מסד הנתונים באמצעות תוצאות של דוח תמונת מצב
כדי לשפר את הביצועים של מסד נתונים ב-AlloyDB, פועלים לפי השלבים הבאים:
- יוצרים תמונות מצב של קו הבסיס כשהמסד נתונים בלי פעילות או כשהעומס הממוצע עליו נמוך.
- מפעילים את עומס העבודה או את השאילתה שרוצים לשפר את הביצועים שלהם.
- כשעומס העבודה או השאילתה מגיעים לשיא השימוש במשאבים, יוצרים עוד קבוצה של תמונות מצב. מומלץ להשתמש באותו מרווח זמן בשני הדוחות.
- משווים בין הדוחות שיצרתם עם שני סטים של תמונות מצב ומזהים שינויים שיכולים לשפר את הביצועים. מידע נוסף על המלצות לשיפור הביצועים זמין במאמר המלצות לאופטימיזציה של ביצועי מסד הנתונים.
המלצות לאופטימיזציה של ביצועי מסד הנתונים
בטבלה הבאה מפורטים הקטעים בדוח 'תמונת מצב של ביצועים' והשיפורים המומלצים לכל קטע בדוח. מידע נוסף על הקטעים בדוח תמונת המצב של הביצועים ועל אירועי ההמתנה זמין במאמר הפניה לדוח תמונת המצב של ביצועי מסד הנתונים.
| קטע | השדה בדוח | תיאור השדה בדוח | המלצות לאופטימיזציה |
|---|---|---|---|
| פרטי תמונת המצב | פרטי תמונת המצב | הפלט כולל את המארח, את גרסת ההפצה שתואמת ל-PostgreSQL ואת השעה שבה המכונה הופעלה. | לא רלוונטי |
| מזהה תמונת המצב | רשימה של המזהה והנקודה בזמן של תמונות המצב שמשמשות ליצירת הדוח הזה. | לא רלוונטי | |
| תובנות לגבי המערכת | מעבד המארח | פרטים על ניצול המעבד של המארח. | אם השימוש במעבד גבוה מ-80%, מומלץ לעבור למערכת עם יותר מעבדים וירטואליים. |
| זיכרון המארח | פרטים על ניצול הזיכרון של המארח. | אם הזיכרון הפנוי קטן מ-15%, מומלץ להגדיל את הגודל לערך הבא שזמין. | |
| טעינת פרופיל | מונה רשימות שעוזרות לאפיין את עומס העבודה מבחינת יצירת יומן פעולות (WAL), דרישות קלט/פלט וניהול חיבורים. | אם קריאות הנתונים הפיזיים גבוהות יותר מקריאות הנתונים הלוגיות, כדאי לשקול הגדלה של הזיכרון הזמין כדי לתמוך בשמירת נתונים במטמון. | |
| פירוט של זמן התגובה וסוג ההמתנה | פירוט של הזמן שבו תהליכי Postgres השקיעו במהלך ההרצה של עומס העבודה. | לדוגמה, אם התהליכים נמצאים בעיקר במצב המתנה, כדאי להתמקד בקיצור זמן ההמתנה של קלט/פלט. | |
| מידע על עומס העבודה במסד הנתונים | מידע על עומס העבודה בכל מסד נתונים | מדדים מרכזיים לכל מסד נתונים, כולל פעולות אישור, ביטול, יחס פגיעות ומידע על טבלאות זמניות ופעולות מיון. | אם יש הרבה חזרה לגרסה קודמת, כדאי לאבחן את האפליקציה. |
| מידע על DML ו-DQL לכל מסד נתונים | מונים של פעולות שאילתה. | הגדרת עומס העבודה כקריאה אינטנסיבית או כתיבה אינטנסיבית. | |
| מידע על התנגשות במסד הנתונים | מדדים לבעיות נפוצות באפליקציות ובמסדי נתונים. | אם יש מצב של קיפאון, מאתרים את הבעיות באפליקציה. | |
| מסד נתונים מידע על גודל |
הנתון הזה מראה את הצמיחה של מסד הנתונים במהלך המרווח בין שתי תמונות מצב. בשדה הזה מופיע גם אם הוגדרו מגבלות חיבור למסד הנתונים. | אם גודל מסד הנתונים גדול מדי, צריך לאתר בעיות באפליקציה. | |
| מידע על שואבי אבק | מידע על שואבי אבק | פרטים על קלט/פלט ועל מוני פעולות של ניקוי. | כברירת מחדל, ב-AlloyDB מתבצעת פעולת vacuuming אדפטיבית. אתם יכולים לשנות חלק מההגדרות של הניקוי כדי שיתאימו לעומס העבודה שלכם. לדוגמה, כדאי לצמצם את פעולות הריקון אם יותר מדי קלט/פלט מושקע בבקשות האלה. |
| מידע על ניקוי מסד נתונים | מוצג המידע הבא:
|
אם הערך בשדה Frozen XID ישן מדי, או אם אחוז העסקאות שבוצעו קרוב ל-90%, כדאי לבצע פעולת vacuum. אם הפער הכולל של ה-vacuum קטן, זה מצביע על כך ש-Postgres יבצע vacuum כדי למנוע מצב של wraparound. | |
| פרטי המתנה של תהליכים במסד הנתונים | מידע מפורט על תהליכי רקע ועל הקצה העורפי |
פרטים על כל ההמתנות לפי תהליכי קצה עורפי ותהליכי רקע במרווח הדוחות. המידע כולל את זמן ההמתנה המצטבר, זמן השימוש במעבד והזמן הממוצע לכל סוג המתנה. | כדי לקצר את זמן ההמתנה ב-WALWrite, למשל, מגדילים את מספר wal_buffers שזמינים למסד הנתונים. |
| היסטוגרמה מפורטת של אירועי המתנה ב-Backend וברקע | הוא נכלל בדוח תמונת המצב של הביצועים כברירת מחדל. הרשימה מכילה את ההיסטוגרמה של אירועי ההמתנה לתהליכי קצה עורפי ותהליכי רקע, שמחולקים ל-32 קטגוריות, מ-1 מיקרו-שנייה ועד יותר מ-16 שניות. | מאתרים את אירועי ההמתנה וקובעים אם יש יותר מדי אירועי המתנה בדלי של זמן ההמתנה הגדול יותר. יכול להיות שיש בעיה עם יותר מדי אירועי המתנה או עם כל זמן המתנה שנצרך. | |
| נתונים סטטיסטיים שונים | נתונים סטטיסטיים של Write Ahead Log (WAL) | סיכום של נתונים סטטיסטיים של WAL. | אם הסנכרון נמשך זמן רב מדי, כדאי לשנות את ההגדרות של מסד הנתונים (GUC) כדי לשפר את עומס העבודה. GUC הוא תת-מערכת של PostgreSQL שמטפלת בהגדרת השרת. |
| סיכום נתונים סטטיסטיים (בכל מסדי הנתונים) | סיכום של כל פעולות מסד הנתונים שמתרחשות במהלך מרווח הזמן של תמונת המצב. | לא רלוונטי | |
| הגדרות פרמטרים | הגדרות פרמטרים | פרמטרים מרכזיים להגדרת Postgres בזמן הצילום הסופי. | בודקים את הגדרות הפרמטר GUC (הדגלים של מסד הנתונים Postgres) כדי לראות אם הערכים לא צפויים או לא מומלצים. |
מגבלות
כדי למנוע ניפוח של נפח האחסון, אפשר ליצור ידנית עד 2,500 תמונות מצב במופע אחד. ניפוח נפח האחסון מבטיח שתמונות המצב לא יתפסו יותר מדי מקום אחסון במסד הנתונים.
אם מספר התמונות חורג מהמגבלה, AlloyDB Omni מוחק את כל התמונות שנוצרו ידנית לפני יותר מ-90 ימים. כדי לא לחרוג מהמגבלה על מספר תמונות המצב, צריך למחוק תמונות מצב מיותרות לפני שיוצרים תמונה חדשה.
AlloyDB Omni מנקה באופן תקופתי תמונות מצב ידניות שנוצרו לפני יותר מ-90 ימים.