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

שלוש שכבות, מילה אחת משותפת

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

Setting or observationUnit it describes
SQL Server client network packet settingThe provider's transport packaging for that connection
MySQL communication packet limitA database message, such as one statement, row or replication event
IP path MTUThe largest IP packet the path carries without fragmentation handling

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

זהה את הספק לפני שאתה משנה את הגדרתו

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

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

דחיית הודעה אינה עצירה של הנתיב

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

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

איך נראות ראיות נתיב באמת

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

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

שנה משתנה מתועד אחד ואז רשום אותו

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

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

מאמרים קשורים