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

העברת שאילתות שקופה מתאימה במיוחד לתרחישים הבאים:
- עומסי עבודה היברידיים (HTAP): אתם מריצים שאילתות של דוחות או ניתוחים, עם עקביות של read-your-writes, באותו מסד נתונים שמטפל בעסקאות, ואתם רוצים למנוע מקריאות יקרות להשפיע על זמן האחזור של הכתיבה.
- אפליקציות מונוליתיות: אתם רוצים להשתמש בקיבולת של מאגר קריאה בלי לארגן את האפליקציה מחדש כדי להשתמש בנקודות קצה נפרדות לקריאה ולכתיבה, אבל עדיין נדרשת עקביות קפדנית של קריאת הכתיבה שלכם.
- ניהול עומסים דינמי: יש לכם עליות חדות בלתי צפויות בתנועת הקריאה, ואתם רוצים שמסד הנתונים יפחית באופן אוטומטי את העומס על הצומת הראשי ויעביר את העבודה לצמתים במאגר הקריאה, עם עקביות של read-your-writes.
לפני שמתחילים
מוודאים שאשכול AlloyDB תואם ל-PostgreSQL בגרסה 17 או 18.
צריך להגדיר לפחות מכונה פעילה אחת של מאגר קריאה באשכול AlloyDB. מידע נוסף על יצירה או אימות של מכונות של מאגר קריאה זמין במאמרים יצירת מכונה של מאגר קריאה באשכול והצגת פרטי המכונה.
התפקידים הנדרשים
- חשוב לוודא שאתם מתחברים באמצעות משתמש מובנה במסד הנתונים, כמו
postgres. אי אפשר להשתמש באימות מבוסס-IAM.
הפעלת העברת שאילתות שקופה
העברת שאילתות שקופה מושבתת כברירת מחדל. אפשר להפעיל אותו באופן דינמי ברמת הסשן או ברמת מסד הנתונים בלי להפעיל מחדש את מסד הנתונים.
הפעלה ברמת הסשן
כדי להפעיל העברת שאילתות שקופה בסשן הנוכחי, מריצים את פקודת ה-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 query count סוג המדד: CUMULATIVE סוג הערך: INT64 תוויות: status: טיפול בשאילתות אם העברת שאילתות שקופה מופעלת. התווית הזו מתעדת אחד מהערכים הבאים:
|