نموذج يُعرض في أقل من ثانية على شبكة محلية يستغرق خمس ثوانٍ عبر VPN، بينما يجري نسخ ملف على المسار نفسه بالسرعة الكاملة. الفرق ليس في النطاق الترددي. النموذج ينتظر سلسلة من الإجابات ويدفع كامل زمن الذهاب والإياب في كل خطوة، بينما يُبقي نسخ الملف البايتات في الطريق باستمرار. احسب أوقات الانتظار هذه قبل أن تلمس خط الوصول.

العَرَض شاشة وليس استعلامًا

يمكن أن يكون كل استعلام على تلك الشاشة سريعًا وتبقى الشاشة بطيئة، لأن الإجمالي مجموع أوقات الانتظار لا مجموع أوقات التنفيذ. العبارة التي تُنفَّذ في ميلي ثانيتين تكلّف رحلة ذهاب وإياب كاملة عندما يجب على العميل استلام نتيجتها قبل إرسال التالية. على مسار يبلغ فيه التأخير أربعين ميلي ثانية، تبلغ مئة نداء تابع نحو أربع ثوانٍ قبل أن يبدأ أي عمل للعرض. هذا الحساب نموذج للانتظار لا قياس لأداء وصلك.

لهذا يبدو اختبار السرعة بريئًا. نقل الكتل يقيس الإنتاجية، والنموذج كثير الطلبات يقيس التأخير، وقد يكون VPN ممتازًا في أحدهما عاديًا في الآخر. لذلك يعني تشخيص الشاشة قياس الشاشة لا قياس الوصلة.

سجّل الزمن من طرف إلى طرف لفعل واحد من أفعال المستخدم قبل أن تغيّر أي شيء. ذلك الرقم هو خط الأساس الوحيد الذي يستطيع أن يخبرك إن كان إصلاح لاحق قد نجح.

احسب أوقات الانتظار المتتابعة في فعل واحد من أفعال المستخدم

قِس داخل العميل بدلًا من التخمين. في psql يطبع \timing on الزمن المنقضي لكل عبارة، ويُظهر EXPLAIN (ANALYZE, BUFFERS) كم من ذلك الزمن أنفقه الخادم فعلًا على العمل.

الفارق بين هذين الرقمين هو عبء الشبكة والعميل عندك. إذا نُفِّذت عبارة في ميلي ثانيتين وسجّل العميل ستين، فإن الثمانية والخمسين الباقية رحيل ومعالجة محلية، ولن يزيلها أي فهرس. كرّر هذه المقارنة لكل عبارة تُصدرها الشاشة واجمع الفوارق لا أوقات التنفيذ.

اكتب النتيجة كعدد من أوقات الانتظار المتتابعة. هذه هي الكمية التي يستطيع القسمان التاليان تقليصها، وهي رقم يمكنك أن تجادل فيه بدليل.

جمّع النداءات المستقلة واحتفظ بالتابعة

عبارتان لا تقرأ إحداهما نتائج الأخرى يمكن أن تسافرا معًا وتُجمعا مرة واحدة، فيتحول انتظاران إلى انتظار واحد. وعبارتان تحتاج الثانية فيهما قيمة الأولى لا يمكن ذلك، لأن التبعية حقيقية وجمعها في دفعة سيغيّر ما يفعله البرنامج. صنّف النداءات في هذين الكومين قبل إعادة كتابة أي شيء، وحجم كل كوم يخبرك بما هو ممكن.

العمل القائم على المجموعات يزيل أوقات الانتظار على نحو أشمل من التجميع في دفعات. استعلام واحد يعيد الصفوف التي كانت حلقة تجلبها واحدًا واحدًا يلغي الحلقة كما يلغي رحلات الذهاب والإياب. ابحث عن الحلقة أولًا، لأنها عادة المكسب الأكبر والتغيير الأسهل في المراجعة.

يجب أن تحافظ الدفعة على معالجة الأخطاء وحدود المعاملات. دمج عبارات غير مترابطة في نص واحد ليس تحسينًا آمنًا، والدفعة التي تخفي عبارة فاشلة خلف إرسال ناجح أسوأ من أوقات الانتظار التي وفّرتها.

أعد استخدام الاتصالات قبل أن تشتري النطاق الترددي

الاتصال الجديد يكلّف تحليل الاسم ومصافحة TCP وتفاوض TLS ومصادقة، وعلى مسار عالي التأخير كل واحد من ذلك رحلة ذهاب وإياب أخرى قبل أن يعمل الاستعلام الأول. توجد تجمعات الاتصالات لدفع تلك التكلفة مرة لكل عملية لا مرة لكل نداء.

في ADO.NET، إغلاق اتصال مجمّع أو التخلص منه يعيده للاستخدام بدلًا من فتح اتصال مادي جديد، لذا فالنمط الذي يبدو تسريبًا هو في الغالب الاستخدام الصحيح. تحقق من أن التجمع مستخدم فعلًا بدلًا من افتراض ذلك: سجّل إنشاء الاتصالات المادية، أو راقب عدد الجلسات على الخادم أثناء عمل الشاشة. وإرشادات أداء SQL تقول الشيء نفسه عن تقليل رحلات الذهاب والإياب وتجميع النداءات المتكررة غير المخططة، مع أمثلة خاصة بالخدمة ينبغي أن تطبقها على نشرك.

التجميع يزيل تكلفة الإعداد ويترك أوقات انتظار الاستعلامات المتتابعة كما هي. إنه شرط مسبق لقياس نظيف لا إصلاح بحد ذاته.

وازن نقل التنفيذ أقرب إلى البيانات

تشغيل التطبيق قرب قاعدة البيانات يستبدل كثيرًا من التبادلات البعيدة مع قاعدة البيانات بجلسة عرض بعيدة واحدة. لحمل كثير الطلبات قد يكون ذلك تغييرًا كبيرًا، وهو تغيير تشغيلي بقدر ما هو تغيير في الأداء: إدارة الجلسات والتحكم في الوصول ونشر البرمجيات وتجربة المستخدم كلها تنتقل مع التطبيق.

قِس الواجهة الفعلية والبيانات التي تنقلها قبل أن تفترض أن أي اتجاه أسرع. جلسة سطح المكتب البعيدة تنقل البكسلات، وشاشة برسوم كثيفة قد تعمل على المسار نفسه أسوأ من الاستعلامات التي استبدلتها، خصوصًا عندما يعيد العميل الرسم باستمرار.

ثم أعد الفعل الأصلي وقارن ثلاثة أرقام: أوقات الانتظار المتتابعة وحجم النتائج وزمن الإنجاز من طرف إلى طرف. التحسين الذي يغيّر مهمة المستخدم المقيسة مع الحفاظ على صحة البيانات وسياسة الوصول هو الجدير بالاحتفاظ.

مقالات ذات صلة