بلص - حلق بأعضائك

الساعة الآن +3: 2:30 صباحاً الاثنين. 6 سبتمبر/أيلول, 2010 م.


يُسمح للزوار بالتعليق.
Rating: 5 votes, 5.00 average.

جداول ذات محرك InnoDB عالي الأداء

هاني كتبه بتاريخ 29/11/2009 الساعة 7:23 م

وصلتني في العام الماضي رسالة من صاحب موقع يواجه مشكلة في قواعد البيانات الخاصة بموقعه, علما أن الخادم الخاص بالقاعدة مواصفاته من أعلى المواصفات الموجودة بالسوق, و ذاكرته العشوائية تصل إلى 24 جيجا!

سألته عن عدد النقرات في الثانية الواحدة, و أجاب بأنها تصل إلى 200 خلال وقت الذروة, و أنّ متوسط الاستعلامات ما بين 10-25 بين الصفحات.

25 استعلام * 200 نقرة في الثانية / 2 المتوسط = 2500 استعلام في الثانية الواحدة. لكن هذا ليس بمشكلة كبيرة و يمكن التغاضي عنها, طالما أن خادمه قوي.

أخبرته أن هنالك عدة حلول, و أجاب من فوره بقول: الأسرع , لأن الوضع سيئ, و تعليق الموقع مستمر ليل نهار.

أعلم أنك تعتقد أن الخلل هو من الاستعلامات. حقيقة: لا!. دعني اشرح لك بالتفصيل, فالتعليق ينتج عندما يتم إغلاق الجداول عن الاستعلامات و إدخال البيانات. و هذا ما يحدث مع محرك MyISAM, الافتراضي في قواعد بيانات MySQL. و متى يتم إغلاق الجدول؟ إن كان هذا هو سؤال فإليك الإجابة.

أي تعديل على الجدول أو أي استعلام ثقيل (يستغرق الكثير من الوقت لتنفيذه), قد يتسبب بغلق الجدول بالكامل و من ثم رفض جميع الطلبات حتى ينتهي التعديل أو الاستعلام الحالي (Table Locking Issues).

هذه العملية تستهلك الكثير من الذاكرة العشوائية, حيث أن الطلبات المرسلة توضع في الانتظار, و التي بدورها غالباً ما تكون في RAM.

زوار الموقع السابق ذكره, على درجة عالية من النشاط, فقد كانوا ينفذون العديد من عمليات الإدخال على الجداول, و التي بدورها تغلق التصفح عن الآخرين لينتظروا أصحاب الاتصالات البطيئة من أن يرسلوا حزمهم إلى الخادم و الذي بدوره سيقوم على معالجتها عن طريق قاعدة البيانات. و للتخلص من مشكلة الإغلاق الكامل للجداول, لجأنا إلى InnoDB.

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

بعد إعداد MySQL بالشكل المطلوب و البدء بتحويل الجداول. (و الذي استغرق يوما كاملا على قاعدة بيانات تجاوزت 15 جيجا) بدأنا بالاختبار و بتنفيذ الكثير من الاستعلامات البطيئة, و كانت النتيجة جداً مذهلة. فلم يعد هنالك أي تعليق بالموقع, غير أن بعض البطء ما يزال موجودا بسبب استعلامات لا تتمتع حقولها بأي نوعٍ من الأرشفة.

أضفنا الأرشفة "Index", لأغلب الحقول, و أعدنا بعض الجداول إلى محرك MyISAM, لأن InnoDB لا تدعم الفهرسة الكاملة. و الذي خصصناه على الجداول التي تحمل التعليقات, و القابلة للبحث في محرك بحث الموقع. و بعدها عمل الموقع بسلاسة تامة و دون أي توقف.

و لتتعرف أكثر على الاستعلامات البطيئة و الغير مؤرشفة (الاستعلامات التي تبحث بكامل الجدول لتصل إلى غايتها) و طريقة اصطيادها, اطلع على الصفحة التالية:
http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html

قبل مدّة قريبة, اتصل بي ليسألني هل من الممكن تحسين أداء MySQL أكثر؟ فأجبته بنعم, يمكن ذلك. عن طريق الاستغناء عن محرك InnoDB الأساسي, بنظام منفصل كالنظام InnoDB Plugin, و بعد تحديث خادم القواعد إلى الإصدار 5.1.37 و تركيب InnoDB Plugin 1.4, تغير الأداء بنسبة كبيرة. و سألته إن كان يرغب بأن لا يتوقف موقعه خلال النسخ الاحتياطي. فعليه استخدام النظام InnoDB Hot Backup, لكن حينها قد دفع الكثير, و لم يكن مستعدا لدفع 500$ سنويا مقابل توقف 10 دقائق في اليوم!.

ما دفعني لكتابة هذه المقالة - أو هذه القصة إن صح التعبير - هو Anders في مقالته:
Part 1 vB4mance: Helping communities grow, performance data model changes in vB 4.0, و الذي تحدث به عن بعض مما تحدثت عنه هنا.

حقيقة ما تكلم عنه جميل جداً, لكنه لم يوضح أن الإعداد الخاطئ لخادم MySQL من خلال ملف my.ini, قد يتسبب بمشاكل كبيرة علىه, و بطء غير متوقع, على عكس ما ينتج من MyISAM. فإن المخاطرة به أقل منه في نظيره. فمحرك InnoDB قد يتسبب بسقوط بعض الحقول من الجداول, و الذي يكون سببه هو استخدام إعدادات على الخادم, تعنى بالتخزين المؤقت أو تقادم في إصدارته. لكن لا تقلق, فهذه مجرد تحرّكات تجارية, ترهبك حتى تشتري ما لا تحتاجه, فأنا عن نفسي لم أواجه أي مشاكل معه منذ العامين الماضيين.

للمبتدئين, أنصحهم بالاستفادة من هذه الإعدادات:

بعد أن ألقيت نظرة على الإصدار الرابع للمنتدى, و الرموز البرمجية التي تعنى باستخدام InnoDB, أصابني بعضاً من الإحباط, فكأنما من قام بكتابة تلك الرموز لم يكمل عامه الأول في برمجة PHP و التعامل مع MySQL, كحال السفينة. فإنها تغرق في حال تعدد قباطنتها. و vBulletin بها أكثر مما وضع على برمجة Windows 7 من ربان.

على كل حال و بعد ما شاهدته, قررت أن أطور منتج بسيط و مجاني. يعنى بتحويل الجداول إلى InnoDB بشكل سلس. فبعد تركيبه, تتوجه إلى الصيانة - في لوحة تحكم المنتدى - و تجد الخيار الخاص به آخر الصفحة.

لتحميل المنتج:
http://files.plusvb.com/plus/product-plusvb_myisam_to_innodb.zip

موضوع المنتج:
http://www.vbulletin.org/forum/showthread.php?t=228846

يرجى أخذ نسخة احتياطية من قاعدة البيانات قبل البدء بتحويل الجداول. ولا تنسى أن تغلق المنتدى وقتها.

هاني.
كتبت فيبلص, ‏المنتجات, ‏الخوادم
المشاهدات 5434 التعليقات 14 Email Blog Entry
إجمالي التعليقات 14

التعليقات

  1. Old Comment
    السلام عليكم
    ابوسعد
    أغلق المنتدى وقت أخذ البيك أب أو وقت تحويل الجداول ؟

    s-qu كتبه بتاريخ 01/12/2009 الساعة 2:21 ص s-qu غير متصل
  2. Old Comment
    صورة هاني الرمزية
    عليكم السلام والرحمة,

    اقتباس:
    أغلق المنتدى وقت أخذ البيك أب أو وقت تحويل الجداول ؟
    أغلق المنتدى, خذ باك أب, حول الجداول, افتح المنتدى.

    لكن قبل كل شيء, تأكد من اعداد قواعد البيانات بالشكل الصحيح.


    من أهمل الخيارات:

    رمز برمجي:
    innodb_flush_log_at_trx_commit = 2
    innodb_file_per_table
    innodb_flush_method = O_DIRECT
    موفق.
    هاني كتبه بتاريخ 01/12/2009 الساعة 3:11 ص هاني غير متصل
  3. Old Comment
    بصراحة موقعي يستهلك موارد السيرفر بشكل كبير

    وهل المنتدى يحتاج مستقبلا لهذا المنتج دائما ام فقط عند التحويل ومن ثم ازالته .
    اقصد عند الترقية للنسخه الرابعه
    لقيت روحي كتبه بتاريخ 08/12/2009 الساعة 3:09 م لقيت روحي غير متصل
  4. Old Comment
    صورة هاني الرمزية
    فقط عند التحويل. و بعدها قم بازالته.
    هاني كتبه بتاريخ 09/12/2009 الساعة 10:19 م هاني غير متصل
  5. Old Comment
    عند بدء التحويل اتتني هذه الرساله
    InnoDB is DISABLED.
    Please remove 'skip-innodb' form 'my.ini'.

    ايش مسار my.ini في الشيل
    لقيت روحي كتبه بتاريخ 11/12/2009 الساعة 2:26 ص لقيت روحي غير متصل
  6. Old Comment
    صورة هاني الرمزية
    /etc/my.cnf
    أو
    /etc/my.ini
    هاني كتبه بتاريخ 11/12/2009 الساعة 3:10 ص هاني غير متصل
  7. Old Comment
    مقال رائع.

    أجمل ما في المقالة هو سهولة التحويل.

    آه لو كان عندي عضوية في ترايدنت لنشرته.
    مرجان كتبه بتاريخ 11/12/2009 الساعة 7:03 م مرجان غير متصل
  8. Old Comment
    عملت التحويل ولكن انتهى وقت تحميل الصفحه ولم ينتهي من كل لقوعد
    رجعت وحاولت ان اعيد الكرة وايضا نفس اللي صارلي
    ورجعت المرة الثالثه واعطاني صفحة لايوجد بها سوا هذه الجملة
    vBulletin® v3.8.4 Patch Level 1, Copyright ©2000-2009, Jelsoft Enterprises Ltd.
    فقط ولا ادري هل اكتمل التحويل ام لا وكيف اتاكد من ذلك
    لقيت روحي كتبه بتاريخ 12/12/2009 الساعة 1:48 ص لقيت روحي غير متصل
  9. Old Comment
    صورة هاني الرمزية
    استعرض جداول قاعدة البيانات, و ابحث عن ما حدد بالصورة.


    اضغط على الصورة لرؤيتها بحجمها الطبيعي
    هاني كتبه بتاريخ 12/12/2009 الساعة 5:32 ص هاني غير متصل
  10. Old Comment
    صورة هاني الرمزية
    قد تستغرق العملية بعض الوقت. لذلك لا تستعجل عليه.
    هاني كتبه بتاريخ 12/12/2009 الساعة 5:33 ص هاني غير متصل
  11. Old Comment
    كل الملفات تحولت الى InnoDB
    ماعدا هذه الملفات
    post ==== MyISAM
    language === MyISAM
    groupmessage === MyISAM
    socialgroup === MyISAM
    thread === MyISAM
    session , cpsession ==== MEMORY
    لقيت روحي كتبه بتاريخ 12/12/2009 الساعة 11:29 م لقيت روحي غير متصل
  12. Old Comment
    صورة هاني الرمزية
    ممتاز, الأمر تم بسلاسة. هذه الجداول لا يمكن تحويلها في الوقت الحالي. أو على الأقل يمكن لكن يلزم لها تعديلات جذرية على المنتدى. لذلك لا تشغل بالك بها.

    بالتوفيق.
    هاني كتبه بتاريخ 12/12/2009 الساعة 11:41 م هاني غير متصل
  13. Old Comment
    الله يطمنك بالخير اخوي هاني
    مشكور وما قصرت ،،، يعطيك العافيه
    لقيت روحي كتبه بتاريخ 13/12/2009 الساعة 1:04 م لقيت روحي غير متصل
  14. Old Comment
    صورة هاني الرمزية
    حياك, و لا تنسى تبلغنا بالاداء الجديد للموقع.
    هاني كتبه بتاريخ 15/12/2009 الساعة 3:35 م هاني غير متصل
كتابة تعليق كتابة تعليق
مجموع التعقبات 0

التعقبات



كافة الحقوق محفوظة لبلص© 2006 - 2010, ماعدا العلامات التجارية المسجلة لغيرنا, فهي محفوظة لأصحابها.