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