שיפור הביצועים של שאילתות באמצעות פונקציות AI

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

התכונה "העברה חכמה לאצווה" תומכת בפונקציות ה-AI הבאות:

  • ‫ai.if: חלוקה חכמה לאצוות חלה רק על שאילתות SELECT שבהן הפונקציה נמצאת בסעיף WHERE. הוא תומך בפונקציה ai.if אחת לכל סריקה, ופועל עם סריקה ערימתית (heap scan) של רצף, אינדקס ומפת סיביות. אם שאילתה מכילה כמה סריקות של טבלאות – לדוגמה, בטבלאות, ביחסים או בביטויי טבלה נפוצים (CTE) שונים, אפשר להאיץ פונקציית ai.if אחת לכל סריקה.
  • ‫ai.rank: חלוקה חכמה לאצוות חלה רק על שאילתות SELECT שבהן הפונקציה נמצאת בסעיף ORDER BY. הוא תומך בפונקציה אחת של ai.rank בכל סריקה. אם שאילתה מכילה כמה סריקות של טבלאות – לדוגמה, בטבלאות, ביחסים או ב-CTE שונים, תוכלו להאיץ פונקציית ai.rank אחת לכל סריקה.

הפעלת עיבוד חכם באצווה לפונקציות AI

כדי להפעיל את התכונה "איסוף חכם של נתונים באצווה" לפונקציות AI, מגדירים את הדגל google_ml_integration.enable_ai_function_acceleration לערך on. הדגל הזה מושבת כברירת מחדל, והוא קובע אם מותר למפעיל השאילתות להעביר פעולות AI שעומדות בדרישות לצומת החלת פונקציית ה-AI כדי להאיץ את הביצוע. אם לא מגדירים את המדיניות או מגדירים אותה כ-off, כל פעולות השאילתה מבוצעות על ידי מנגנון הביצוע הרגיל של PostgreSQL.

אפשר להגדיר את הדגל הזה ברמת הסשן או ברמת המכונה.

כדי להפעיל את התכונה "איסוף חכם של נתונים באצווה" לפונקציות AI ברמת המכונה, משתמשים בפקודה gcloud alloydb instances update:

gcloud alloydb instances update INSTANCE_ID \
  --database-flags google_ml_integration.enable_ai_function_acceleration=on \
  --region=REGION_ID \
  --cluster=CLUSTER_ID \
  --project=PROJECT_ID

מחליפים את מה שכתוב בשדות הבאים:

  • ‫INSTANCE_ID: המזהה של המכונה שרוצים לעדכן.
  • ‫REGION_ID: מזהה האזור שבו נמצא האשכול. מידע נוסף זמין במאמר בנושא אזורים נתמכים.
  • ‫CLUSTER_ID: מזהה האשכול.
  • ‫PROJECT_ID: מזהה הפרויקט.

מידע נוסף על הגדרת דגל ברמת המכונה זמין במאמר הגדרת דגלים לניהול מסדי נתונים.

אימות של חלוקה חכמה לאצוות בפונקציות AI

כדי לוודא שהאפשרות 'אצווה חכמה' מופעלת עבור פונקציות AI, אפשר להשתמש בהצהרה EXPLAIN כדי לנתח את השאילתה.

אימות של חלוקה חכמה לקבוצות של פונקציות AI בשאילתות ai.if

בדוגמה הבאה מוסבר איך להפעיל את התכונה 'הוספה חכמה לאצווה' לפונקציות AI בסשן הנוכחי ולהריץ שאילתה באמצעות הפונקציה ai.if:

SET google_ml_integration.enable_ai_function_acceleration = on;

EXPLAIN (COSTS OFF) SELECT r.name
FROM restaurant_reviews r
WHERE ai.if('Is the following a positive review? Review: '||r.review) AND r.city = 'Los Angeles'
GROUP BY r.name
HAVING count(*) > 20
ORDER BY r.name;

כשמשתמשים בהצהרה EXPLAIN כדי לנתח את השאילתה, בתוכנית לביצוע השאילתה מופיע צומת AI Function Apply:

                                       QUERY PLAN                                       
----------------------------------------------------------------------------------------
 GroupAggregate
   Group Key: name
   Filter: (count(*) > 20)
   ->  Sort
         Sort Key: name
         ->  AI Function Apply
               Filter: ai.if((('Is the following a positive review? Review: '::text || review)), NULL::character varying)
               ->  Index Scan using idx_restaurant_reviews_city on restaurant_reviews r
                     Index Cond: ((city)::text = 'Los Angeles'::text)

אימות של אצווה חכמה לפונקציות AI בשאילתות של ai.rank

בדוגמה הבאה מוסבר איך להפעיל את התכונה 'הוספה חכמה לאצווה' לפונקציות AI בסשן הנוכחי ולהריץ שאילתה באמצעות הפונקציה ai.rank:

SET google_ml_integration.enable_ai_function_acceleration = on;

EXPLAIN (COSTS OFF) SELECT r.name, r.review
FROM restaurant_reviews r
WHERE r.city = 'Los Angeles'
ORDER BY ai.rank('Rank these reviews based on how much they emphasize high-quality ingredients. Review: ' || r.review) DESC
LIMIT 50;

כשמשתמשים בהצהרה EXPLAIN כדי לנתח את השאילתה, בתוכנית לביצוע השאילתה מופיע צומת AI Function Apply:

                                       QUERY PLAN                                       
----------------------------------------------------------------------------------------
 Limit
  ->  Sort
        Sort Key: (ai.rank(('Rank these reviews based on how much they emphasize high-quality ingredients. Review: ' || r.review'), NULL)) DESC
        ->  AI Function Apply
              ->  Bitmap Heap Scan on restaurant_reviews r
                    Recheck Cond: (city = 'Los Angeles')
                    ->  Bitmap Index Scan on idx_restaurant_reviews_city
                          Index Cond: (city = 'Los Angeles')

הצומת AIFunctionApply בתוכנית לביצוע השאילתה מציין שהשאילתה השתמשה ב-smart batching לפונקציות AI. אם הצומת הזה לא קיים, השאילתה השתמשה בהפעלה רגילה של PostgreSQL.

מגבלות

  • יש תמיכה רק בארגומנטים בסיסיים לפונקציות. בפונקציות ai.if ו-ai.rank, הארגומנט prompt חייב להיות הפניה לעמודה או מחרוזת מילולית שמשורשרת עם הפניה לעמודה. כל הארגומנטים האחרים חייבים להיות קבועים. דוגמאות לארגומנטים נתמכים של prompt:
    • ai.if(r.review)
    • ai.if('Is this true? : ' || r.review)
    • ai.rank(r.review)
    • ai.rank('Rate this review: ' || r.review)
  • יש תמיכה רק בשאילתות SELECT עם ai.if בסעיפי WHERE או ai.rank בסעיפי ORDER BY.
  • אפשר להשתמש רק בפונקציית AI אחת בכל סריקת טבלה.
  • יש תמיכה רק במודלים של Gemini שמוגדרים כברירת מחדל. מידע נוסף זמין במאמר בנושא מודלים של Gemini. כדי להשתמש במודל אחר, אתם יכולים להגדיר את הדגל google_ml_integration.default_llm_model למזהה המודל שבו אתם רוצים להשתמש.
  • התכונה זמינה רק באזורים שבהם יש תמיכה במודל gemini-2.5-flash-lite או באזורים של מודל ה-LLM שהגדרתם באמצעות הדגל google_ml_integration.default_llm_model. מידע נוסף זמין במאמר בנושא אזורים נתמכים.

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