PmaControl logo PmaControl
  • مرحباً
  • PmaControl
    • وكلاء الذكاء الاصطناعي 13 وكلاء محليين
    • عروضنا المجتمع، السحابة، محليًا، المميز
    • التوثيق أدلة، API، الهندسة المعمارية
    • السوق المكونات الإضافية للمجتمع
    • عملاء أكثر من 28 شركة
    • الأسئلة الشائعة 25 سؤالا / 7 فئات
    قواعد البيانات
    • ماريا دي بي 31 مادة
    • ماي إس كيو إل 11 مادة
    • مجموعة جاليرا 6 عناصر
    • ماكس سكيل 3 عناصر
    • ProxySQL 2 عناصر
    • أمازون أورورا ماي إس كيو إل 0 العناصر
    • قاعدة بيانات أزور 0 العناصر
    • انقر البيت 0 العناصر
    • GCP CloudSQL 0 العناصر
    • بيركوناسيرفر 0 العناصر
    • متجر واحد 0 العناصر
    • تي دي بي 0 العناصر
    • سرعة 0 العناصر
    الحلول
    • دعم 24 × 7 حالات الطوارئ MariaDB وMySQL
    • Observabilité SQL المراقبة والتنبيهات والطوبولوجيا
    • Haute disponibilité النسخ المتماثل، تجاوز الفشل، جاليرا
    • Disaster Recovery النسخ الاحتياطي والاستعادة، RPO/RTO
    • Sécurité & conformité التدقيق، اللائحة العامة لحماية البيانات، SOC2
    • Migration & upgrade صفر توقف عن العمل، pt-osc، gh-ost
  • عروضنا
  • موارد
    • التوثيق الأدلة الفنية وواجهات برمجة التطبيقات
    • مركز تحسين MySQL مؤشر تخفيض السعر والمقاييس والإعدادات والحوادث
    • الأسئلة الشائعة 25 سؤالا متكررا
    • الشهادات ملاحظات العملاء وحالات الاستخدام
    • مدونة مقالات ورؤى
    • خريطة الطريق الميزات القادمة
    مجالات الخبرة
    • Observabilité SQL المراقبة والتنبيهات وطوبولوجيا Dot3
    • Haute disponibilité النسخ المتماثل، تجاوز الفشل، جاليرا
    • Sécurité & conformité التدقيق، اللائحة العامة لحماية البيانات، SOC2، ISO 27001
    • Disaster Recovery النسخ الاحتياطي والاستعادة، RPO/RTO
    • Performance & optimisation ملخصات، شرح، ضبط
    • Migration & upgrade صفر توقف عن العمل، pt-osc
    روابط سريعة
    • جيثب ويكي 26 صفحة - التثبيت والمحرك والمكونات الإضافية
    • كود المصدر مستودع جيثب الرسمي
    • دعم 24 × 7 حالات الطوارئ MariaDB وMySQL
    • احجز عرضًا توضيحيًا 30 دقيقة - هندسة معمارية حقيقية
  • دعم 24 × 7
  • احجز عرضًا توضيحيًا
احجز عرضًا توضيحيًا
🇫🇷 FR Français 🇬🇧 EN English 🇵🇱 PL Polski 🇷🇺 RU Русский 🇨🇳 ZH 中文 🇸🇦 AR العربية
← العودة إلى بلوق

التجربة MariaDB: ذاكرة التخزين المؤقت للاستعلام

تم النشر بتاريخ 30 يونيو 2025 بواسطة Sylvain ARBAUDIE
mariadb query-cache performance tuning
يشارك X LinkedIn Facebook Email PDF
التجربة MariaDB: ذاكرة التخزين المؤقت للاستعلام

مفهوم ذاكرة التخزين المؤقت للاستعلام

ذاكرة التخزين المؤقت للاستعلام MariaDB / MySQL هي آلية مضمنة في الخادم تقوم بتخزين نتيجة استعلامات SELECT في الذاكرة. عند إعادة إرسال استعلام مماثل، يقوم الخادم بإرجاع النتيجة المخزنة مؤقتًا مباشرة دون تنفيذ الاستعلام. إنها بسيطة وأنيقة ومن المحتمل أن تكون فعالة للغاية.

الكلمة الأساسية هنا هي "محتمل". تعد ذاكرة التخزين المؤقت للاستعلام واحدة من أكثر الميزات التي يتم إساءة فهمها وتكوينها بشكل خاطئ في MariaDB / MySQL. إذا تم استخدامه بشكل صحيح، فيمكن أن يقلل أوقات الاستجابة بمقدار 10 مرات. وإذا تم تكوينه بشكل خاطئ، فقد يؤدي إلى تدمير الأداء.

الأوضاع الثلاثة

يمكن أن تعمل ذاكرة التخزين المؤقت للاستعلام في ثلاثة أوضاع، يتم التحكم فيها بواسطة المتغير query_cache_type:

إيقاف (0)

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

تشغيل (1)

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

-- Cette requête sera mise en cache
SELECT * FROM products WHERE category_id = 5;

-- Cette requête ne sera PAS mise en cache
SELECT SQL_NO_CACHE * FROM products WHERE category_id = 5;

نحن نسأل (2)

لا يتم تخزين أية استعلامات مؤقتًا بشكل افتراضي. يتم تخزين الطلبات التي تم وضع علامة صراحة عليها بـ SQL_CACHE فقط في ذاكرة التخزين المؤقت. هذا هو الوضع الأكثر تحكمًا والأكثر فعالية في كثير من الأحيان.

-- Cette requête ne sera PAS mise en cache (mode par défaut)
SELECT * FROM products WHERE category_id = 5;

-- Cette requête SERA mise en cache
SELECT SQL_CACHE * FROM products WHERE category_id = 5;

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

البطلان: كعب أخيل

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

-- Suppose que 1000 SELECT sur la table 'products' sont en cache
UPDATE products SET price = 19.99 WHERE product_id = 42;
-- → Les 1000 entrées de cache pour 'products' sont invalidées

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

حجم ذاكرة التخزين المؤقت

يتم التحكم في حجم ذاكرة التخزين المؤقت للاستعلام بواسطة query_cache_size:

[mysqld]
query_cache_type = 2
query_cache_size = 64M
query_cache_limit = 2M
query_cache_min_res_unit = 2048
  • query_cache_size: إجمالي حجم ذاكرة التخزين المؤقت. لا تتجاوز 256 ميجابايت — وبعد ذلك، يصبح كائن المزامنة لذاكرة التخزين المؤقت العالمية بمثابة عنق الزجاجة.
  • query_cache_limit: الحد الأقصى لحجم النتيجة الفردية. لا يتم تخزين النتائج الأكبر حجمًا مؤقتًا.
  • query_cache_min_res_unit: حجم كتلة التخصيص. يؤدي تقليل هذه القيمة للحصول على نتائج صغيرة إلى تقليل التجزئة.

مراقبة ذاكرة التخزين المؤقت

تعد متغيرات الحالة Qcache_* ضرورية لتقييم الفعالية:

SHOW GLOBAL STATUS LIKE 'Qcache%';

المقاييس الرئيسية:

يختلف الوصف
Qcache_hits عدد الطلبات المقدمة من ذاكرة التخزين المؤقت
Qcache_inserts عدد الاستعلامات المضافة إلى ذاكرة التخزين المؤقت
Qcache_not_cached الاستعلامات غير المخفية (كبيرة جدًا، تلميحات، إلخ.)
Qcache_lowmem_prunes عمليات الإخلاء بسبب نقص الذاكرة
Qcache_free_memory الذاكرة الحرة في ذاكرة التخزين المؤقت
Qcache_total_blocks إجمالي عدد الكتل المخصصة
Qcache_free_blocks كتل مجانية (تجزئة إذا كانت عالية)

نسبة الكفاءة

النسبة الأكثر أهمية هي نسبة الإصابة:

Hit ratio = Qcache_hits / (Qcache_hits + Com_select) × 100

التفسير:

  • > 40%: ذاكرة التخزين المؤقت فعالة، وتستحق التمكين
  • 20-40%: منطقة رمادية، يتم تقييمها على أساس كل حالة على حدة
  • < 20%: ذاكرة التخزين المؤقت غير فعالة، فكر في إلغاء تنشيطها

النسبة المهمة الثانية هي نسبة الإخلاء:

Eviction ratio = Qcache_lowmem_prunes / Qcache_inserts × 100

إذا تجاوزت هذه النسبة 10%، فإن ذاكرة التخزين المؤقت صغيرة جدًا — قم بزيادة query_cache_size أو قلل ما قمت بتخزينه مؤقتًا.

فخ المنافسة

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

ولهذا السبب قام MySQL 8.0 بإزالة ذاكرة التخزين المؤقت للاستعلام. قدر فريق Oracle أن تكلفة كائن المزامنة (mutex) تتجاوز فوائد التخزين المؤقت في أحمال العمل الحديثة (التزامن العالي، والكتابة المتكررة).

اختار MariaDB الاحتفاظ به، مع الأخذ في الاعتبار أنه يظل مفيدًا لبعض حالات الاستخدام المحددة (أحمال القراءة، والتزامن المنخفض، ونادرًا ما يتم تعديل الجداول).

ذاكرة التخزين المؤقت للاستعلام وGalera: التركيبة الصعبة

يعد استخدام ذاكرة التخزين المؤقت للاستعلام في مجموعة Galera مشكلة. Galera ينسخ عمليات الكتابة إلى كافة العقد، لكن ذاكرة التخزين المؤقت للاستعلام تكون محلية لكل عقدة. النتيجة:

  1. تتلقى العقدة A التحديد وتخزن النتيجة مؤقتًا
  2. تتلقى العقدة B تحديثًا عبر النسخ المتماثل Galera
  3. لم يتم إبطال ذاكرة التخزين المؤقت للعقدة أ — فهي لا تعرف أن البيانات قد تغيرت
  4. يقوم التحديد التالي على العقدة A بإرجاع البيانات القديمة

الطريقة الآمنة الوحيدة لاستخدام ذاكرة التخزين المؤقت للاستعلام مع Galera هي باستخدام wsrep_causal_reads = ON، الذي يفرض التحقق من التناسق قبل كل قراءة. لكن هذا ينفي إلى حد كبير فائدة ذاكرة التخزين المؤقت.

البديل: مرشح ذاكرة التخزين المؤقت MaxScale

بالنسبة للبنيات التي تحتاج إلى ذاكرة تخزين مؤقت للاستعلام الموزع، يعد مرشح ذاكرة التخزين المؤقت MaxScale طريقة أفضل:

[query-cache]
type = filter
module = cache
storage = storage_inmemory
ttl = 10s
max_size = 256Mi

ذاكرة التخزين المؤقت MaxScale مركزية (على مستوى الوكيل)، مما يزيل مشكلة عدم الاتساق بين عقد Galera. بالإضافة إلى ذلك، يمكن لـ MaxScale إبطال ذاكرة التخزين المؤقت بذكاء بناءً على نوع الاستعلام، وليس فقط الجدول المعدل.

متى يتم تمكين ذاكرة التخزين المؤقت للاستعلام

تكون ذاكرة التخزين المؤقت للاستعلام ذات صلة عندما:

  • التحميل للقراءة بشكل أساسي (> 80% من التحديد)
  • الجداول نادرا ما يتم تعديلها (جداول التكوين، المستودعات)
  • التزامن معتدل (<50 اتصالاً متزامنًا)
  • تتكرر الطلبات نفسها بشكل متكرر (تطبيقات الويب التي تحتوي على ذاكرة تخزين مؤقت مفقودة)
  • أنت على خادم مستقل، وليس مجموعة Galera

لا تكون ذاكرة التخزين المؤقت للاستعلام ذات صلة عندما:

  • الحمل مختلط القراءة / الكتابة
  • الجداول يتم تعديلها بشكل متكرر (جداول المعاملات)
  • التزامن مرتفع (كائن المزامنة العالمي)
  • أنت في مجموعة Galera (عدم تناسق ذاكرة التخزين المؤقت)

الخلاصة

تعد ذاكرة التخزين المؤقت للاستعلام MariaDB أداة قوية ولكنها حساسة. يوفر الوضع ON DEMAND مع التلميح SQL_CACHE أفضل تحكم. تعد المراقبة عبر متغيرات Qcache_* ضرورية لتقييم الفعالية. وبالنسبة للبنى الموزعة، غالبًا ما يكون مرشح ذاكرة التخزين المؤقت MaxScale خيارًا أفضل.

مثل أي أداة للأداء، المفتاح هو القياس. تفعيل ومراقبة وضبط. إذا ظلت نسبة الإصابة أقل من 20%، فقم بتعطيلها والمضي قدمًا.


تم نشر هذه المقالة في الأصل على متوسط.

يشارك X LinkedIn Facebook Email PDF
← العودة إلى بلوق

تعليقات (0)

لا توجد تعليقات حتى الآن.

اترك تعليقا

PmaControl
+33 6 63 28 27 47 contact@pmacontrol.com
إشعارات قانونية GitHub اتصال
لا تنتظر وقوع الحادث حتى تفهم هندستك المعمارية. © 2014-2026 PmaControl — 68Koncept