בדף הזה מובאת סקירה כללית של סינון אדפטיבי ב-AlloyDB AI, תכונה שנועדה לבצע אופטימיזציה של חיפושי וקטורים מסוננים.
מהו סינון אדפטיבי?
סינון אדפטיבי מנתח דפוסי שאילתות והתפלגויות נתונים במהלך ביצוע השאילתה כדי לבחור באופן דינמי את אסטרטגיית הסינון היעילה ביותר, כמו סינון מוטבע או סינון מראש.
הכלי לאופטימיזציה של שאילתות ב-AlloyDB AI משתמש בניתוח מבוסס-עלות כדי לקבוע אם סינון מוטבע או סינון מראש מספקים את הביצועים הטובים ביותר בכל נקודה נתונה במהלך ביצוע השאילתה.
סוג האופטימיזציה הזה תומך בחיפושי וקטורים מסוננים של AlloyDB AI, שבהם סינון אדפטיבי עובר אוטומטית בין שימוש בווקטור לבין שימוש באינדקס מטא-נתונים, ומניב תוצאות יעילות ומדויקות ללא התערבות ידנית.
מעבר דינמי בין אסטרטגיות סינון
סינון אדפטיבי מחליף באופן אוטומטי ודינמי בין סינון מוטבע לבין אסטרטגיות של סינון מראש במהלך ביצוע השאילתה, על סמך דפוסי שאילתות ופיזור נתונים בזמן אמת. כדי לקבוע איזו אסטרטגיה מספקת את הביצועים הכי טובים בכל נקודת זמן, הכלי לאופטימיזציה של שאילתות ב-AlloyDB AI משתמש בניתוח מבוסס-עלויות.
מסינון בתוך השורה לסינון מראש
כשהכלי לאופטימיזציה קובע שסינון מראש יעיל יותר, הסינון האדפטיבי מפעיל מעבר מסינון מוטבע לסינון מראש במהלך ההפעלה. תוכנית השאילתה משתנה באופן דינמי כדי לשקף את זה.
לדוגמה, התוכנית יכולה להציג Bitmap assisted pre-filtering בשדה Execution Strategy (אסטרטגיית ביצוע) כשהכלי לאופטימיזציה קובע שסינון מראש יעיל יותר בשלב הזה של השאילתה. השינוי הדינמי הזה מתרחש כשהמערכת מסתגלת לנתונים בפועל שהיא נתקלת בהם במהלך הביצוע של השאילתה.
Limit (actual rows=10 loops=1)
-> Custom Scan (vector scan) on t1 (actual rows=10 loops=1)
Execution Strategy: Bitmap assisted pre-filtering
Order By: (vec_col <=> '[...]'::vector)
Limit: 10
-> Bitmap Index Scan on btree_idx (actual rows=10000 loops=1)
Index Cond: (int_col <= 100000000)
כשמשתמשים ב-Execution Strategy: Bitmap assisted pre-filtering, מסנן נפרד Bitmap Index Scan מסנן קודם מערך נתונים גדול. אם הסינון המקדים הזה מצמצם את רשימת המועמדים, המערכת לא משתמשת באינדקס הווקטורי לחיפוש הסופי של דמיון וקטורי.
מסינון מראש לסינון בשורה
סינון אדפטיבי יכול גם לעבור באופן דינמי מסינון מראש לסינון בשורה אם אופטימיזציית השאילתות של AlloyDB AI קובעת שסינון בשורה יעיל יותר למאפייני השאילתה הנוכחית.
במקרים כאלה, תוכנית השאילתה מותאמת באופן דינמי כדי לשקף עיבוד ישיר יותר של נתוני הווקטור, ללא שלב סינון מראש מפורש לפני סריקת הווקטור. הגמישות הזו עוזרת להשיג ביצועים אופטימליים כשהתפלגויות הנתונים או פרמטרים של שאילתות משתנים במהלך זמן הריצה.
לדוגמה, תוכנית השאילתה מציגה vector scan בשדה Execution Strategy אם האופטימיזציה קובעת ששיטת סינון מוטבעת יעילה יותר עבור השאילתה הנתונה.
Limit (actual rows=10 loops=1)
-> Custom Scan (vector scan) on t1 (actual rows=10 loops=1)
Execution Strategy: Bitmap assisted vector Scan on scann_idx
Order By: (vec_col <=> '[...]'::vector)
Limit: 10
Num Requalifications: 0
Num filtered: 1000
-> Bitmap Index Scan on btree_idx (actual rows=10000 loops=1)
Index Cond: (int_col <= 100000000)
בדוגמה הזו, הערך של Execution Strategy הוא Bitmap assisted vector Scan on scann_idx, עם Bitmap Index Scan בסיסי של btree_idx. המשמעות היא שהחיפוש הווקטורי משתמש במסנן מפת סיביות, שנוצר על ידי סריקת אינדקס מפת הסיביות על סמך התנאי int_col <= 100000000. לאחר מכן, המערכת של Custom Scan (vector scan) מעבדת רק את השורות שמזוהות על ידי מפת הסיביות הזו, ומשלבת את הסינון ישירות בתהליך הסריקה של הווקטור.