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

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

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

הפעלת מודעות למטמון

כדי להפעיל את התכונה 'מודעות למטמון' במופע AlloyDB, צריך להגדיר את הדגל alloydb.enable_cache_aware_costing (גרסת Preview) לערך on. אפשר גם להגדיר את הדגל ברמת הסשן כדי להשפיע על תוכניות השאילתות שמתרחשות באותו סשן. מידע נוסף על הגדרת הדגל זמין במאמר הגדרת דגלי מסד נתונים של מופע.

מקרה לדוגמה

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

explain (analyze, verbose, buffers)
SELECT count(d) FROM t1 WHERE a = 10 AND b > 100 AND c > 100;
------------------ Aggregate  (cost=3908.93..3908.94 rows=1 width=8) (actual time=4.128..4.130 rows=1 loops=1)
   Output: count(d)
   Buffers: shared hit=926
   ->  Index Scan using idx1 on public.t1  (cost=0.43..3906.49 rows=975 width=2) (actual time=0.143..3.205 rows=919 loops=1)
         Output: a, b, c, d
         Index Cond: ((t1.a = 10) AND (t1.b > 100) AND (t1.c > 100))
         Buffers: shared hit=926
   Execution Time: 4.353 ms

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

בקטע הקוד הבא מוצגת העלות המותאמת של תוכנית השאילתה כשהאפשרות 'מודעות למטמון' מופעלת.

explain (verbose)
SELECT count(d) FROM t1 WHERE a = 10 AND b > 100 AND c > 100;
------------------ Aggregate  (cost=29.93..29.94 rows=1 width=8)
   Output: count(d)
   ->  Index Scan using idx1 on public.t1  (cost=0.43..27.49 rows=975 width=2)
         Output: a, b, c, d
         Index Cond: ((t1.a = 10) AND (t1.b > 100) AND (t1.c > 100))

העלות החדשה, 27.49, של תוכנית השאילתה לסריקת האינדקס זהה לעלות הישנה, 3906.49.