מאמר זה הוא מאמר רביעי בנושא. בחלק זה של המאמר נדגים איך מנתחים את הפלט של השאילתה שמביאה את ה-Wait Events הארוכים ביותר הקשורים ל-Network waits, כלומר רשת.
תזכורת למאמרים הקודמים בסדרה: חלק 1, חלק 2, חלק 3.
רשימת Wait Events נפוצים ופתרונות- רשת
Events מסוג ASYNC_NETWORK_IO ו\או NET_WAITFOR_PACKET – מצביעים על כך שרוחב פס הרשת הגיע לרוויה או שה-throughput של הרשת לא מספיק. לחילופין ה-Client לא צורך את התוצאות הנשלחות ע"י SQL Server באופן מידי, למשל בגלל חישובים מורכבים (למשל ע"י Datareader של ADO.NET).
Events מסוג DBMIRROR_SEND – מצביעים על כך שרוחב הפס לא מספיק להעברת כל נפח הטרנזקציות של בסיסי הנתונים שלהם מבוצע Mirror. פתרון: הקטן את מספר בסיס הנתונים להם מבצוע Mirror או הגדל את רוחב הפס.
בשביל לבצע אופטימיזציה של תנועת הרשת בן האפליקציה לבסיס הנתונים בצע את השינויים הבאים:
- בדוק שרוחב הפס בכרטיסי הרשת של ה- Client והשרת זהים ואנו משתמשים ב full duplex.
- שימוש בקריאה ל- Stored Procedures במקום שימוש במחרוזות. כמובן עדיף גם מבחינת אבטחה.
- לבקש רק את המידע שצריך ולא את עמודות הטבלה שלא נדרשות.
- לוגיקה שהיא אינטנסיבית מבחינת שימוש בנתונים, להעביר ל- SQL Server כ- Stored Procedures, בשביל לצמצם תעבורת רשת.
בשביל לבדוק בעיות רשת נשתמש ב- Performance Monitor, (הפעלה ע"י הפקודה perfmon) בשרת ה- SQL. נבחר את האובייקט Network adapter וב- Counter הוא Bytes Total/sec, שמשמעותו מספר ה- Bytes לשנייה שעוברים דרך כרטיס הרשת. נבצע ניטור לאורך פרק זמן כלשהו כאשר המערכת מועמסת.
הגרף המתקבל פחות מעניין אלא השורה מתחת לגרף של מינימום, ממוצע ומקסימום Bytes Total/sec ומהו משך הזמן (Duration) של הניטור.
הכלל : הערך הממוצע (Average בצילום מסך) צריך להיות קטן ב 50% מקיבולת כרטיס הרשת. דוגמא: אם לשרת פיסי כרטיס רשת יעודי של 1G, אזי הערך הממוצע צריך לנוע בן Bytes 0 ל500 מליון Bytes. שימו לב שאם מדובר בשרת להב (blade) שמכיל עוד 3 שרתים, ויש כרטיס רשת אחד של 1G ,שמשרת את שלושת השרתים אזי קיבולת כרטיס הרשת המקסימלית של כל שרת תהיה 1G/3 Bytes. כ330 מליון Bytes. לכן גודלו המקסימלי של הערך הממוצע יהיה לא יותר מ150 מליון Bytes.
עד כאן למאמר זה.
להתראות,
ד. יצחק.
דוד יצחק
Latest posts by דוד יצחק (see all)
- MongoDB ל DBA ומפתחים הלכה למעשה – חלק ב - 16/02/2016
- MongoDB ל DBA ומפתחים הלכה למעשה - 07/02/2016
- בדיקת ביצועים של Clustered ColumnStore Index - 06/11/2014
השאר תגובה: