בדף הזה נסביר על אופטימיזציית השאילתות ב-Spanner ועל היתרונות שלה. אפשר להשתמש באופטימיזציה של שאילתות במסדי נתונים של ניב GoogleSQL ובמסדי נתונים של ניב PostgreSQL.
סקירה כללית
אופטימיזציית השאילתות של Spanner SQL ממירה הצהרת SQL דקלרטיבית, שמתארת אילו נתונים השאילתה רוצה, לתוכנית ביצוע אימפרטיבית, שמתארת דרך אחת להשגת הנתונים האלה בדיוק. התהליך של שינוי הצהרה דקלרטיבית לתוכנית ביצוע של שאילתה כולל ביצוע שינויים במבני עץ שמשמשים לייצוג השאילתה. האופטימיזציה, בתהליך של יצירת תוכנית ביצוע, שומרת על המשמעות הלוגית של שאילתת ה-SQL המקורית כדי שהשורות הנכונות יוחזרו.
תפקיד חשוב נוסף של האופטימיזציה הוא ליצור תוכנית ביצוע יעילה.
איך האופטימיזציה של Spanner יוצרת תוכניות ביצוע יעילות?
הכלי לאופטימיזציה של Spanner משתמש בשילוב של היוריסטיקות מבוססות ושל אופטימיזציה מבוססת-עלויות כדי ליצור תוכניות יעילות. חלק מההיוריסטיקות פשוטות מאוד, כמו 'ביצוע סינון במכונות מרוחקות במקום שליפת נתונים למכונה המקומית'. היוריסטיקות אחרות מורכבות יותר, אבל הן עדיין מבוססות על העיקרון של העברת לוגיקה שמצמצמת את נפח הנתונים קרוב יותר לנתונים. העיקרון הזה חשוב במיוחד במערכת שמחלקת את הנתונים בין כמה מכונות.
לא כל ההחלטות לגבי ביצוע יכולות להתקבל ביעילות באמצעות כללים קבועים כאלה, ולכן האופטימיזציה של Spanner מקבלת גם החלטות שמבוססות על עלות משוערת של חלופות. הערכות העלויות האלה מחושבות לפי מבנה השאילתה, הסכימה של מסד הנתונים והערכות של נפח הנתונים שייווצר על ידי חלקי השאילתה. לדוגמה, Spanner מעריך כמה שורות בטבלה Songs עומדות בדרישות של המסנן SongGenre = "Country" אם המסנן הזה מופיע בשאילתה. כדי לעזור בחישוב של האומדנים האלה, Spanner אוסף מעת לעת נתונים סטטיסטיים כדי לאפיין את התפלגות הנתונים במסד נתונים.
בנוסף, Spanner מבצע אופטימיזציה של ביצוע השאילתות על ידי קביעה אוטומטית של שיטת העיבוד שצריך להשתמש בה בשאילתה – עיבוד לפי שורה או לפי עמודה. מידע נוסף זמין במאמר בנושא אופטימיזציה של סריקות.
מידע נוסף על תוכניות לביצוע שאילתות ועל השימוש בהן ב-Spanner כדי לבצע שאילתות בסביבה מבוזרת זמין במאמר תוכניות לביצוע שאילתות.
ניהול גרסאות של כלי אופטימיזציית השאילתות
עם הזמן, כלי האופטימיזציה של שאילתות ב-Spanner ישתכלל, ירחיב את מערך האפשרויות בתוכנית להפעלת שאילתות וישפר את הדיוק של ההערכות שמשמשות בסיס לאפשרויות האלה, וכך יוביל לתוכניות יעילות יותר להפעלת שאילתות.
מערכת Spanner מפרסמת עדכונים לאופטימיזציה כגרסאות חדשות של אופטימיזציית שאילתות, כדי לשפר את היעילות של תוכניות הביצוע של השאילתות. למידע נוסף על הגרסאות השונות, אפשר לעיין במאמר גרסאות של אופטימיזציית שאילתות ב-Spanner.
חבילות של נתונים סטטיסטיים של אופטימיזציה של שאילתות
ב-Spanner נשמרים נתונים סטטיסטיים על חלוקת הנתונים בעמודות של טבלה, כדי לעזור להעריך כמה שורות יופקו משאילתה. כלי האופטימיזציה של השאילתות משתמש בהערכות האלה כדי לבחור את תוכנית הביצוע הטובה ביותר של השאילתה. הסטטיסטיקות האלה מתעדכנות מעת לעת על ידי Spanner. הנתונים הסטטיסטיים משמשים לבחירת תוכניות להרצת שאילתות, ולכן כשמעדכנים את הנתונים הסטטיסטיים, יכול להיות ש-Spanner ישנה את תוכנית השאילתה שבה הוא משתמש בשביל שאילתה מסוימת.
כברירת מחדל, מסדי נתונים משתמשים באופן אוטומטי בחבילת הנתונים הסטטיסטיים האחרונה שנוצרה. אפשר להצמיד את מסד הנתונים לגרסה קודמת של חבילת סטטיסטיקה. יש לכם גם אפשרות להריץ שאילתות ספציפיות עם חבילת סטטיסטיקה שאינה העדכנית ביותר.
יצירת חבילת נתונים סטטיסטיים חדשה
מערכת Spanner יוצרת אוטומטית חבילות סטטיסטיקה חדשות כל שלושה ימים. כדי ליצור חבילת סטטיסטיקות חדשה באופן ידני, משתמשים בהצהרת DDL של GoogleSQL ANALYZE או בהצהרת DDL של PostgreSQL ANALYZE.
אחרי שינויים משמעותיים בנתונים או בסכימה של מסד הנתונים, כדאי ליצור חבילת סטטיסטיקה חדשה כדי לשפר את ביצועי השאילתות. מומלץ ליצור חבילת נתונים סטטיסטיים חדשה אם מתרחשים אחד מהמקרים הבאים:
- מסד הנתונים מעבד כמות גדולה של הוספות, עדכונים או מחיקות.
- מוסיפים אינדקס חדש למסד הנתונים.
- מוסיפים עמודה חדשה לטבלה.
הפעלת ANALYZEהצהרת DDL
מעדכנת את הסכימה, מפעילה פעולה ארוכת טווח ומבטלת את היצירה של נתונים סטטיסטיים שהופעלו באופן אוטומטי.
אחרי ש-Spanner מסיים להריץ את ההצהרה, עוברות עד עשר דקות עד שאופטימיזציית השאילתות מתחשבת בחבילת סטטיסטיקות חדשה בתכנון השאילתות שלה.
איסוף אשפה של חבילות סטטיסטיקה
חבילות סטטיסטיקה ב-Spanner נשמרות למשך 30 יום ממועד היצירה שלהן, ולאחר מכן הן נתונות ל-garbage collection.
טבלת INFORMATION_SCHEMA.SPANNER_STATISTICS המובנית ב-Spanner מכילה רשימה של חבילות נתונים סטטיסטיים זמינות. כל שורה בטבלה הזו מציגה חבילת נתונים סטטיסטיים לפי שם, והשם מכיל את חותמת הזמן של היצירה של החבילה הנתונה. כל רשומה מכילה גם שדה בשם ALLOW_GC שקובע אם אפשר לבצע איסוף אשפה בחבילה או לא.
אפשר להצמיד את כל מסד הנתונים לכל אחת מהחבילות שמופיעות בטבלה. חבילת הנתונים הסטטיסטיים המוצמדת לא תעבור איסוף אשפה, והמערכת תתעלם מהערך של ALLOW_GC כל עוד מסד הנתונים מוצמד לחבילה הזו. כדי להשתמש בחבילת נתונים סטטיסטיים מסוימת בשאילתה ספציפית, החבילה צריכה להופיע ברשימה עם ALLOW_GC=FALSE או להיות מוצמדת. כך נמנע מצב שבו שאילתות נכשלות אחרי שחבילת הנתונים הסטטיסטיים נאספה כזבל. אפשר לשנות את הערך של ALLOW_GC באמצעות הצהרת DDL של GoogleSQL ALTER STATISTICS או של PostgreSQL ALTER STATISTICS.
שמירת חבילות ופרטים אישיים מזהים (PII)
חבילת נתונים סטטיסטיים מכילה היסטוגרמות של נתוני העמודות, בהתאם לשיטות המקובלות בתחום. ההיסטוגרמה עוזרת לכלי לאופטימיזציה של שאילתות לבחור את תוכניות השאילתות האופטימליות. ההיסטוגרמה נוצרת באמצעות מדגם קטן של ערכים. יכול להיות שמערך הנתונים הקטן הזה מכיל פרטים אישיים מזהים (PII).
Spanner יוצר חבילת נתונים סטטיסטיים חדשה באופן קבוע ושומר אותה למשך 30 יום כברירת מחדל. לכן, יכול להיות שחלק קטן מהערכים שנמחקו ממסד הנתונים יישמרו למשך 30 ימים נוספים בהיסטוגרמות של הנתונים הסטטיסטיים.
חבילות סטטיסטיקה המוצמדות עם אפשרות מסד נתונים optimizer_statistics_package או חבילות עם אפשרות ALLOW_GC=FALSE לא ייאספו כקובץ אשפה.
יכול להיות שההיסטוגרמות בחבילות האלה יכילו ערכים שנמחקו ממסד הנתונים לפני תקופה ארוכה יותר. בנוסף, התוכן של חבילות הסטטיסטיקה כלול בגיבויים של מסדי הנתונים.
הנתונים הסטטיסטיים של הכלי לאופטימיזציה מאוחסנים בצורה מוצפנת, כמו נתוני המשתמשים.
בדרך כלל, כמות האחסון הכוללת שנדרשת לחבילות האלה היא פחות מ-100MB, והיא נכללת בעלויות האחסון הכוללות.
המאמרים הבאים
- מידע נוסף על ההיסטוריה של כלי האופטימיזציה של שאילתות זמין במאמר היסטוריית הגרסאות של כלי האופטימיזציה של שאילתות.
- כדי לנהל את גרסת האופטימיזציה ואת חבילת הנתונים הסטטיסטיים של התרחיש, אפשר לעיין במאמר בנושא ניהול האופטימיזציה של השאילתות.