قاعدة المعرفة   /   مقالات عامة
كيفية تحسين MySQL
منشورة في 07 July 2024 12:38 pm

يمكنك اختيار تحسين خادم MySQL على المستوى الأساسي أو على المستوى المتقدم.

 

التحسين الأساسي

يمكن تحسين خادم MySQL على مستوى أساسي باستخدام سكربت MySQL tuner.

  1. تحميل السكربت باستخدام الأمر:

    wget https://github.com/major/MySQLTuner-perl/zipball/master
  2. تشغيل الأوامر التالية:

    unzip master cd major-MySQLTuner* chmod +x mysqltuner.pl perl mysqltuner.pl

السكربت سيفحص حالة MySQL ويقدم لك المتغيرات التي تحتاج إلى تعديلها لتحسين أداء MySQL.

التحسين المتقدم

لتنفيذ تحسين على مستوى متقدم، يجب ضبط خادم MySQL بناءً على التطبيقات واستخدام الموارد. فيما يلي بعض المتغيرات النظامية المهمة التي تحتاج إلى تعديل للاستخدام العادي:

table_cache: كلما وصل MySQL إلى جدول، يتم تخزين الجدول في الذاكرة المؤقتة. يمكن استرجاع البيانات بشكل أسرع من الجداول التي يتم الوصول إليها بشكل متكرر إذا كانت مخزنة في الذاكرة المؤقتة.

يمكنك التحقق مما إذا كان النظام يحتاج إلى زيادة قيمة table_cache من خلال فحص متغيرات الحالة open_tables وopened_tables خلال أوقات الذروة. استخدم الأمر:

SHOW STATUS LIKE "open%tables%";

open_tables هو عدد الجداول المفتوحة في الذاكرة المؤقتة، في حين أن opened_tables هو إجمالي عدد الجداول المفتوحة. نظرًا لأن MySQL يدعم المعالجة المتعددة، يمكن تنفيذ عدة استعلامات على نفس الجدول في نفس الوقت. لذلك ستفتح كل من هذه الاستعلامات جدولًا.

القيمة الافتراضية لـ table_cache هي 64. إذا كان لديك ذاكرة RAM كافية على الخادم الخاص بك، يمكنك زيادة قيمة table_cache. سيؤدي ذلك إلى تقليل إجمالي عدد الجداول المفتوحة عن طريق نقل هذه الجداول إلى الذاكرة المؤقتة.

query_cache_size: إذا كان لديك استعلام MySQL يتم تنفيذه بشكل متكرر من قبل موقعك، يمكن تعيين MySQL لتخزين نتائج هذا الاستعلام في الذاكرة المؤقتة.

يمكنك تمكين التخزين المؤقت للاستعلامات عن طريق تعيين المتغير server query_cache_type إلى 1 وتعيين حجم الذاكرة المؤقتة في المتغير query_cache_size. إذا تم تعيين أي من القيمتين إلى 0، فلن يتم تمكين التخزين المؤقت للاستعلامات.

key_buffer_size: هذا هو حجم الذاكرة المؤقتة المستخدمة من قبل جميع الفهارس. من الناحية المثالية، يجب تعيينه إلى ربع الذاكرة المتاحة على الأقل أو أكثر.

الحل الأمثل هو الحفاظ على النسبة التالية: Key_reads : Key_read_requests يجب أن تكون 1:100 وKey_writes / Key_write_requests يجب أن تكون أقل من 1 دائمًا.

إذا كانت قيمة Key_reads عالية مقارنةً بـ Key_read_requests، فأنت بحاجة إلى زيادة key_buffer_size.

 

يمكنك الحصول على قيمة هذه المتغيرات باستخدام الأمر:

SHOW GLOBAL STATUS where Variable_name like "Key_%";
 
+————————+———–+ | Variable_name | Value | +————————+———–+ | Key_blocks_not_flushed | 0 | | Key_blocks_unused | 48394 | | Key_blocks_used | 8078 | | Key_read_requests | 973911676 | | Key_reads | 54135 | | Key_write_requests | 824911 | | Key_writes | 739554 | +————————+———–+

sort_buffer_size: هذا المتغير يحسن عمليات الفرز الكبيرة والمعقدة. زيادة هذه القيمة لعمليات ORDER BY أو GROUP BY أسرع. القيمة الافتراضية هي 2MB.

thread_cache_size: إذا كان هناك حركة مرور كبيرة على خادم MySQL، سيقوم الخادم بإنشاء العديد من الخيوط الجديدة بمعدل عالٍ. زيادة هذه القيمة إذا كانت قيمة المتغير Threads_created كبيرة.

read_rnd_buffer_size: يستخدم بعد عملية الفرز لقراءة الصفوف بالترتيب. زيادة هذه القيمة يمكن أن تحسن الأداء. القيمة الافتراضية هي 128K.

tmp_table_size: يحدد الحجم الأقصى للجدول المؤقت في الذاكرة. إذا كانت الذاكرة غير كافية، سيتم إنشاء جدول MyISAM على القرص. زيادة هذه القيمة إذا تم إنشاء العديد من الجداول على القرص.

استخدم الأوامر التالية:

 
SHOW GLOBAL STATUS where Variable_name like "Created_tmp_disk_tables"; SHOW GLOBAL STATUS where Variable_name like "Created_tmp_tables";
لا زلت بحاجة للمساعدة؟ أرسل تذكرة دعم