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