تُعدّ ذاكرة التخزين المؤقت للصفحات في فضاء المستخدم آلية تخزين مؤقت جديدة تتيح تخزين
البيانات في الذاكرة داخل العملية بدلًا من الاعتماد على ذاكرة التخزين المؤقت لصفحات نظام التشغيل.
يوفّر ClickHouse بالفعل ذاكرة التخزين المؤقت لنظام الملفات
بوصفها وسيلة للتخزين المؤقت فوق تخزين الكائنات البعيد مثل Amazon S3 وGoogle
Cloud Storage (GCS) أو Azure Blob Storage. وقد صُمّمت ذاكرة التخزين المؤقت للصفحات في فضاء المستخدم
لتسريع الوصول إلى البيانات البعيدة عندما لا يكون التخزين المؤقت المعتاد في نظام التشغيل
كافيًا.
وتختلف عن ذاكرة التخزين المؤقت لنظام الملفات في الجوانب التالية:
| ذاكرة التخزين المؤقت لنظام الملفات | ذاكرة التخزين المؤقت للصفحات في فضاء المستخدم |
|---|
| تكتب البيانات إلى نظام الملفات المحلي | توجد في الذاكرة فقط |
| تستهلك مساحة على القرص (ويمكن أيضًا تهيئتها على tmpfs) | مستقلة عن نظام الملفات |
| تبقى بعد إعادة تشغيل الخادم | لا تبقى بعد إعادة تشغيل الخادم |
| لا تظهر في استخدام ذاكرة الخادم | تظهر في استخدام ذاكرة الخادم |
| مناسبة لكلٍ من التخزين على القرص وداخل الذاكرة (ذاكرة التخزين المؤقت لصفحات نظام التشغيل) | مناسبة للخوادم من دون أقراص |
إعدادات التهيئة والاستخدام
لتمكين ذاكرة التخزين المؤقت للصفحات في فضاء المستخدم، اضبطها أولًا على الخادم:
cat config.d/page_cache.yaml
page_cache_max_size: 100G
ستستخدم ذاكرة التخزين المؤقت للصفحات في فضاء المستخدم حتى المقدار المحدد من الذاكرة، لكن
هذا المقدار من الذاكرة ليس محجوزًا. وستُزال هذه الذاكرة المؤقتة عند الحاجة إليها
لتلبية احتياجات أخرى للخادم.
بعد ذلك، فعّل استخدامها على مستوى الاستعلام:
SET use_page_cache_for_disks_without_file_cache=1;
| Setting | Description | Default |
|---|
use_page_cache_for_disks_without_file_cache | استخدم ذاكرة التخزين المؤقت للصفحات في فضاء المستخدم للأقراص البعيدة التي لم تُفعَّل لها ذاكرة التخزين المؤقت لنظام الملفات. | 0 |
use_page_cache_with_distributed_cache | استخدم ذاكرة التخزين المؤقت للصفحات في فضاء المستخدم عند استخدام ذاكرة التخزين المؤقت الموزعة. | 0 |
read_from_page_cache_if_exists_otherwise_bypass_cache | استخدم ذاكرة التخزين المؤقت للصفحات في فضاء المستخدم في الوضع السلبي، على غرار read_from_filesystem_cache_if_exists_otherwise_bypass_cache. | 0 |
page_cache_inject_eviction | ستُبطِل ذاكرة التخزين المؤقت للصفحات في فضاء المستخدم أحيانًا بعض الصفحات عشوائيًا. وهذا مخصّص للاختبار. | 0 |
page_cache_block_size | حجم أجزاء الملف التي ستُخزَّن في ذاكرة التخزين المؤقت للصفحات في فضاء المستخدم، بالبايت. ستُقرَّب جميع عمليات القراءة التي تمر عبر ذاكرة التخزين المؤقت إلى أقرب مضاعف لهذا الحجم. | 1048576 |
page_cache_history_window_ms | مدة التأخير قبل أن تتمكن ذاكرة التخزين المؤقت للصفحات في فضاء المستخدم من استخدام الذاكرة المُحرَّرة. | 1000 |
page_cache_policy | اسم سياسة ذاكرة التخزين المؤقت للصفحات في فضاء المستخدم. | SLRU |
page_cache_size_ratio | حجم الطابور المحمي في ذاكرة التخزين المؤقت للصفحات في فضاء المستخدم نسبةً إلى الحجم الإجمالي لذاكرة التخزين المؤقت. | 0.5 |
page_cache_min_size | الحد الأدنى لحجم ذاكرة التخزين المؤقت للصفحات في فضاء المستخدم. | 104857600 |
page_cache_max_size | الحد الأقصى لحجم ذاكرة التخزين المؤقت للصفحات في فضاء المستخدم. اضبطه على 0 لتعطيل ذاكرة التخزين المؤقت. إذا كانت القيمة أكبر من page_cache_min_size، فسيُعدَّل حجم ذاكرة التخزين المؤقت باستمرار ضمن هذا النطاق لاستخدام معظم الذاكرة المتاحة مع إبقاء إجمالي استخدام الذاكرة دون الحد (max_server_memory_usage[_to_ram_ratio]). | 0 |
page_cache_free_memory_ratio | النسبة من حد الذاكرة التي يجب إبقاؤها خالية من ذاكرة التخزين المؤقت للصفحات في فضاء المستخدم. وهي مماثلة لإعداد Linux min_free_kbytes. | 0.15 |
page_cache_lookahead_blocks | عند تعذّر العثور على البيانات في ذاكرة التخزين المؤقت للصفحات في فضاء المستخدم، اقرأ حتى هذا العدد من الكتل المتتالية دفعةً واحدة من التخزين الأساسي، إذا لم تكن موجودة أيضًا في ذاكرة التخزين المؤقت. حجم كل كتلة هو page_cache_block_size بايت. | 16 |
page_cache_shards | قسِّم ذاكرة التخزين المؤقت للصفحات في فضاء المستخدم إلى هذا العدد من الأجزاء لتقليل التنازع على mutex. هذه ميزة تجريبية، ومن غير المرجّح أن تحسّن الأداء. | 4 |