سؤال

أنا مهتم في معرفة كيفية التعامل مع قواعد البيانات الاتصالات التي لا صراحة مغلقة من قبل الكيان الذي بدأ الإتصال.

  1. أقول لدي قاعدة بيانات التي يمكن أن تقبل فقط 2 الاتصالات المتزامنة في وقت واحد.لدي قطعة من التعليمات البرمجية التي تفتح اتصال و لم يغلق عليه.هذه قطعة من التعليمات البرمجية إلى الأبد ، ولكنه يستخدم الاتصال مرة واحدة فقط في العمر ولكن كائن اتصال لم يخرج من نطاق ، لذلك فإنه ليس من القمامة التي تم جمعها.أقول تشغيل 2 حالات من هذا القانون.يعني حتى تم إنهاء البرنامج أو الاتصال مرات (بسبب الخمول) قاعدة البيانات لا يمكن أن يقبل لا مزيد من الاتصالات ؟

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

  3. إذا كنت فتح اتصال في قطعة من التعليمات البرمجية و لا إغلاق الاتصال صراحة ، ولكن البرنامج ينهي ثم كيف قاعدة البيانات استعادة هذا الصدد ؟

هل كانت مفيدة؟

المحلول

الأساسية بروتوكول اتصالات قاعدة البيانات عادة TCP/IP على أساس.اتصال يمكن إنهاؤها في واحدة من عدة طرق:

  1. الخادم يغلق عليه برشاقة ويحصل على إقرار من العميل.
  2. العميل يغلق هو برشاقة و يتلقى اعتراف من الخادم ؛
  3. مهلة الاتصال.العميل والخادم كلا على حدة قال كل منهما أنظمة التشغيل أن اتصال مغلقة.
  4. الاتصال بقوة مغلقة من قبل أي من الجانبين.

في حالة (3), اتصالات TCP يجب أن تبقى على قيد الحياة عن طريق إرسال الرسائل الوهمية كل ذلك في كثير من الأحيان لتجنب مهلة.الاتصال الخاص بك قد مهلة لأن أيا من الطرفين لم يفعل هذا (و اتصال قاعدة بيانات إنه ليس شيء عادة ما تحتاج إلى القيام به).

فمن الممكن تماما لفترة من الوقت على جانب واحد إلى أن إغلاق إيرباص جانب آخر لا تزال تعتقد أنها مفتوحة.الرسائل قد أرسلت في تلك الحالات (و عادة التخلص منها).

كل اتصال ("مأخذ") يستخدم نظام التشغيل الموارد يسمى ملف واصف (UNIX لغة نظام التشغيل الخاص بك قد يطلق عليه شيء آخر) ، وهو مؤشر إلى I/O الموارد و نفس الشيء المستخدمة في ملف مفتوح (مرة أخرى ، OSs قد تختلف الأسعار).

الحد على اتصالات على قاعدة البيانات الخاصة بك سوف تكون أقل من:

  • تكوين الحد التشغيل.
  • أقصى واصفات الملفات المسموح بها لهذه العملية (ناقص أي تستخدم I/O النشاط) ؛ و
  • (ربما) إعدادات النظام أو السياسات على اتصال حدود.

إذا لم يكن الاتصال TCP القائمة (على سبيل المثال نظام ملفات socket كما هو غالبا ما تستخدم مع الخلية على أنظمة UNIX) المبادئ هي في الواقع جدا simlar.

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

أن الموارد الخارجية (وليس رمز العميل الخاص بك هو استخدام) الذي يحمل اتصال مفتوحة يدفع أي حدود.

نصائح أخرى

للإجابة على الأسئلة الخاصة بك في النظام:

  1. نعم, ربما.إلا عن طريق "الاتصالات المتزامنة" لا تعني في الواقع "الاستعلامات المتزامنة".إذا يو تحمله اتصال قاعدة البيانات المفتوحة ، هو مفتوح.

  2. جمع القمامة قد أو قد لا تنظيف الصدد.يعتمد على اللغة و برنامج تشغيل قاعدة البيانات المستخدمة.(جمع القمامة قد تكون محدودة إلى استعادة ذاكرة الموارد مثل اتصالات TCP.)

  3. عند إنهاء البرنامج ، عموما نظام التشغيل هو المسؤول عن تنظيف جميع الموارد المستخدمة.وهذا يشمل إغلاق TCP, الخ.اتصالات.حتى بالنسبة لمعظم أنواع الاتصال قاعدة البيانات سوف يتم إعلامك أن الجانب الآخر أغلق الاتصال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top