سؤال

استمر في الركض في "ENQ: TX - TX ROV TOOL"، عندما أقوم بتشغيل أمر SQL أدناه في Oracle 9 DB. الجدول mytable هو طاولة صغيرة، مع أقل من 300 خطوط.

UPDATE MYTABLE
SET     col1 = col1 + :B3 ,
        col2    = SYSDATE
WHERE   :B2            = col3
    AND :B1        = col4

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

تعديل: لا أستطيع تغيير هذا الرمز، إنه داخل تطبيق طرف ثالث. يمكنني فقط تعديل DB.

ماذا يمكنني أن أفعل لتحسين سرعة قائمة انتظار Rowlock؟ كيف يمكنني تحسين وقت الانتظار حتى يتم تشغيل المواضيع الخاصة بي بشكل أسرع؟

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

المحلول

إذا كنت لا ترغب في حظرها، فلا تحاول تحديث عمياء. وبعد قم بإجراء تحديد لتحديث nowait أولا. إذا قمت برفع استثناء (ORA-00054)، فهذا يعني أن جلسة أخرى تعمل حاليا مع هذا الصف. في هذه الحالة، اعتمادا على الاحتياجات الخاصة بك، يمكنك محاولة تحديث صف آخر (هل تحاول إنشاء عملية قائمة انتظار / dequeue؟)، أو الانتظار (dbms_lock.sleep) أو إرجاع رسالة خطأ إلى تطبيق الاتصال.

سوف تفعلها أبدا مواجهة الجمود إذا قمت بإغلاق الصف مع تحديث nowait أولا.

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