نحن نشغل حزمة LAMP التي تتضمن MariaDB 10.5.15 على Centos 7. إنه خادم مخصص مزود بـ 4 وحدات معالجة مركزية وذاكرة وصول عشوائي 8 جيجابايت.

لم أواجه أي مشكلة حتى الأسابيع القليلة الماضية ، حيث لاحظت أن استعلامات بطيئة تستغرق من 8 إلى 9 ثوانٍ في سجل الاستعلام البطيء.

هذه الاستعلامات هي ضد قواعد بيانات INNODB متعددة ، ولكنها دائمًا ما تكون كبيرة (أي 10000+ صف). تحدث دائمًا بين الساعة 6 صباحًا و 8 صباحًا.

تحتوي الجداول المعنية على فهارس ، ويتم تنفيذ نفس الاستعلامات في أقل من ثانية عادةً.

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

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

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

نحن نراقب حمل وحدة المعالجة المركزية على مدار الساعة طوال أيام الأسبوع ونتحقق بشكل دوري من عدد الاتصالات بـ Apache و MariaDB والتي تظل منخفضة نسبيًا على مدار اليوم. عادةً ما يكون هناك حوالي 3 جيجابايت من الذاكرة الخالية باستثناء المخازن المؤقتة وذاكرة التخزين المؤقت.

يحرر

بشكل محرج ، اكتشفت أن الاستعلامات البطيئة المعنية لم تكن في الواقع تستخدم الفهارس وكانت تقوم بمسح كامل للجدول. يمكن أن يستغرق الاستعلام الأولي عدة ثوانٍ ، ثم بالنسبة لبقية اليوم ، يستغرق فحص الجدول الكامل أقل من ثانية. أفترض أن هذا نوع من ذاكرة التخزين المؤقت على القرص الذي يصبح باردًا بين عشية وضحاها.

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

answer

يبدو أنك استبعدت تفريغ ليلي وبعض الإجراءات البطيئة؟

المزيد من اقتراحات التصحيح:

قم بخفض الإعداد العام لـ long_query_timeوحافظ على تشغيل بطء ؛ قد تمسك بالشرير.

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

تحقق SHOW GLOBAL STATUS LIKE "Uptime"مما إذا كان ذلك أقل من 86400 ، فهذا يعني أن MariaDB قد تمت إعادة تشغيله منذ أقل من 24 ساعة. في هذه الحالة ، يجب أن تكون قادرًا على تحديد الوقت بالثانية تقريبًا. (لكن لم تحدد السبب).

أظهر لنا الاستعلام ، بالإضافة إلى ذلك SHOW CREATE TABLE، EXPLAIN...وقد نتمكن من مساعدتك في تسريع ذلك (على سبيل المثال ، من خلال فهرس أفضل أو إعادة صياغة الاستعلام) ، وبالتالي التخلص من المشكلة (على الرغم من عدم حل السبب).