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

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

האצת פונקציות AI תומכת בפונקציות ה-AI הבאות:

  • ai.if: ההאצה חלה רק על שאילתות SELECT שבהן הפונקציה נמצאת בסעיף WHERE. היא תומכת בפונקציית ai.if אחת לכל סריקה, והיא פועלת עם סריקה עוקבת, סריקת אינדקס וסריקת bitmap heap. אם שאילתה מכילה כמה סריקות של טבלאות – למשל, בטבלאות שונות, ביחסים או בביטויים של טבלאות נפוצות (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 בתוכנית השאילתה מציין שהשאילתה השתמשה בהאצת פונקציות של 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. מידע נוסף זמין במאמר בנושא אזורים נתמכים.

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