سؤال

باستخدام Oracle 10g, الوصول إليها عبر بيرل DBI لدي جدول مع بضع عشرات من ملايين الصفوف التي يتم تحديثها عدة مرات في الثانية في حين قراءتها من أكثر من ذلك بكثير في كثير من الأحيان شكل عملية أخرى.

قريبا تردد التحديث سوف تزيد من حجم (ربما اثنين).اقترح شخص ما أن ارتكاب كل ن التحديثات بدلا من بعد كل تحديث سوف تساعد في الأداء.

لدي بعض الأسئلة:

  • سوف يكون أسرع أو أبطأ أو أنه يعتمد (التخطيط لقياس سواء بطريقة أسرع وقت ممكن لنتمكن من محاكاة جديدة تحميل)
  • لماذا ستساعد / تعوق الأداء.
  • إن "الأمر يتوقف ..." , على ماذا ؟
  • إذا كان ذلك يساعد ما هو أفضل قيمة ن ؟
  • لماذا لا يمكن المحلية DBA يكون من المفيد إجابة عندما كنت في حاجة واحدة ؟
    (في الواقع أنا أعرف إجابة هذا السؤال) :-)

تحرير:

@codeslave :شكرا btw فقدان uncommited التغييرات ليست مشكلة ، لا حذف البيانات الأصلية المستخدمة تحديث حتى أنا متأكد من كل شيء هو بخير , راجع للشغل تنظيف سيدة لم ويفصل السيرفر مرتين :-)

بعض غوغلينغ أظهرت أنها قد تساعد بسبب قضية تتعلق الاستعادة شرائح, ولكن ما زلت لا أعرف القاعدة ن كل بضع عشرات ؟ المئات ؟ ألف ؟

@diciu :معلومات كبيرة, أنا سوف بالتأكيد ننظر في ذلك.

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

المحلول

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

في Oracle 10g هناك غير متزامن ارتكاب الذي يجعله أسرع بكثير ولكن أقل موثوقية: https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-6158695.html

PS أنا متأكد أنه في السيناريو رأيت في بعض التطبيقات تغيير عدد من ملتئم التحديثات من 5 إلى 50 ألف يجعلها أسرع من أمر من حجم (10 مرات أسرع).

نصائح أخرى

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

فضلا عن الحد من ارتكاب تردد, يجب عليك أن تنظر أيضا أداء معظم التحديثات بدلا من الفردية منها.

إذا كنت "لا حذف البيانات الأصلية المستخدمة في تحديث حتى [أنت] التأكد من أن كل شيء على ما يرام", ثم لماذا لا يمكنك إزالة جميع تلك تدريجي يرتكب في بين ، الاستعادة إذا كان هناك مشكلة ؟ يبدو أنك فعال بناء نظم المعاملات على رأس المعاملات.

@CodeSlave الخاص بك الأسئلة و الإجابة عليها من قبل @stevechol , إذا كنت إزالة جميع تدريجي يرتكب سيكون هناك أقفال.أعتقد إن أفضل شيء يأتي على طول انا اتبع نصيحته اختيار رقم عشوائي ، مراقبة الحمل وضبط وفقا لذلك.أثناء تطبيق @diciu twaks.

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

أسرع/أبطأ ؟

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

لماذا هذا يساعد ؟

ومن الواضح أن أقل ارتكاب العمليات ، وهذا بدوره يعني أقل من القرص يكتب ، إلخ.

DBA و مباشرة الأجوبة ؟

إذا كان من السهل أنك لن تحتاج إلى واحد.

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