במסמך הזה תמצאו מידע שיעזור לכם לפצל מראש את מסד הנתונים.
Spanner מנהל פיצולים של מסדי נתונים ומתרחב בתגובה לשינויים בעומס ובגודל. הפיצול והמיזוג הם דינמיים, על סמך התנועה. ככל שפלג מקבל יותר תנועה, מערכת Spanner מחלקת אותו לטווחים קטנים יותר ומפיצה מחדש את הפלגים שנוצרו על פני משאבים זמינים אחרים במופע. Spanner ממזג את הפיצול כשהפיצול מקבל באופן עקבי פחות תנועה.
הפיצול לא מתבצע באופן מיידי. אם הפיצול והאיזון מחדש לא יכולים לעמוד בקצב התעבורה, יכול להיות שפיצול ינצל את כל משאבי החישוב והזיכרון הזמינים שלו. במקרה כזה, מתזמן העבודה של Spanner מכניס את הבקשות הבאות לתור, מה שגורם להגדלת זמן האחזור ועלול להוביל לפסק זמן ולביטול עסקאות.
על ידי פיצול מראש של מסד הנתונים, מערכת Spanner יכולה להיות מוכנה לעלייה צפויה בתנועת הגולשים. אפשר לפצל מראש את מסד הנתונים על ידי יצירת נקודות פיצול.
כדאי לפצל מראש את מסד הנתונים בתרחישים הבאים:
- אתם טוענים מערך נתונים גדול לטבלאות ולאינדקסים חדשים במסד נתונים של Spanner בפעם הראשונה, למשל טעינה חד-פעמית בכמות גדולה.
- צפויה עלייה בעומס התנועה במסד נתונים קיים של Spanner בעתיד הקרוב. לדוגמה, יכול להיות שתצטרכו תמיכה באירוע תנועה גדול כמו השקת מוצר או קמפיין מכירות.
קביעת מספר הפיצולים
מומלץ ליצור 10 נקודות פיצול לכל צומת. מכיוון ש-Spanner יכול לפצל ולהתאים את עצמו לתנועה במהירות במקרים של מופעים קטנים יותר, אין צורך לפצל מראש מופעים קטנים יותר.
קביעת נקודות הפיצול
כשמחליטים על נקודות הפיצול של מסד הנתונים, כדאי להביא בחשבון את הנקודות הבאות:
אם תנועת הגולשים שלכם מתפלגת באופן שווה על פני טווח המפתחות, למשל כשמשתמשים במזהי UUID או במפתחות רצף עם היפוך ביטים, כדאי לבחור נקודות פיצול שמחלקות את מרחב המפתחות של תנועת הגולשים באופן שווה.
אם התנועה שלכם מרוכזת בקבוצה של טווחי מפתחות ידועים, כדאי לפצל ולבודד את טווחי המפתחות האלה.
אם אתם מצפים לתנועה באינדקסים שלכם, אתם צריכים להשתמש בנקודות פיצול באינדקס המתאים.
אם מוסיפים נקודות פיצול לטבלת האב, הטבלאות השזורות יפוצלו. אם אתם מצפים לנפח תנועה גבוה יותר בטבלה המשלבת, הקפידו להשתמש בנקודות פיצול בטבלה המשלבת המתאימה.
אפשר להקצות את נקודות הפיצול לאובייקטים של סכימה באופן יחסי לעלייה בתנועה שלהם.
דוגמה לתהליך עבודה לקביעת נקודות פיצול
נניח שלמסד הנתונים שלכם יש את מבני הטבלאות שמוגדרים על ידי ה-DDL הבא:
CREATE TABLE UserInfo (
UserId INT64 NOT NULL,
Info BYTES(MAX),
) PRIMARY KEY (UserId);
CREATE TABLE UserLocationInfo (
UserId INT64 NOT NULL,
LocationId STRING(MAX) NOT NULL,
ActivityData BYTES(MAX),
) PRIMARY KEY (UserId, LocationId), INTERLEAVE IN PARENT UserInfo ON DELETE CASCADE;
CREATE INDEX UsersByLocation ON UserLocationInfo(LocationId);
UserId הוא גיבוב שנוצר באופן אקראי במרחב INT64, ואתם צריכים להוסיף 100 נקודות פיצול כדי לחלק באופן שווה את העלייה הצפויה בתנועה בטבלה UserInfo ובטבלאות המשולבות שלה. מכיוון שנקודות הפיצול מפוזרות באופן שווה, צריך למצוא את מספר השורות, או offset בין כל נקודת פיצול:
offset = הערך המקסימלי בטווח UserId חלקי 99
לאחר מכן, נקודות הפיצול של הטבלה UserInfo נקבעות לפי השורה הראשונה של UserId או UserId_first. כדי לקבוע את נקודת הפיצול ה-N, משתמשים בחישוב הבא:
נקודת הפיצול N: UserId_first + (offset * (N-1))
לדוגמה, נקודת הפיצול הראשונה היא UserId_first + (offset * 0) ונקודת הפיצול השלישית היא UserId_first + (offset * 2).
מכיוון שהטבלה UserLocationInfo היא טבלה משולבת של הטבלה UserInfo, היא גם מפולחת בגבולות UserId. אפשר גם ליצור נקודות פיצול בטבלה UserLocationInfo בעמודה LocationId.
הפורמט של LocationId הוא $COUNTRY_$STATE_$CITY_$BLOCK_$NUMBER, לדוגמה, US_CA_SVL_MTL_1100_7.
במקרה של UserId, על סמך הקידומת של המחרוזת LocationId אפשר לקבוע פיצולים כדי להציב את הטבלה UserLocationInfo של UserId ב-3 מדינות שונות ב-3 פיצולים שונים:
- נקודת פיצול 1: (1000, "CN")
- נקודת פיצול 2: (1000, "FR")
- נקודת פיצול 3: (1000, "US")
אפשר להוסיף נקודות פיצול חדשות רק באמצעות קידומת, ולא צריך להתאים לפורמט שצוין עבור עמודה או אינדקס. בדוגמה הזו, נקודות הפיצול לא תואמות לפורמט שצוין עבור LocationId, ומשתמשות רק ב-$COUNTRY כקידומת.
אם רוצים לפצל את האינדקס UsersByLocation, אפשר לפזר באופן שווה את נקודות הפיצול בעמודה LocationId, או לבודד כמה ערכים בעמודה UsersByLocation שצפויים לקבל נפח תנועה מוגבר:LocationId
- נקודת פיצול 1: "CN"
- נקודת פיצול 2: "US"
- נקודת פיצול 3: US_NYC
אפשר לפצל עוד יותר את האינדקס באמצעות חלקי המפתח של הטבלה המאונדקסת למיקומים שמקבלים נפח תנועה גבוה עוד יותר. לדוגמה, אם אתם צופים עלייה בתנועה במיקום CN, תוכלו להגדיר את נקודות הפיצול הבאות:
- נקודת הפיצול 1: CN ו-TableKey: (1000, CN)
- נקודת פיצול 2: 'CN' ו-TableKey: (2000, 'CN')
- נקודת הפיצול 3: 'CN' ו-TableKey: (3000, 'CN')
תפוגת תוקף של נקודות
אפשר להגדיר זמן תפוגה לכל נקודת פיצול. בהתאם לתרחיש השימוש, מגדירים את נקודות הפיצול כך שיפוג התוקף שלהן אחרי שהתנועה המוגברת הצפויה תדעך.
זמן התפוגה שמוגדר כברירת מחדל הוא 10 ימים מהמועד שבו הפיצול נוצר או עודכן. זמן התפוגה המקסימלי המותר הוא 30 ימים ממועד היצירה או העדכון של הפיצול.
אחרי שתוקף הפיצול יפוג, Spanner ינהל את הפיצול ולא תוכלו יותר לראות אותו. יכול להיות ש-Spanner ימזג את הפיצול בהתאם לתנועה.
אפשר גם לעדכן את תאריך התפוגה של נקודת פיצול לפני שהוא יפוג. לדוגמה, אם העלייה בתנועה לא נרגעה, אפשר להגדיל את משך הזמן של הפיצול. אם אתם לא צריכים יותר נקודת פיצול, אתם יכולים להגדיר שהיא תפוג באופן מיידי. מידע על הגדרת זמן התפוגה של נקודות פיצול זמין במאמר איך מגדירים תפוגה לנקודת פיצול.
התוצאות של פיצול מראש של מסד הנתונים
אלה התוצאות שסביר להניח שתקבלו אחרי הוספת נקודות פיצול:
שינויים בחביון: הוספת נקודות פיצול היא דרך לדמות עלייה בתנועה במסד הנתונים. כשיש יותר פיצולים במסד נתונים, יכול להיות שיהיו עליות קבועות בחביון של קריאה וכתיבה, בגלל יותר משתתפים בעסקאות ופיצולים של שאילתות. בנוסף, צפוי גידול בשימוש בחישובים ובשאילתות לכל בקשת קריאה או כתיבה.
יעילות נקודות הפיצול: כדי לקבוע אם נקודות הפיצול שהוספתם מועילות, עליכם לעקוב אחרי פרופיל ההשהיה כדי לראות אם יש שינויים מינימליים, ואחרי כלי ההמחשה של המפתחות כדי לראות אם יש נקודות חמות. אם אתם מזהים נקודות חמות, אתם יכולים להגדיר את נקודות הפיצול כך שיפוגו באופן מיידי וליצור נקודות חדשות. מידע נוסף על נקודות פיצול שתוקפן פג זמין במאמר איך מגדירים שנקודת פיצול תפוג. באיטרציה הבאה של הוספת פיצולים, כדאי להוסיף מספר קטן יותר של פיצולים ולעקוב אחרי פרופיל זמן האחזור.
התנהגות נקודת הפיצול אחרי העלייה בתנועה: צריך להסיר את נקודות הפיצול שנוספו אחרי שהתנועה מתייצבת. יכול להיות שהפיצול לא יתכנס למצב שהיה לפני העלייה בעומס. יכול להיות שפרופיל ההשהיה של מסד הנתונים ישתנה בגלל השינוי בתנועת הגולשים והפיצול שנדרש כדי לתמוך בתנועת הגולשים.
תרחיש שימוש לדוגמה
נניח שאתם מנהלי מסד נתונים בחברת משחקים, ואתם צופים עלייה בנפח התנועה בעקבות השקת משחק חדש. אתם מצפים לתנועת גולשים בטבלאות חדשות ריקות.
צריך לוודא שלא תהיה הפרעה בשירות כשהתנועה תעבור דרך השרת, כדי שלא תהיה השפעה ניכרת על זמן האחזור או על שיעורי השגיאות.
במקרה השימוש הזה, כדאי להשתמש באסטרטגיה הבאה של פיצול מראש ברמה גבוהה:
מזהים את מספר הצמתים שהמופע צריך לתמוך בהם כדי להתמודד עם נפח התנועה המוגדל. במאמר סקירה כללית של הביצועים מוסבר איך לזהות את מספר הצמתים. אם אתם משתמשים במידרוג אוטומטי, צריך להגדיר את פרמטר המגבלה המקסימלית למספר הצמתים שזיהיתם. בנוסף, מגדירים את פרמטר המגבלה המינימלית לערך (מספר הצמתים שזוהו חלקי 5).
זיהוי הטבלאות והאינדקסים שבהם יש הכי הרבה תנועה וששימוש בנקודות פיצול יכול להועיל להם הכי הרבה. מנתחים את הנתונים הנוכחיים ובוחרים בין שימוש בנקודות פיצול בהתאמה אישית לבין שימוש בנקודות פיצול עם חלוקה שווה.
יוצרים את נקודות הפיצול לא לפני שבעה ימים ולא יותר מ-12 שעות לפני העלייה הצפויה בתנועה.
מוודאים שהפיצולים נוצרו. כדי לראות את נקודות הפיצול שנוצרו במופע, אפשר לעיין במאמר הצגת נקודות פיצול.
נקודות שחשוב לדעת
כשיוצרים נקודות פיצול, חשוב לקחת בחשבון את ההערות הבאות:
מחיקה של טבלה, אינדקס ומסד נתונים: לפני שמוחקים טבלה, אינדקס או מסד נתונים, צריך לוודא שתוקף כל נקודות הפיצול התואמות שנוספו פג. כדי לעשות את זה, צריך להגדיר את תאריך התפוגה של הפיצול לשעה הנוכחית. הפעולה הזו נדרשת כדי לשחרר את המכסה ברמת המופע. מידע נוסף על נקודות פיצול שתוקפן פג זמין במאמר איך מבטלים נקודת פיצול.
גיבוי ושחזור של מסדי נתונים: לא מתבצע גיבוי של פיצולים שנוספו. צריך ליצור פיצולים במסד נתונים משוחזר.
שינוי גודל אוטומטי אסימטרי: אם אתם משתמשים בשינוי גודל אוטומטי אסימטרי, מספר הצמתים שמשמש לקביעת מספר נקודות הפיצול הוא מספר הצמתים המינימלי בכל האזורים.
עלייה זמנית במדדי נפח אחסון נדרש: הוספה של נקודות פיצול גורמת לעלייה זמנית במדד total database storage עד ש-Spanner מסיים את הדחיסה. מידע נוסף זמין במאמר בנושא ניצול נפח האחסון. זה קורה רק כשמפצלים עוד יותר טווחי מפתחות קיימים, ולא כשמפצלים טווחי מפתחות חדשים.
מומלץ ליצור נקודות פיצול לא לפני שבעה ימים ולא אחרי 12 שעות לפני העלייה הצפויה בנפח התנועה.
מגבלות לפני פיצול
יש מגבלות על פיצול מראש של מסד הנתונים:
אי אפשר לפצל מראש את אינדקסים החיפוש. צריך לפצל מראש רק את טבלת הבסיס. מידע נוסף זמין במאמר בנושא חלוקת אינדקס החיפוש.
אי אפשר לפצל מראש אינדקסים של וקטורים. מידע נוסף על אינדקסים של וקטורים זמין במאמר בנושא אינדקס וקטורי.
מידע על המכסות של נקודות פיצול זמין במאמר מכסות ומגבלות.