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

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

أي تدفق يصمت

الاتصال المهم هو الذي يحمل حركة قاعدة البيانات، ويُعرف بعناوينه ومنافذه الخاصة. لا شيء آخر يجدده. إن ping إلى بوابة، واتصال SQL ثانٍ من المضيف نفسه، ونبض النفق نفسه تدفقات منفصلة بحالة منفصلة على كل جهاز يتتبعها.

ss -tio dst 10.60.4.20
sysctl net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_intvl net.ipv4.tcp_keepalive_probes

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

دوّن العناوين والمنافذ والواجهة التي يستخدمها الاتصال. حين تموت جلسة، تكون هذه التفاصيل هي ما يتيح لك سؤال الجهاز الصحيح عما فعله، بدلًا من السؤال هل كانت الشبكة تعمل.

هل تنتهي سياسة الخمول أم تحدّ

سياسان ينتجان العَرَض نفسه ويتطلبان استجابتين متعاكستين. يزيل مهلة الخمول حالة كان يمكن لحركة مؤهلة أن تجددها، ويمكن لـ keepalive أن يمنع ذلك. يزيل الحد المطلق للجلسة التدفق بعد مدة ثابتة بصرف النظر عن النشاط، ولا يغيّر أي keepalive ذلك.

اسأل مالك كل وسيط أي الاثنين ينفذه. يمكن لجدار ناري وجهاز NAT وموازن حمل وبوابة سحابية أن تحتفظ جميعًا بالحالة، وليس عليها أن تتفق. الأضيق هو الذي يحدد المهلة التي يجب أن تتغلب عليها.

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

مفتاح المقبس خلف القيم الافتراضية في Linux

keepalive اختياري لكل مقبس. تصف القيم الافتراضية للنواة كيف تتصرف المسابر بعد أن يكون المقبس قد فعّل الآلية، وهي لا تفعّلها للاتصالات القائمة. التطبيق الذي لا يطلبها أبدًا لا يحصل على أي مسابر، مهما قالت قيم sysctl.

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

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

EXPIRE_TIME إعداد قاعدة بيانات وليس إصلاحًا شبكيًا

يقدم Oracle Net آلية حيويته الخاصة، تُضبط في الملف الفعلي للعملية لا في ملف عشوائي يصادف أن له اسمًا مشابهًا. تُعبَّر القيمة بالدقائق.

SQLNET.EXPIRE_TIME = 5

غرضه الأساسي اكتشاف الاتصالات الميتة من جهة الخادم، وعلى المنصات التي تدعم النموذج المحسّن يضبط أيضًا سلوك TCP keepalive لتلك الاتصالات. هذه خاصية مفيدة: يمكن لطبقة قاعدة البيانات أن تنظّم المسابر دون أن تطلب من تطبيق العميل أن يتغير.

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

اختبر الفاصل الصامت ثم خطط للتعافي

مرّر اتصالًا جديدًا مسموحًا عبر فترة صامتة أطول من المهلة التي تحاول التغلب عليها، وراقب حركة الحيوية ونتيجة التطبيق. لا تلتقط محتوى الحمولة الذي لا تحتاجه؛ فالمؤقتات وحالة الاتصال تجيبان عن السؤال.

ss -tio dst 10.60.4.20
# after the quiet interval, same command
ls -l "$ORACLE_HOME/network/admin/sqlnet.ora"

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

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

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