سؤال

وأنا لست VB مبرمج عظيم، ولكن أنا المكلفة بالحفاظ على / تعزيز تطبيق سطح المكتب VB6 يستخدم سايبيس باعتبارها الجهة الخلفية. هذا التطبيق لديه حوالي 500 مستخدم.

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

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

في التعليمات البرمجية التي كانت في المكان، هناك دعوة لبدء معاملة سايبيس. داخل كتلة بين BeginTrans CommitTrans و، هناك دعوة إلى ملف DLL يقوم بتحديث قاعدة البيانات. أنا وضعت قانون بلدي جديد في فئة وحدة نمطية في DLL.

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

والشكر قبل لمن كان في وضع مماثل ويمكن أن تقدم المشورة.

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

المحلول

وتبين أن الجاني كان مربع الرسالة التي تظهر ضمن نطاق BeginTrans ويدعو CommitTrans. فإن المستخدم مع مربع الرسالة الحفاظ على قفل حظر على قاعدة البيانات حتى اعترفوا الرسالة. وكان الحل لتحريك مربع الرسالة خارج نطاق المذكور.

نصائح أخرى

وأنا لست قادرا على فهم الصورة كاملة دون رمز SQL، الذي تستخدمه.

وأيضا، إذا كان هو إدراج واحد أو التحديث، لماذا أنت باستخدام المعاملة؟ هل من الممكن أن العديد من المستخدمين سوف محاولة تحديث نفس الصف؟

وسيكون من المفيد لو قمت بنشرها على حد سواء رمز VB وSQL الخاص بك (مع خطة الاستعلام إذا كان ذلك ممكنا). ولكن مع المعلومات التي لدينا. وأود أن تشغيل update statistics table_name مقابل الجدول للتأكد من أن خطة الاستعلام حتى الآن.

إذا كنت على يقين من أن التعليمات البرمجية لديها لتشغيل داخل معاملة هل حاولت مضيفا كتلة المعاملة الخاصة التي تحتوي على SQL الخاص بك بدلا من استخدام واحد بالفعل هناك؟

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