תוצאת SQL גדולה דרך VPN: היכן השורות ממתינות
תוצאת SQL גדולה ממתינה בשלושה מקומות: מאגרי השרת, נתיב ה-VPN והלקוח. מדדו כל שלב לפני שמשנים רוחב פס או מפעילים דחיסה.
שאילתות יכולות להסתיים במילישניות ועדיין לקחת דקות כדי להגיע למחשב נייד דרך VPN. השרת כותב שורות למאגרים, החיבור מוביל אותן והלקוח צורך אותן, והשלבים האלה חופפים זה לזה במקום לרוץ ברצף. כל אחד מהם יכול להפוך לגבול. מצאו את השלב שבאמת ממתין לפני שמשנים רוחב פס או מפעילים דחיסה.
שלושה שלבים, שעון עצר אחד
פצלו את הטיימר לשני מספרים בעלי משמעות שונה: הרגע שבו השורה הראשונה זמינה והרגע שבו השורה האחרונה נצרכה. רשת שמציירת את העמוד הראשון מוכיחה רק שהשאילתה החלה. זמן התוצאה המלאה הוא מה שהמשתמש חווה כשהוא מייצא או גולל עד הסוף.
רשמו את שני המספרים יחד עם טקסט השאילתה, הפרמטרים והגדרות החיבור. בלי ההקשר הזה ההשוואה היא בין שתי עבודות שונות, לא בין שני מיקומים.
קראו את ההמתנה לפני הרשת
SQL Server כותב את שורות התוצאה למאגרי פלט כדי שהלקוח ימשוך אותן, ולקוח שצורך לאט יכול לגרום לשרת להמתין על השליחה הזו. סוג ההמתנה הוא ASYNC_NETWORK_IO, וכן הערת פתרון הבעיות של Microsoft מפרטת תוצאות גדולות ועיבוד בצד הלקוח בין הסיבות. ההמתנה אומרת שנתיב השליחה חסום, לא למה.
VPN איטי יכול לתרום, אבל גם לקוח שמעצב כל שורה, כותב לקובץ או עוצר בין אצוות. שם ההמתנה הוא מצביע למדידה הבאה, לא פסק דין על הקישור.
SELECT wait_type, wait_time_ms
FROM sys.dm_os_wait_stats
WHERE wait_type = 'ASYNC_NETWORK_IO';
קראו את המונה בזמן שהעומס המוגבל רץ, לא אחרי שעה סרקה, כי מונים מצטברים מערבבים כל הפעלה מאז עליית המופע. השוו את הדלתא לאורך הריצה ולא את הסכום הכולל. דלתא שגדלה במהלך ההעברה מצמצמת את השאלה לצריכה או לאספקה.
שימו את שני הלקוחות על אותו שעון
הריצו עומס מוגבל מלקוח קרוב למסד הנתונים ומהלקוח המרוחק. שמרו על שאילתה, פרמטרים, גודל תוצאה והגדרות חיבור זהים. השתמשו באותה מדידה בשני הצדדים, כי זמן הביצוע של השרת, זמן תצוגת הרשת וזמן הייצוא הם שלושה שעונים שונים. השוואת מספר מצד השרת לטיימר ייצוא בצד הלקוח מפיקה מסקנה שאי אפשר לבחון.
כשהנתיב נראה אחראי, בקשו מבעל הרשת לעקוב אחר אובדן, שליחות חוזרות ותפוקה שהושגה עבור הזרימה הספציפית הזו בזמן ההעברה. בדיקת מהירות כללית עשויה להשתמש בנתיב, בנקודת קצה או בדפוס מקביליות אחרים. בקשה קטנה מוצלחת אומרת מעט על העברת תוצאה מתמשכת.
קצצו בתים לפני שמאשימים את הנתיב
סינון, צבירה ובחירה של העמודות הנדרשות בלבד מפחיתים גם את נפח ההעברה וגם את העבודה שהלקוח עושה עם כל שורה. שמרו על התוצאה המיועדת, כי דוח עשוי להזדקק לפרט שאין לתקציר על המסך.
לייצוא חוזר, מיקום הרצה מאושר ליד מסד הנתונים יכול לכתוב פלט מוגדר אשר נמסר לאחר מכן פעם אחת. זה משנה את זרימת העבודה ואת בקרות הגישה שלה, וזו אינה הרשאה להשאיר dump בלתי מוגבל על מארח משותף.
דחיסה אינה התיקון המוגדר כברירת מחדל. תמיכה ואבטחה תלויות בפרוטוקול ובפריסה בפועל, וזרם דחוס שהלקוח מפענח לאט יכול להחמיר את החוויה. מדדו קודם את השלב, ואז בחרו שינוי נתמך לאותו שלב.