במאמר הזה מוסבר איך לשפר את הביצועים של תוכנית שאילתות באמצעות ניהול תוכניות שאילתות ב-AlloyDB ל-PostgreSQL. ניהול תוכניות שאילתות עוקב באופן רציף אחרי כל תוכניות השאילתות ואחרי נתוני הביצוע שלהן במסד הנתונים. אחרי שבודקים את השאילתות ואת העלויות שמשויכות אליהן, אפשר לאשר תוכנית, שמוחלת באופן עקבי על שאילתה נתונה. הגישה הזו מבטיחה בחירה של תוכנית שאילתות חסכונית, וכך משפרת את הביצועים של השאילתות.
איך זה עובד
ב-PostgreSQL, כלי לאופטימיזציה של שאילתות בוחר תוכנית ביצוע לכל שאילתה על סמך עלויות משוערות. יש הרבה גורמים שמשפיעים על עלות השאילתה – למשל, פרמטרים של השאילתה, מורכבות השאילתה, גודל הטבלה, אינדקסים זמינים ומשאבי המערכת.
פרמטרים של שאילתות עשויים להשתנות בכל הרצה של שאילתה, ולכן בחירה דינמית של תוכנית שאילתות לא תמיד תניב תוצאות אופטימליות. כשמעבדים שאילתה, הכלי לאופטימיזציה מעריך תוכניות ביצוע שונות ומנסה לבחור את התוכנית הכי חסכונית.
שינוי פרמטרים עשוי להוביל לשינוי התוכנית. בדרך כלל התוכנית שנבחרה היא האפשרות הכי חסכונית, אבל יכול להיות שייבחרו תוכניות פחות חסכוניות, מה שיוביל לביצועים נמוכים של השאילתות. ניהול תוכניות שאילתות עוזר לכם להבין את הדפוסים והתוכניות שנוצרו על ידי הכלי לאופטימיזציה, ומאפשר לכם לראות כל תוכנית כדי לקבל החלטות מושכלות.
שני הרכיבים העיקריים של ניהול תוכניות שאילתות הם:
- מאגר תוכניות של שאילתות
- כשמפעילים את ניהול תוכניות השאילתות במסד הנתונים, מאגר התוכניות מתחיל לעקוב אחרי תוכניות היסטוריות וסטטיסטיקות של ביצועים במסד הנתונים. מאגר תוכניות השאילתות מספק נראות לגבי הביצועים של תוכנית השאילתות.
- ניהול תוכניות
- אחרי שבודקים את התוכניות הזמינות, רכיב ניהול התוכניות מאפשר לאשר תוכנית אחת או יותר לתבנית שאילתה ספציפית. ניהול תוכניות שאילתה עוקב אחרי התוכניות שאושרו, ומוודא שכשהשאילתה מופעלת בהמשך, האופטימיזציה של השאילתה משתמשת רק באחת מהתוכניות שאושרו. אם אושרו כמה תוכניות, מערכת AlloyDB בוחרת ומפעילה את התוכנית עם העלות המשוערת הכי נמוכה.
לפני שמתחילים
- מגדירים את הדגל
google_plan_management.enabledשל מסד הנתונים לערךon. מידע נוסף זמין במאמר בנושא הגדרת דגלים של מסד נתונים. - יוצרים את התוסף
google_plan_managementבמסד הנתונים. מידע נוסף זמין במאמר הפעלת תוסף. נותנים הרשאת
google_plan_management_roleלמשתמשים במסד הנתונים שרוצים להשתמש בניהול תוכניות שאילתות ולנהל תוכניות שאילתות.נכנסים לדף Clusters במסוף Google Cloud של AlloyDB.
לוחצים על המופע הרצוי.
לוחצים על AlloyDB Studio ואז על הכרטיסייה Editor 1.
מזינים את השאילתה הבאה:
GRANT google_plan_management_role TO DATABASE_USER;מחליפים את
DATABASE_USERבמשתמש שרוצים להקצות לו את התפקיד.לוחצים על Run.
צפייה בתוכניות של שאילתות שבמעקב
ניהול תוכניות שאילתות מספק תצוגה של תוכניות שאילתות שבה מוצגות כל תוכניות השאילתות שעוקבים אחריהן, זמני הביצוע שלהן ומידע נוסף. תוכנית שאילתה שעוקבים אחריה היא תוכנית שאילתה שנוצרת על ידי הכלי לאופטימיזציה ונשמרת במאגר התוכניות.
כדי לראות תוכניות היסטוריות שעוקבים אחריהן, מריצים את השאילתה הבאה:
SELECT * FROM google_plan_management.tracked_plans_view;
התגובה לשאילתה תהיה דומה לתגובה הבאה:
db_id | 5
db_name | postgres
user_id | 16392
user_name | postgres
logical_query_id | 15480571796188147798
plan_id | 4740866759615354783
query | SELECT c1, c2, c3 FROM t1 WHERE c1 = 1;
plan | Seq Scan on public.t1 +
| Output: c1, c2, c3 +
| Filter: (t1.c1 = ?)
total_execution_time | 0.003937501
num_executions | 1
creation_time | 2024-11-06 16:52:25.200737+00
last_used_time | 2024-11-06 16:52:25.200737+00
השבתת מעקב אחר תוכנית שאילתה
אם אתם לא רוצים שהכלי לניהול תוכניות שאילתות יעקוב אחרי תוכניות השאילתות שנוצרות על ידי האופטימיזציה, אתם צריכים להשבית את google_plan_management.enable_track_plansהדגל של מסד הנתונים. הדגל הזה מופעל כברירת מחדל, ואנחנו ממליצים להשאיר אותו מופעל. למידע נוסף, אפשר לעיין במאמר בנושא הגדרת דגלים של מסד נתונים.
צפייה בתוכניות מנוהלות
אפשר לראות את כל השאילתות והתוכניות שמנוהלות על ידי הכלי לניהול תוכניות שאילתות, כולל תוכניות שאושרו ונדחו.
כדי להציג תוכניות מנוהלות, מריצים את השאילתה הבאה:
SELECT * FROM google_plan_management.managed_plans_view;
התגובה לשאילתה תהיה דומה לתגובה הבאה:
db_id | 5
db_name | postgres
user_id | 16392
user_name | postgres
logical_query_id | 15480571796188147798
plan_id | 4740866759615354783
status | approved
אישור תוכנית
הכלי לאופטימיזציה בוחר תוכנית שאילתה באופן דינמי, כלומר יכול להיות שהוא יבחר תוכניות שאילתה שונות לאותה שאילתה בזמנים שונים. כדי לאכוף בחירה עקבית של תוכנית, אפשר להשתמש בניהול תוכניות שאילתה כדי לאשר תוכנית שאילתה אחת או יותר עבור שאילתה נתונה.
אם מאשרים כמה תוכניות, כלי ניהול התוכניות משווה בין כל התוכניות שאושרו ובוחר את התוכנית הכי חסכונית להרצת השאילתה.
כדי להעריך ולאשר תוכנית לשאילתה, פועלים לפי השלבים הבאים:
צופים בתוכניות המעקב שהאופטימיזציה יצרה ומזהים את המאפיין
logical_query_idבתשובה.בודקים את כל התוכניות שנוצרות עבור
logical_query_id. אפשר לחשב את זמן הביצוע הממוצע של כל תוכנית באמצעות הערכיםtotal_execution_timeו-num_executions, ואז להחליט איזו תוכנית הכי מתאימה לשאילתה.העמודה
planכוללת פרטים נוספים כמו האינדקס שבו נעשה שימוש או שיטת המיון שבה נעשה שימוש, שיכולים לעזור לכם להחליט על תוכנית שאילתה.מריצים את השאילתה הבאה כדי לאשר את התוכנית שרוצים להחיל על השאילתה:
SELECT google_plan_management.approve_plan(QUERY_ID, PLAN_ID);מחליפים את מה שכתוב בשדות הבאים:
-
QUERY_ID:logical_query_idהייחודי של השאילתה. יכול להיות שמזהה שאילתה אחד משויך לכמה מזהי תוכנית. -
PLAN_ID: המזהה הייחודיplan_idשל השאילתה.
-
דחיית תוכנית
אתם יכולים לדחות כל תוכנית שאושרה לשאילתה ולהפסיק את ניהול תוכניות השאילתות כך שהתוכנית לא תחול על השאילתה. תוכניות שנדחו לא נמחקות, והן זמינות ברשימת התוכניות שבמעקב.
כדי לדחות תוכנית שאושרה, מריצים את השאילתה הבאה:
SELECT google_plan_management.deny_plan(QUERY_ID, PLAN_ID);
מחיקת תוכנית שאושרה
אפשר למחוק תוכנית שאושרה ממאגר התוכניות. כשמוחקים תוכנית שאושרה, היא לא מופיעה יותר ברשימת התוכניות המנוהלות.
כדי למחוק תוכנית שאושרה, מריצים את השאילתה הבאה:
SELECT google_plan_management.update_plan_status(QUERY_ID, PLAN_ID, 'delete');
הפסקה זמנית של השימוש בתוכניות שאושרו
אם רוצים להפסיק באופן זמני את השימוש בתוכניות שאושרו לשאילתות, צריך להשבית את google_plan_management.enable_steer_plansהדגל של מסד הנתונים. הדגל הזה מופעל כברירת מחדל. מידע נוסף זמין במאמר הגדרת דגלים של מסד נתונים.
מגבלות
- אי אפשר להשתמש בניהול תוכניות של שאילתות בטבלאות עם מחיצות או בקבוצות של הגדרות.
- ניהול תוכניות שאילתה נתמך רק במופע הראשי.
- מאגר תוכניות השאילתות יכול לאחסן עד 100,000 תוכניות ייחודיות, ולא מספק מדיניות שמירת נתונים.
המאמרים הבאים
- מידע נוסף על מנוע מבוסס-עמודות של AlloyDB ל-PostgreSQL
- שימוש בכלי להמלצות על אינדקסים עם Query Insights