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

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

העברת שאילתות בצורה שקופה

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

  • עומסי עבודה היברידיים (HTAP): אתם מריצים שאילתות של דיווח או ניתוח, עם עקביות של קריאה-כתיבה, באותו מסד נתונים שמטפל בעסקאות, ואתם רוצים למנוע מקריאות יקרות להשפיע על זמן האחזור של הכתיבה.
  • אפליקציות מונוליטיות: אתם רוצים להשתמש בקיבולת של מאגר קריאה בלי לבצע רפקטורינג באפליקציה כדי להשתמש בנקודות קצה נפרדות לקריאה ולכתיבה, ועדיין נדרשת עקביות קפדנית של קריאה-כתיבה.
  • ניהול דינמי של עומס: אתם חווים עליות בלתי צפויות בתעבורת נתונים של קריאה ואתם רוצים שמסד הנתונים יפחית באופן אוטומטי את העומס על הצמתים של מאגר הקריאה כשהעומס על הצומת הראשי גבוה מדי, עם עקביות של קריאה וכתיבה.

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

  • מוודאים שאשכול AlloyDB תואם ל-PostgreSQL 17 או 18.

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

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

  • מוודאים שיש לכם תפקיד alloydbsuperuser במסד הנתונים, או שאתם מחוברים כמשתמש ברירת המחדל postgres.

הפעלת העברה שקופה של שאילתות

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

הפעלה ברמת הסשן

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

SET alloydb.enable_query_forwarding = TRUE;

הפעלה ברמת מסד הנתונים

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

ALTER DATABASE DATABASE_NAME SET alloydb.enable_query_forwarding = ON;

מחליפים את DATABASE_NAME בשם של מסד הנתונים.

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

  • העברת שאילתות שקופה חלה רק על הצהרות SELECT לקריאה בלבד.
  • השאילתה לא יכולה להשתמש בנעילות ברמת השורה, כמו אלה שמשמשות ב-SELECT ... FOR UPDATE.
  • התמיכה בהעברה שקופה של שאילתות מוגבלת להצהרות SELECT בעסקאות עם כמה הצהרות.
  • אי אפשר להפנות בשאילתות לטבלאות זמניות, לטבלאות שלא נרשמו ביומן או לטבלאות קטלוג.
  • השאילתה צריכה לעמוד במגבלות הבאות של הפונקציה:
    • השאילתה לא יכולה להכיל פונקציות תנודתיות או פונקציות בהגדרת המשתמש (UDF).
    • השאילתה לא יכולה להכיל פונקציות של ערכי SQL כמו CURRENT_DATE,‏ LOCALTIME,‏ USER או CURRENT_SCHEMA.
    • השאילתה לא יכולה להכיל ביטויי NEXTVAL().
    • השאילתה לא יכולה להכיל פונקציות או פרוצדורות של SQL.
  • כל עמודות התוצאות צריכות להשתמש בסוגי נתונים שמטמיעים פונקציות של שליחה וקבלה בינאריות.
  • שאילתה יכולה להיות מועמדת להעברה רק אם העלות התקורה שלה מינימלית בהשוואה לעלות הכוללת של השאילתה. המשמעות היא שבדרך כלל לא נכללות שאילתות שמשתמשות בסריקות אינדקס, כי התקורה שלהן בדרך כלל גבוהה יותר מהעלות של השאילתה עצמה.
  • אין תמיכה בהעברה לצומת AlloyDB במצב המתנה פעילה. צומת המתנה פעילה ב-AlloyDB הוא צומת משני ייעודי למכונות מרכזיות עם זמינות גבוהה (HA).

אימות הזכאות של שאילתה באמצעות EXPLAIN

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

EXPLAIN SELECT count(*) FROM large_table t1, large_table t2;

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

Aggregate  (cost=25000.00..25000.01 rows=1 width=8)
  ->  Nested Loop  (cost=0.00..20000.00 rows=1000000 width=0)
        ... [Standard Postgres Plan Steps] ...
Query Forwarding: Eligible. (overhead=1250.02)

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

מעקב אחרי מדדים של העברת שאילתות

כדי לוודא שהעברת שאילתות שקופה פועלת בעומס העבודה, אפשר לעקוב אחרי המדד הבא ב-Cloud Monitoring:

מדד תיאור פרטים
alloydb.googleapis.com/internal/database/postgresql/workload/distributed/tqf_query_count הספירה המצטברת של שאילתות שטופלו על ידי העברת שאילתות שקופה. שם התצוגה: מספר השאילתות של TQF
סוג המדד: מצטבר
סוג הערך: INT64
תוויות:
status: טיפול בשאילתות אם מופעלת העברה שקופה של שאילתות התווית הזו מתעדת אחד מהערכים הבאים:
  • completed: מבוצעת במופע של מאגר לקריאה.
  • fallback: בוצע בשרת הראשי.
  • disqualified: לא ניתן להעביר את ההודעה.

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