الاستعلامات الصغيرة تعمل والكبيرة تفشل: أي حجم حزمة هو السبب؟
حزم برنامج تشغيل SQL Server وحدود رسائل MySQL و MTU لمسار IP وحدات مختلفة. لا يجعل الفشل المرتبط بالحجم منها قابلة للتبادل.
الاستعلامات الصغيرة تعود، أما الكبيرة فتتعلّق أو تُسقَط، وأول ما يخطر في البال أن شيئًا في حجم الحزمة غير صحيح. هذا الحدس صحيح عادةً، لكنه يستهدف الطبقة الخطأ في كل الحالات تقريبًا. ثلاثة إعدادات تشترك في كلمة حزمة وتقيس ثلاثة أشياء غير مترابطة: التغليف النقلي لبرنامج تشغيل قاعدة البيانات، وحد الرسائل في خادم قاعدة البيانات، ووحدة الإرسال القصوى في مسار IP. ضبط أحدها لعلاج عرض سبّبه آخر هو الطريق الذي يحوّل مشكلة من خمس دقائق إلى أسبوع من الضبط. الترتيب أدناه هو الذي كلّفني أقل وقت.
ثلاث طبقات وكلمة واحدة مشتركة
كل صف أدناه وحدة مختلفة بمالك مختلف، ولا يمكن الاستدلال على أي منها من الأخرى. يمكن أن تمتد رسالة قاعدة البيانات عبر مقاطع TCP كثيرة وحزم IP كثيرة، لذا فإن زيادة حجمها المسموح لا توسّع المسار، وتقليل إعداد برنامج التشغيل ليس العملية نفسها كتغيير MTU لواجهة. تظهر الكلمة في ثلاثة ملفات تهيئة مختلفة، ولهذا يعيد البحث عنها ثلاثة أجوبة غير مترابطة. اقرأ نص الخطأ أولًا، ثم قرّر أي ملف تفتح.
| Setting or observation | Unit it describes |
|---|---|
| SQL Server client network packet setting | The provider's transport packaging for that connection |
| MySQL communication packet limit | A database message, such as one statement, row or replication event |
| IP path MTU | The largest IP packet the path carries without fragmentation handling |
سجّل إلى أي طبقة تنتمي العملية الفاشلة قبل أن تفتح ملف تهيئة. نص الخطأ يقول ذلك عادةً، ونص الخطأ هو الجزء الذي يتخطاه الناس.
حدّد المزوّد قبل تغيير إعداده
بالنسبة إلى SQL Server، سجّل التطبيق واسم برنامج التشغيل أو المزوّد والإصدار وتهيئة الاتصال الفعّالة. يمكن لنص تشخيصي وتطبيق سطح مكتب أن يصلًا إلى الخادم نفسه عبر مزوّدين مختلفين، لذا فإعداد يساعد أحدهما لا يثبت شيئًا عن الآخر. تختلف الإعدادات الافتراضية للمزوّدين، ووجود حقل في سلسلة الاتصال باسم مشابه ليس دليلًا على أن كل مزوّد يفسّره بالطريقة نفسها.
لا تستبدل برنامج تشغيل مدعومًا بآخر قديم فقط لأن حلًا قديمًا استخدم صيغته. الوثائق الحالية لا تشجّع على تطوير جديد اعتمادًا على تلك المكوّنات القديمة، ووراثة قيودها مقايضة سيئة مقابل إعداد واحد.
رفض الرسالة ليس توقفًا في المسار
في MySQL 8.4، تصف وثائق حزمة الاتصال رفض عبارة أو صف أو حدث سجل ثنائي أكبر من الحد المطبق، وقد يهم حدّا العميل والخادم معًا. ذلك رفض على طبقة قاعدة البيانات، وليس تصريحًا بأن الشبكة يجب أن تحمل حزمة IP ضخمة. اقرأ الخطأ الفعلي وشكل الرسالة المخالفة: النتيجة الكبيرة المكوّنة من صفوف صغيرة كثيرة حالة مختلفة عن صف واحد ضخم، وهما تفشلان بطرق مختلفة.
تحتاج تركيبات MariaDB إلى الحدود والتشخيصات الموثّقة لإصدارها هي. نسخ إعدادات MySQL الافتراضية إلى MariaDB تخمين بخطوات إضافية.
كيف تبدو أدلة المسار في الواقع
لمشكلة حجم المسار بصمة خاصة: فشل نقلي متكرر يعتمد على الحجم على مسار معيّن وعائلة عناوين معيّنة، مع دخول الحمل الإضافي للنفق في الحساب وسلوك تغذية راجعة الاكتشاف كما يسمح المسار. المهلة وحدها لا تميّزها عن استعلام بطيء أو خطأ في برنامج التشغيل أو حد من جهة الخادم، و معاملة المهلة كدليل على مشاكل MTU ترسلك بثقة إلى الطبقة الخطأ.
إذا اختبرت المسار فعلًا، فأبقِ الوجهة والحساب وحمل العمل ثابتة حتى يكون المتغير الوحيد هو الحجم الذي تفحصه. اختبار تغيّرت فيه ثلاثة أشياء لا يخبرك بشيء عن أيها كان مهمًا.
غيّر متغيرًا موثّقًا واحدًا ثم سجّله
أبقِ الوجهة والحساب والمزوّد وحمل العمل ثابتة، وسجّل القيمة الأصلية، وطبّق تغييرًا واحدًا مدعومًا، وسجّل النتيجة. الإعداد الأصغر الذي ينجح فيه اختبار واحد دليل مفيد على تلك المنظومة المختبَرة؛ وهو ليس الحل الأمثل الشامل ولا يثبت ما سبّب الفشل الأصلي. هذان ادّعاءان مختلفان، ولا يدعم التجربة الواحدة إلا الأول.
حلّ الحد المحدَّد في طبقته هو، ثم دوّن أي طبقة كانت. التدوين هو ما يمنع الشخص التالي من ضبط برنامج التشغيل لأن المسار كان المشكلة.