سؤال

في Firebird 2.0، هل استخدام معاملة صريحة بشكل أسرع في أمر SELECT من تنفيذ الأمر بأمر ضمني؟

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

المحلول

وجميع أوامر SQL (SELECT، INSERT، UPDATE الخ) يمكن تنفيذها فقط في بعض المعاملات. لا يمكنك تشغيل أمر مع الصفقة خارج يجري التي مسبق لذلك.

نصائح أخرى

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

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

وفايربيرد لا يمكن تنفيذ أوامر SQL دون معاملة.

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

بالإضافة إلى ما سبق، ضع في اعتبارك أن المعاملة يمكن أن تكون:

  • قراءة و كتابة
  • يقرأ فقط

بالنسبة إلى SELECT، سيكون من الأفضل استخدام معاملة للقراءة فقط

ملاحظة:هناك أنواع أخرى من المعاملات ولكن هذين هما المهمان لهذا الموضوع.

وعادة معاملة يضيف بعض النفقات العامة. ومع ذلك، يجب أن تكون حذرا إذا لم يكن لديك بدأت بعض المعاملات الافتراضية عند الاتصال إلى فايربيرد.

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

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

وهنا بعض المناقشات حول هذا الموضوع

http://forums.devshed.com/firebird-sql-development-61/difference-active-transaction-863103.html

http://www.slideshare.net/ibsurgeon/3-how-transactionswork

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