لا تعمل ذاكرة التخزين المؤقت لشروط الاستعلام إلا عندما تكون enable_analyzer مضبوطة على true، وهي القيمة الافتراضية.
WHERE col = 'xyz') على البيانات نفسها سيُرجع دائمًا النتائج نفسها.
وبشكل أكثر تحديدًا، تتذكر ذاكرة التخزين المؤقت لشروط الاستعلام، لكل عامل تصفية جرى تقييمه ولكل granule (= كتلة من 8192 صفًا افتراضيًا)، ما إذا كان لا يوجد أي صف في هذه الكتلة يطابق شرط التصفية.
وتُسجَّل هذه المعلومة على شكل بت واحد: إذ تمثل القيمة 0 عدم وجود أي صف يطابق عامل التصفية، بينما تعني القيمة 1 وجود صف مطابق واحد على الأقل.
في الحالة الأولى، يمكن لـ ClickHouse تخطي الـ granule المقابل أثناء تقييم عامل التصفية، أما في الحالة الثانية فيجب تحميل الـ granule وتقييمه.
تكون ذاكرة التخزين المؤقت لشروط الاستعلام فعّالة إذا استوفت ثلاثة متطلبات مسبقة:
- أولاً، يجب أن يقيّم عبء العمل شروط التصفية نفسها بشكل متكرر. يحدث هذا طبيعيًا إذا تكرر الاستعلام عدة مرات، لكنه قد يحدث أيضًا إذا اشترك استعلامان في عوامل التصفية نفسها، مثل
SELECT product FROM products WHERE quality > 3وSELECT vendor, count() FROM products WHERE quality > 3. - ثانيًا، يجب أن تكون غالبية البيانات غير قابلة للتغيير، أي إنها لا تتغير بين الاستعلامات. وهذا هو الحال عمومًا في ClickHouse لأن الأجزاء غير قابلة للتغيير ولا تُنشأ إلا بواسطة عمليات INSERT.
- ثالثًا، يجب أن تكون عوامل التصفية انتقائية، أي إن عددًا قليلاً نسبيًا فقط من الصفوف يطابق شرط التصفية. وكلما قلّ عدد الصفوف المطابقة لشرط التصفية، سُجِّل عدد أكبر من وحدات granule بالقيمة 0 (من دون صفوف مطابقة)، وأمكن “استبعاد” مزيد من البيانات من تقييمات التصفية اللاحقة.
استهلاك الذاكرة
query_condition_cache_size (الافتراضي: 100 MB).
يعادل حجم ذاكرة تخزين مؤقت قدره 100 MB عدد 100 * 1024 * 1024 * 8 = 838,860,800 إدخال.
وبما أن كل إدخال يمثّل mark واحدة (8192 صفًا افتراضيًا)، يمكن لذاكرة التخزين المؤقت أن تغطي ما يصل إلى 6,871,947,673,600 (6.8 تريليون) صف من عمود واحد.
عمليًا، تُقيَّم المرشحات على أكثر من عمود واحد، لذلك يجب قسمة هذا العدد على عدد الأعمدة المُرشَّحة.
إعدادات التهيئة والاستخدام
use_query_condition_cache = true أيضًا، ستُستخدَم ذاكرة التخزين المؤقت لشروط الاستعلام لفحص بيانات أقل.
الإدارة
SYSTEM CLEAR QUERY CONDITION CACHE.
يُعرض محتوى ذاكرة التخزين المؤقت في جدول النظام system.query_condition_cache.
ولحساب الحجم الحالي لذاكرة التخزين المؤقت لشروط الاستعلام بالميغابايت، شغّل SELECT formatReadableSize(sum(entry_size)) FROM system.query_condition_cache.
إذا كنت ترغب في فحص شروط التصفية الفردية، يمكنك التحقق من الحقل condition في system.query_condition_cache. لاحظ أن هذا الحقل متاح فقط في إصدارات Debug.
يُعرض عدد مرات الإصابة والإخفاق لذاكرة التخزين المؤقت لشروط الاستعلام منذ بدء تشغيل قاعدة البيانات كحدثين “QueryConditionCacheHits” و”QueryConditionCacheMisses” في جدول النظام system.events.
ولا يُحدَّث هذان العدادان إلا لاستعلامات SELECT التي تعمل مع الإعداد use_query_condition_cache = true، أما الاستعلامات الأخرى فلا تؤثر في “QueryCacheMisses”.