יצירת קשר עם התמיכה

אנחנו משיבים בדוא״ל, בדרך כלל בתוך יומיים.

למניעת שימוש לרעה, Google reCAPTCHA בודק את הפנייה הזאת; נתונים נשלחים אל Google. הסקריפט נטען רק עם פתיחת הטופס הזה.

→ כל הרשומות

היכן נמצאת סכימת מסד הנתונים בפועל

על התוכן ועל בדיקתו

במאמר הזה

כל מה שהשירות הזה עושה נמצא בבקרת גרסאות. הקוד בכל אופן. מסד הנתונים שעליו הוא פועל הוא 32 טבלאות, ול־15 מהן אין הגדרה בשום מקום במאגר הקוד — אין CREATE TABLE, אין קובץ סכימה, שום דבר. עותק שיוצא ממסד הנתונים משחזר את כל ה־32 עם המבנה שלהן בשלמותו; מה שמאגר הקוד אינו מחזיק הוא עותק שני ועצמאי של המבנה הזה.

17 טבלאות מוגדרות 15 אינן מוגדרות בשום מקום 21 אינדקסים נוצרים בקוד 11 רק במסד הנתונים 32 טבלאות, 32 אינדקסים משניים, 0 קובצי סכימה

המספרים האלה מגיעים מהשוואת מסד הנתונים הפעיל מול 736 קבצים ו־5,671,710 תווים במאגר הקוד. הם אינם הערכה.

איך חצי סכימה נעלמת

זה אינו חוסר זהירות, וזאת הסיבה שכדאי לתעד זאת. כל צעד בנפרד היה סביר.

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

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

הטבלה שמחזיקה את המונים עצמם, 166,438 שורות שלהם, היא אחת מחמש עשרה הטבלאות שאין להן הגדרה במאגר הקוד.

מה מתקלקל בפועל

לא הרבה, עד רגע מסוים אחד: כשמשחזרים את מסד הנתונים מעותק שיוצא ממנו.

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

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

מה אנחנו עושים בינתיים

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

עותק שיוצא ממסד הנתונים לפני כל דבר הרסני, ונשמר מחוץ לתיקיית השורש של האתר. שחזור שבוצע בפועל לפחות פעם אחת, במקום להניח שיעבוד. ורשימה קצרה, שנבדקת אחרי כל שחזור, של האינדקסים שידוע שקיימים רק במסד הנתונים הפעיל — כי אפשר לשאול את המחשב אילו אינדקסים יש לו, ולהשוות את התשובה לפעם האחרונה שנשאל.

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

עדכון: ספטמבר 2026

חמישה ימים אחרי פרסום הרשומה הזאת, תיקיית העבודה נשמרה בקומיט: 26 קבצים ו־4,058 שורות, וביניהם אחד עשר סקריפטי העברה שנכתבו בין 28 באוגוסט ל־1 בספטמבר ועד אז היו קיימים רק במחשב הפעיל. זה היה החצי הקל — קוד שנכתב אבל מעולם לא תועד.

המדידה בוצעה שוב ב־1 בספטמבר 2026 באותה דרך: מסד הנתונים הפעיל מול כל מה ש־git עוקב אחריו.

טבלאות4630 עם פקודת CREATE TABLE במאגר הקוד, 16 ללא פקודה כזאת
אינדקסים משניים4332 נוצרים בקוד שבמאגר, 11 רק במסד הנתונים הפעיל
סקריפטי העברה109בבקרת גרסאות
30 טבלאות מוגדרות 16 אינן מוגדרות בשום מקום 32 אינדקסים עם קובץ 11 רק במסד הנתונים 46 טבלאות, 43 אינדקסים משניים, 0 קובצי סכימה

המספר החשוב לא השתנה. ב־27 באוגוסט אחד עשר אינדקסים משניים לא היו קיימים בשום מקום מלבד מסד הנתונים הפעיל. ב־1 בספטמבר עדיין יש אחד עשר. אחד עשר אינדקסים נוספים נוספו ביניהם, וכל אחד הגיע עם סקריפט העברה: ההרגל השתנה, החוב לא.

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

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

פרסומת