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

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

אחרי שמפעילים את המודעות למטמון, התכונה פועלת באופן אוטומטי ומתאימה את עצמה כששיעורי ההתאמה של מאגר הנתונים הזמני המשותף משתנים. המודעות למטמון יכולה לפעול גם עם שיטות אחרות לכוונון שאילתות, כמו הגדרת אומדן העלות של מתכנן השאילתות של 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.