ניהול תוכניות שאילתה

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

איך זה עובד

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

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

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

שני הרכיבים העיקריים של ניהול תוכניות שאילתות הם:

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

לפני שמתחילים

  • מגדירים את הדגל google_plan_management.enabled של מסד הנתונים לערך on. מידע נוסף זמין במאמר הגדרת דגלים של מסד נתונים.
  • יוצרים את התוסף google_plan_management במסד הנתונים. מידע נוסף זמין במאמר הפעלת תוסף.
  • נותנים את ההרשאה google_plan_management_role למשתמשים במסד הנתונים שרוצים להשתמש בניהול תוכניות שאילתות ולנהל תוכניות שאילתות.

    1. נכנסים לדף Clusters של AlloyDB במסוף Google Cloud .

      כניסה לדף Clusters

    2. לוחצים על המופע הרצוי.

    3. לוחצים על AlloyDB Studio ואז על הכרטיסייה Editor 1.

    4. מזינים את השאילתה הבאה:

      GRANT google_plan_management_role TO DATABASE_USER;
      

      מחליפים את DATABASE_USER במשתמש שרוצים להקצות לו את התפקיד.

    5. לוחצים על 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

אישור תוכנית

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

אם מאשרים כמה תוכניות, שאילתת ניהול התוכניות משווה בין כל התוכניות שאושרו ובוחרת את התוכנית הכי חסכונית להרצת השאילתה.

כדי להעריך ולאשר תוכנית לשאילתה, פועלים לפי השלבים הבאים:

  1. צופים בתוכניות המעקב שנוצרו על ידי הכלי לאופטימיזציה ומזהים את המאפיין logical_query_id בתשובה.

  2. בודקים את כל התוכניות שנוצרו עבור logical_query_id. אתם יכולים לחשב את זמן הביצוע הממוצע של כל תוכנית באמצעות הערכים total_execution_time ו-num_executions, ואז להחליט איזו תוכנית הכי מתאימה לשאילתה שלכם.

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

  3. כדי לאשר את התוכנית שרוצים להחיל על השאילתה, מריצים את השאילתה הבאה:

      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 תוכניות ייחודיות, ולא מספק מדיניות שמירת נתונים.

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