Hide this notice

مرحبا أنت تستخدم انترنت اكسبلورر ٦ و هو متصفح اصدر في العام 2001 الا يبدو لك ذلك قديما .

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

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

Post Pic

Mysql : تحسين الأداء optimization

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

هناك عدد من الأفكار التي يمكنك تطبيقها في عند تصميم برنامج لتحسين أداء و زيادة سرعة البرنامج .

استخدم أمر Explain

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


select *from table

ضع الامر قبل الاستعلام كالتالي


EXPLAIN select * from table

سيظهر لك جدول النتائج يحتوي على التالي :

  • id : رقم تعريفي للإستعلام و هو رقم تسلسلي.
  • select_type : نوع الاستعلام سيكون أحد التالي :
    • SIMPLE : استعلام بسيط لا يستخدم أي من طرق اتحاد أو اندماج الاستعلامات .
    • PRIMARY :استعلام خارجي .
    • UNION : استعلام ثاني أو تالي باستخدام الاتحاد
    • DEPENDENT UNION : استعلام ثاني أو تالي باستخدام الاتحاد يعتمد على استعلام خارجي .
    • UNION RESULT: نتائج اتحاد
    • SUBQUERY: استعلام متفرع
    • DEPENDENT SUBQUERY : أول استعلام في استعلام متفرع يعتمد على استعلام خارجي
    • DERIVED : استخدام استعلام فرعي بعد From في الاستعلام الرئيسي
    • UNCACHEABLE SUBQUERY : استعلام فرعي لا يمكن الاحتفاظ بنتائجة و بالتالي سيتم طلبه في عند طلب كل صف .
  • table : اسم الجدول الذي سينفذ عليه الاستعلام
  • type: نوع الدمج Join و سأذكرها في الأسفل من الأفضل إلى الاسوء من حيث المحافظة على موارد النظام .
    • system : الجدول يحتوي على صف واحد فقط و هي استعلامات خاصة بالنظام مثلا تاريخ اليوم أو الوقت ..الخ
    • const :صف واحد يعتمد على قيمة ثابتة .
    • eq_ref: صف واحد من هذا الجدول مع كل مجموعة من الجدول السابق ( في حالات استعلام من أكثر من جدول ) . و هذه أفضل نتيجة يمكنك الحصول عليه على أرض الواقع .
    • ref : كل النتائج المطابقة من هذا الجدول لكل مجموعة من الجدول السابق .
    • Fulltext: عملية الدمج join تمت بواسطة فهرس من نوع Fulltext .
    • ref_or_null : مشابهه بشكل كبير ل ref لكن بالإضافة لذلك فمحرك mysql يقوم بالبحث عن الصفوف التي تحتوي على null (فارغة ).
    • index_merge :و هذا يدل على انه تم استخدام Index Merge optimization لمعالجة هذا الإستعلام .
    • unique_subquery :الاستعلامات الفرعية التي تعتمد على المفتاح الرئيسي Primary key أو قيمة متفردة Unique .
    • index_subquery :الإستعلامات الفرعية التي تعتمد على قيمة مفهرسة .
    • range : فقط الصفوف في مجال معين تم اختيارها بواسطة معاملات المقارنة مثل <>=… الخ .
    • index : هذا الإستعلام يقوم بعمل بحث كامل في فهارس الجدول .
    • All : اسوء الانواع لو ظهرت لك في نتائج الاستعلام بدلها و ابحث عن طريقة افضل لان عملية البحث تتم في الجدول كامل و هذه سيؤثر على الأداء بشكل سلبي .
  • Possiable keys : عرض ما هي الفهارس التي تم استخدامها .
  • Keys : يعرض ما هو القيمة المفتاحية التي قرر استخدامها .
  • key_len : طول القيمة المفتاحية .
  • ref : ما هي الفهارس التي تم استخدامها  .
  • rows: عدد الصفوف التي تم التوصل لها
  • extra : معلومات إضافية

SQL_CACHE

سيقوم mysql بالاحتفاط بنتائج الأستعلامات و بالتالي تخفيف الضغط على قاعدة البيانات و و سيتم إلغاء هذه النتائج المحتفظ بها  و إنشاء نسخة جديدة في حال تم تعديل الجداول من إضافة و تحرير … الخ للتفعيل استخدم الأمر التالي


query_cache_type = 1
query_cache_size = 26214400

الرقم 26214400 يساوي  25mb يمكن أن يكون أي رقم تختاره للمساحة المتوفرة لتخزين النسخة .

SQL_NO_CACHE

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

SQL_BUFFER_RESULT

الامر يقوم بوضع نتائج الاستعلام في  جدول مؤقت و بالتالي تخفيف الضغط عن الجدول الأساسي .

استخدم optimize

لإعادة تنظيم الجداول خاصة بعد عمليات الحذف و التعديل الكبيرة .. يمكنك القيام بذلك من خلال phpmyadmin فالأمر موجود بين القوائم أو باستخدام


optimize tablename ;

حيث tablename هو اسم الجدول .

Slow Query Log

وهي خاصية في محرك mysql تمكنك من الكشف عن الاستعلامات التي استغرقت أكثر من الوقت المسموح به من قبل mysql . لو كتت تملك صلاحية الدخول إلى Mysqld يمكنك استخدام الأمر


--log-slow-queries[=file_name]

حيث filename هو اسم الملف الذي سيتم تخزين هذه البيانات فيه .

لو لم تحدد اسم الملف و استخدم الأمر بالشكل التالي


--log-slow-queries

سيتم تخزين البيانات في ملف باسم


host_name-slow.log

حيث host_name هو اسم المستضيف .

HIGH_PRIORITY

نستخدم هذا الأمر خلال الأستعلام نفسه لإعلام محرك mysql بأهمية هذا الأستعلام و ضرورة تنفيذة قبل أي استعلام آخر و إعاطائه أولية التنفيذ.

LOW_PRIORITY

و هو عكس السابق نستخدمة لإعطاء بعض الإستعلامات أولية تنفيذ دنيا و بالتالي ننظم عملية تنفيذ الأستعلامات .

SQL_BIG_RESULT

يمكنك استخدام هذا الأمر إذا كنت تستخدم استعلام يحتوي على Distinct و group by و تتوقع ان نتائج الإستعلام ستكون كبيرة و بالتالي يقوم mysql بإنشاء جدول مؤقت لزرع النتائج وترتيبه  لتقليل الضغط على الذاكرة المؤقتة .

خاتمة

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

بقلم : فاطمة العمادي

أم و زوجة .. مصممة حرة و مصورة .. عرف الناس كتاباتي التقنية من خلال شخصية خيالية هي الدكتور نت . اصمم المواقع منذ العام ١٩٩٩م .

أوسمة : , , , , , , , ,