المقدمة
يمكن للتنبيهات أيضًا الاستفادة من العروض المادية، وستستخدمها تلقائيًا.
وقد يقلّل ذلك العبء الحوسبي الناتج عن تشغيل عدد كبير من التنبيهات، لا سيما أنها تعمل عادةً بوتيرة متكررة جدًا.
ويمكن أن يكون تقليل زمن التنفيذ مفيدًا من حيث كلٍّ من سرعة الاستجابة واستهلاك الموارد.
ما هي العروض المادية التزايدية
SELECT بشكل ملحوظ.
على عكس قواعد البيانات المعاملاتية مثل Postgres، لا يكون العرض المادي في ClickHouse لقطة محفوظة. بل يعمل كمُشغِّل ينفّذ استعلامًا على كتل البيانات عند إدراجها في جدول المصدر. ويُكتَب ناتج هذا الاستعلام في جدول هدف منفصل. ومع إدراج المزيد من البيانات، تُلحَق نتائج جزئية جديدة وتُدمَج في الجدول الهدف. وتكون النتيجة المدمجة مكافئة لتنفيذ التجميع على مجموعة البيانات الأصلية بالكامل.
يكمن الدافع الرئيسي لاستخدام العروض المادية في أن البيانات المكتوبة إلى الجدول الهدف تمثل ناتج عملية تجميع أو تصفية أو تحويل. وفي ClickStack، تُستخدم هذه العروض حصريًا لعمليات التجميع. وتكون هذه النتائج عادةً أصغر بكثير من بيانات الإدخال الخام، وغالبًا ما تمثل حالات تجميع جزئية. وإلى جانب سهولة الاستعلام عن الجدول الهدف المجمّع مسبقًا، يؤدي ذلك إلى خفض كبير في زمن استجابة الاستعلام مقارنةً بتنفيذ المعالجة نفسها على البيانات الخام وقت الاستعلام.
تُحدَّث العروض المادية في ClickHouse باستمرار مع تدفّق البيانات إلى جدول المصدر، لذا فهي أقرب في سلوكها إلى الفهارس المحدَّثة دائمًا. ويختلف هذا عن كثير من قواعد البيانات الأخرى، حيث تكون العروض المادية لقطات ثابتة يجب تحديثها دوريًا، على نحو مشابه لـ العروض المادية القابلة للتحديث في ClickHouse.
لا تحسب العروض المادية التزايدية سوى التغييرات التي تطرأ على العرض عند وصول بيانات جديدة، مما ينقل المعالجة إلى وقت الإدراج. ونظرًا إلى أن ClickHouse مُحسَّن بدرجة كبيرة لعمليات الاستيعاب، فإن التكلفة التزايدية للحفاظ على العرض لكل كتلة مُدرَجة تظل صغيرة مقارنةً بالوفورات المتحققة أثناء تنفيذ الاستعلام. وتُوزَّع تكلفة حساب التجميع على عمليات الإدراج بدلًا من تكبّدها مرارًا عند كل قراءة. لذلك، فإن الاستعلام عن النتائج المجمّعة مسبقًا أقل كلفةً بكثير من إعادة حسابها، مما يخفّض التكلفة التشغيلية ويوفر أداءً شبه لحظي للتصورات اللاحقة، حتى على مستوى البيتابايت.
يختلف هذا النموذج جذريًا عن الأنظمة التي تعيد حساب العروض كاملةً عند كل تحديث أو تعتمد على تحديثات مجدولة. ولمزيد من التعمق في كيفية عمل العروض المادية وكيفية إنشائها، راجع الدليل المشار إليه أعلاه.
يضيف كل عرض مادي حملًا إضافيًا وقت الإدراج، لذا ينبغي استخدامه بصورة انتقائية.
يمكن لعرض مادي واحد حساب عدة مقاييس لتجميعات مختلفة، مثل الحد الأدنى والحد الأقصى ومدة p95 لكل اسم خدمة ضمن نوافذ زمنية مدتها دقيقة واحدة. وهذا يتيح لعرض واحد خدمة العديد من التصورات بدلًا من تصور واحد فقط. لذلك، فإن توحيد المقاييس في عروض مشتركة مهم لتحقيق أقصى استفادة من كل عرض وضمان إعادة استخدامه عبر لوحات المعلومات وسير العمل.
اختيار المرئيات المراد تسريعها
تحديد المرئيات عالية التأثير
- مرئيات لوحة المعلومات التي تتحدّث باستمرار وتظل معروضة بشكل دائم، مثل لوحات معلومات Monitoring عالية المستوى المعروضة على شاشات الحائط.
- سير العمل التشخيصي المستخدم في أدلة التشغيل، حيث يُرجع مرارًا إلى مخططات معيّنة أثناء الاستجابة للحوادث، وتحتاج إلى عرض النتائج بسرعة.
- التجارب الأساسية في HyperDX، بما في ذلك:
- عروض المدرج التكراري في صفحة Search.
- المرئيات المستخدمة في لوحات المعلومات المُعدّة مسبقًا، مثل عروض APM أو Services أو Kubernetes.
وازن بين الفائدة والتكلفة عند الإدراج
قبل الانتقال إلى بيئة الإنتاج، احرص دائمًا على التحقق من عبء الموارد الإضافي الذي تسببه العروض المُجسَّدة، وخصوصًا استخدام CPU وعمليات I/O على القرص ونشاط الدمج. يزيد كل عرض مُجسَّد من العمل عند الإدراج ويسهم في إضافة المزيد من الأجزاء، لذا من المهم التأكد من أن عمليات الدمج قادرة على مواكبة ذلك وأن يظل عدد الأجزاء مستقرًا. يمكن مراقبة ذلك عبر جداول النظام ولوحة معلومات observability المتقدمة المضمّنة في ClickHouse مفتوح المصدر، أو باستخدام المقاييس المضمّنة ولوحات معلومات المراقبة في ClickHouse Cloud. راجع Too many parts للحصول على إرشادات حول تشخيص الزيادة المفرطة في عدد الأجزاء والحد منها.
toStartOfMinute. ومع ذلك، تشترك كثير من المرئيات أيضًا في مفاتيح تجميع إضافية مثل اسم الخدمة أو اسم span أو رمز الحالة. وعندما تستخدم عدة مرئيات أبعاد التجميع نفسها، يمكن في كثير من الأحيان خدمتها من خلال عرض مادي واحد.
على سبيل المثال (بالنسبة إلى التتبعات):
- متوسط المدة حسب اسم الخدمة عبر الزمن -
SELECT avg(Duration), toStartOfMinute(Timestamp) as time, ServiceName FROM otel_traces GROUP BY ServiceName, time - عدد الطلبات حسب اسم الخدمة عبر الزمن -
SELECT count() count, toStartOfMinute(Timestamp) as time, ServiceName FROM otel_traces GROUP BY ServiceName, time - متوسط المدة حسب رمز الحالة عبر الزمن -
SELECT avg(Duration), toStartOfMinute(Timestamp) as time, StatusCode FROM otel_traces GROUP BY StatusCode, time - عدد الطلبات حسب رمز الحالة عبر الزمن -
SELECT count() count, toStartOfMinute(Timestamp) as time, StatusCode FROM otel_traces GROUP BY StatusCode, time
إنشاء عرض مادي
في الحالات التي لا تتوفر فيها لوحة تصحيح داخل HyperDX لأحد المكوّنات، يمكن للمستخدمين فحص وحدة تحكم المتصفح، حيث تُسجَّل جميع الاستعلامات.
AggregatingMergeTree -:
يمكنك الاطلاع على مثال يوضح كيفية استخدام AggregatingMergeTree والدوال المجمِّعة في الفيديو أدناه:
مثال على عرض مادي
otel_traces_1m، الذي يخزّن حالات التجميع المرتبطة به:
otel_traces_1m_mv - بحساب هذه الحالات وكتابتها كلما أُدرجت بيانات جديدة:
- الجدول الهدف، الذي يحدّد المخطط وأنواع حالات التجميع المستخدمة لتخزين النتائج الوسيطة. ويُلزم استخدام المحرك AggregatingMergeTree لضمان دمج هذه الحالات بشكل صحيح في الخلفية.
- يُنفَّذ استعلام العرض المادي تلقائيًا عند الإدراج. وبالمقارنة مع الاستعلام الأصلي، فإنه يستخدم دوال الحالة مثل
avgStateوquantilesStateبدلًا من دوال التجميع النهائية.
استخدام العروض المادية في ClickStack
تسجيل عرض مادي للاستخدام
حرّر المصدر
انتقل إلى المصدر المعني في HyperDX وافتح مربع الحوار تحرير الإعدادات. مرّر إلى قسم العروض المادية.أضف العرض المادي
حدّد إضافة عرض مادي، ثم اختر قاعدة البيانات والجدول الهدف اللذين يستندان إليه العرض المادي.حدّد المقاييس
في معظم الحالات، سيُستدل تلقائيًا على أعمدة الطابع الزمني والبُعد والمقياس. وإذا لم يحدث ذلك، فحدّدها يدويًا.بالنسبة إلى المقاييس، يجب عليك ربط:- اسم العمود الأصلي، على سبيل المثال
Duration، بـ - عمود التجميع المقابل في العرض المادي، على سبيل المثال
avg__Duration
حدّد درجة الدقة الزمنية
حدّد درجة الدقة الزمنية للعرض المادي، على سبيل المثال دقيقة واحدة.حدّد الحد الأدنى للتاريخ
حدّد الحد الأدنى للتاريخ الذي تتوفر له بيانات في العرض المادي. ويمثّل ذلك أقدم طابع زمني متاح في العرض، ويكون عادةً وقت إنشاء العرض، بافتراض أن الاستيعاب كان مستمرًا.العروض المادية لا تُملأ تلقائيًا ببيانات تاريخية عند إنشائها، لذا لن تحتوي إلا على الصفوف الناتجة عن البيانات المُدرجة بعد الإنشاء.
يمكن العثور على دليل كامل حول التعبئة بالبيانات التاريخية للعروض المادية ضمن “التعبئة بالبيانات التاريخية.”
احفظ المصدر
احفظ إعدادات المصدر.التحقق من التسريع في لوحات المعلومات والمرئيات
لن يستخدم ClickStack العرض المادي إلا إذا كان الحد الأدنى للطابع الزمني فيه أقل من أو يساوي بداية النطاق الزمني للاستعلام، بما يضمن أن العرض يحتوي على كل البيانات المطلوبة. ومع أن الاستعلامات تُقسَّم داخليًا إلى استعلامات فرعية قائمة على الوقت، فإن العروض المادية تُطبَّق إما على الاستعلام بالكامل أو لا تُطبَّق مطلقًا. وقد تتيح تحسينات مستقبلية استخدام العروض بصورة انتقائية مع الاستعلامات الفرعية المؤهلة.
- تحقّق من حالة التحسين عند عرض لوحة معلومات أو مرئية، ابحث عن أيقونة الصاعقة أو
Accelerated:
- تشير أيقونة الصاعقة الخضراء إلى أن الاستعلام مُسرَّع بواسطة عرض مادي.
- تشير أيقونة الصاعقة البرتقالية إلى أن الاستعلام يُنفَّذ على الجدول المصدر.
- افحص تفاصيل التحسين انقر على أيقونة الصاعقة لفتح لوحة تفاصيل تعرض ما يلي:
- العرض المادي النشط: العرض المحدد للاستعلام، بما في ذلك العدد التقديري للصفوف.
- العروض المادية التي تم تخطيها: العروض المتوافقة التي لم يتم اختيارها، إلى جانب الأحجام التقديرية للمسح.
- العروض المادية غير المتوافقة: العروض التي تعذّر استخدامها والسبب المحدد لذلك.
- افهم الأسباب الشائعة لعدم التوافق قد لا يتم استخدام العرض المادي إذا:
- كانت الفترة الزمنية للاستعلام تبدأ قبل الحد الأدنى للطابع الزمني الخاص بالعرض.
- لم تكن دقة المرئية من مضاعفات دقة العرض.
- لم تكن دالة التجميع المطلوبة في الاستعلام موجودة في العرض.
- كان الاستعلام يستخدم تعبيرات count مخصصة، مثل
count(if(...))، ولا يمكن اشتقاقها من حالات التجميع الخاصة بالعرض.
كيفية اختيار العروض المادية للمرئيات
EXPLAIN ESTIMATE.
تتبع عملية الاختيار تسلسلاً محددًا بوضوح:
-
التحقق من التوافق
يحدد ClickStack أولاً ما إذا كان العرض المادي مناسبًا للاستعلام من خلال التحقق مما يلي:
- التغطية الزمنية: يجب أن يقع النطاق الزمني للاستعلام بالكامل ضمن نطاق البيانات المتاح في العرض المادي.
- درجة الدقة: يجب أن تكون حاوية الوقت في المرئية مساوية لدرجة دقة العرض أو أقل تفصيلاً منها.
- التجميعات: يجب أن تكون المقاييس المطلوبة موجودة في العرض وقابلة للاحتساب من حالات التجميع الخاصة به.
-
تحويل الاستعلام
بالنسبة إلى العروض المتوافقة، يعيد ClickStack كتابة الاستعلام بحيث يستهدف جدول العرض المادي:
- تُطابَق دوال التجميع مع الأعمدة المادية المقابلة.
- تُطبَّق الموحِّدات
-Mergeعلى حالات التجميع. - يُضبط تقسيم الوقت إلى حاويات ليتوافق مع درجة دقة العرض.
-
اختيار أفضل خيار مرشح
إذا توفرت عدة عروض مادية متوافقة، يُشغّل ClickStack استعلام
EXPLAIN ESTIMATEلكل خيار مرشح، ثم يقارن العدد التقديري للصفوف والحبيبات التي سيجري فحصها. ويُختار العرض ذو أقل تكلفة فحص تقديرية. - الرجوع الاحتياطي السلس إذا لم يكن أي عرض مادي متوافقًا، يعود ClickStack تلقائيًا إلى الاستعلام عن الجدول المصدر.
مثال على اختيار العروض المادية
otel_traces_1m، مُجمَّع حسب الدقيقة وServiceNameوStatusCodeotel_traces_1m_v2، مُجمَّع حسب الدقيقة وServiceNameوStatusCodeوSpanName
EXPLAIN ESTIMATE لكل مرشّح ويقارن أعداد granule التقديرية، أي:
otel_traces_1m أصغر ويفحص عددًا أقل من الحبيبات، يُختار تلقائيًا.
لا يزال كلا العرضين الماديين يتفوّق على الاستعلام عن الجدول الأساسي مباشرةً، لكن اختيار أصغر عرض يفي بالغرض يحقق أفضل أداء.
التنبيهات
تعبئة عرض مادي بالبيانات التاريخية
أساليب التعبئة التاريخية
تجنّب POPULATEلا يُنصح باستخدام الأمر POPULATE للتعبئة التاريخية للعروض المادية إلا مع مجموعات البيانات الصغيرة التي يكون فيها الإدخال متوقفًا مؤقتًا. فقد يفوّت هذا الإجراء بعض الصفوف المُدرجة في الجدول المصدر، إذا أُنشئ العرض المادي بعد اكتمال عملية populate. بالإضافة إلى ذلك، يعمل هذا الخيار على جميع البيانات، ويكون عرضةً للانقطاعات أو لقيود الذاكرة عند التعامل مع مجموعات بيانات كبيرة.
التحميل بأثر رجعي مباشرةً باستخدام INSERT INTO SELECT
حدّد نطاق التغطية الحالي للعرض
قبل محاولة أي تحميل بأثر رجعي، حدّد أولًا البيانات التي يحتوي عليها العرض المادي بالفعل. ويتم ذلك عبر الاستعلام عن الحد الأدنى للطابع الزمني الموجود في الجدول الهدف:قرّر ما إذا كان التحميل بأثر رجعي ضروريًا
في معظم عمليات نشر ClickStack، تركّز الاستعلامات على البيانات الحديثة، مثل آخر 24 ساعة. في هذه الحالات، تصبح العروض المُنشأة حديثًا قابلة للاستخدام بالكامل بعد وقت قصير من إنشائها، ولا تكون هناك حاجة إلى التحميل بأثر رجعي.إذا كان الطابع الزمني الذي أُعيد في الخطوة السابقة قديمًا بما يكفي لحالات الاستخدام لديك، فلا حاجة إلى تحميل بأثر رجعي. ولا ينبغي النظر في التحميل بأثر رجعي إلا عندما:- تمتد الاستعلامات كثيرًا عبر نطاقات تاريخية طويلة.
- يكون العرض بالغ الأهمية للأداء عبر تلك النطاقات.
- يكون حجم مجموعة البيانات وكلفة التجميع مما يجعل التحميل بأثر رجعي ممكنًا عمليًا.
حمّل البيانات التاريخية المفقودة بأثر رجعي
إذا كان التحميل بأثر رجعي مطلوبًا، فاملأ الجدول الهدف للعرض المادي للطوابع الزمنية الأقدم من الحد الأدنى الحالي، باستخدام استعلام العرض بعد تعديله بحيث لا يقرأ إلا البيانات الأقدم من الطابع الزمني المسجّل أعلاه. ولأن الجدول الهدف يستخدم AggregatingMergeTree، فإن استعلام التحميل بأثر رجعي يجب أن يُدرج حالات التجميع، لا القيم النهائية.لاحظ كيف يضيف الاستعلام التالي عبارةWHERE لقصر التجميع على البيانات الأقدم من أقدم طابع زمني موجود في العرض:التحميل بأثر رجعي التدريجي للبيانات التاريخية باستخدام جدول Null
INSERT INTO SELECT واحدة غير عملي أو غير آمن. في هذه الحالات، يُنصح باتباع أسلوب التحميل بأثر رجعي التدريجي. تحاكي هذه الطريقة بشكل أوثق آلية عمل العروض المادية التدريجية عادةً، إذ تُعالَج البيانات على شكل كتل يمكن التحكم فيها بدلًا من تجميع كامل البيانات التاريخية دفعة واحدة.
يكون هذا الأسلوب مناسبًا في الحالات التالية:
- إذا كان استعلام التحميل بأثر رجعي سيستغرق ساعات طويلة للتنفيذ.
- إذا كانت ذروة استخدام الذاكرة عند تنفيذ تجميع كامل مرتفعة جدًا.
- إذا كنت تريد التحكم بدقة في استهلاك CPU والذاكرة أثناء التحميل بأثر رجعي.
- إذا كنت بحاجة إلى عملية أكثر تحمّلًا يمكن إعادة تشغيلها بأمان عند انقطاعها.
إنشاء جدول Null للتحميل بأثر رجعي
أنشئ جدول Null خفيفًا يحتوي فقط على الأعمدة المطلوبة لتجميع العرض المادي. وهذا يقلّل من استخدام عمليات الإدخال/الإخراج والذاكرة.إرفاق عرض مادي بجدول Null
بعد ذلك، أنشئ عرضًا ماديًا على جدول Null يستهدف جدول التجميع نفسه الذي يستخدمه العرض المادي الأساسي لديك.تحميل البيانات التاريخية تدريجيًا
أخيرًا، أدرِج البيانات التاريخية في جدول Null. سيعالج العرض المادي البيانات كتلةً تلو الأخرى، ويُنتج حالات التجميع في الجدول الهدف من دون تخزين الصفوف الخام.لمزيد من الأمان، فكّر في توجيه العرض المادي الخاص بالتحميل بأثر رجعي إلى جدول هدف مؤقت (على سبيل المثال،
otel_traces_1m_v2). وبعد اكتمال التحميل بأثر رجعي بنجاح، يمكن نقل الأقسام إلى الجدول الهدف الأساسي، مثل ALTER TABLE otel_traces_1m_v2 MOVE PARTITION '2026-01-02' TO otel_traces_1m. يسهّل ذلك الاسترداد إذا انقطع التحميل بأثر رجعي أو فشل بسبب حدود الموارد.التوصيات
اختيار مستوى التحبّب والمواءمة
- المخططات الزمنية (المخططات الخطية أو الشريطية التي يكون فيها الوقت على المحور السيني): يجب أن يكون مستوى التحبّب المحدد صراحةً للمخطط مضاعفًا لمستوى تحبّب العرض المادي. على سبيل المثال، يمكن لمخطط مدته 10 دقائق استخدام عروض مادية بمستوى تحبّب 10 دقائق أو 5 دقائق أو دقيقتين أو دقيقة واحدة، ولكن ليس عروضًا بمستوى تحبّب 20 دقيقة أو 3 دقائق.
-
المخططات غير الزمنية (مخططات الرقم أو الجدول أو الملخص):
يُشتق مستوى التحبّب الفعلي على النحو التالي:
(time range / 80)، مع التقريب للأعلى إلى أقرب مستوى تحبّب يدعمه HyperDX. ويجب أيضًا أن يكون مستوى التحبّب المشتق هذا مضاعفًا لمستوى تحبّب العرض المادي.
- لا تنشئ عروضًا مادية بمستوى تحبّب 10 دقائق. يدعم ClickStack مستوى تحبّب 15 دقيقة للمخططات والتنبيهات، لكنه لا يدعم 10 دقائق. لذلك سيكون العرض المادي ذو مستوى التحبّب 10 دقائق غير متوافق مع المرئيات والتنبيهات الشائعة ذات 15 دقيقة.
- فضّل مستويات التحبّب دقيقة واحدة أو ساعة واحدة، لأنها تتوافق بسلاسة مع معظم إعدادات المخططات والتنبيهات.
الحد من العروض المادية ودمجها
- ألا يتجاوز العدد 20 عرضًا ماديًا لكل مصدر.
- يكون نحو 10 عروض مادية عادةً هو العدد الأمثل.
- ادمج عدة تصورات في عرض واحد عندما تشترك في الأبعاد نفسها.
اختر الأبعاد بعناية
- كل عمود تجميع إضافي يزيد من حجم العرض.
- وازن بين مرونة الاستعلام وتكلفة التخزين وتكلفة وقت الإدراج.
- ستؤدي عوامل التصفية على الأعمدة غير الموجودة في العرض إلى تراجع ClickStack تلقائيًا إلى الجدول المصدر.
نصيحةمن خطوط الأساس الشائعة والمفيدة في معظم الحالات عرض مادي مُجمَّع حسب اسم الخدمة مع مقياس count، ما يتيح مدرجات تكرارية سريعة وعروضًا عامة على مستوى الخدمة في Search ولوحات المعلومات.
اصطلاحات تسمية أعمدة التجميع
- النمط:
<aggFn>__<sourceColumn> - أمثلة:
avg__Durationmax__Durationcount__لعدّ الصفوف
الكوانتايلات واختيار الـ sketch
- تنتج
quantilessketches أكبر على القرص، لكنها أقل كلفةً حسابيًا وقت الإدراج. - تكون
quantileTDigestأعلى كلفةً حسابيًا وقت الإدراج، لكنها تنتج sketches أصغر، ما يؤدي غالبًا إلى استعلامات أسرع على الـ view.
quantile(0.5) وقت الإدراج لكلتا الدالتين. وسيظل بإمكانك لاحقًا الاستعلام عن الـ sketch الناتج لقيم كوانتايل أخرى، مثل quantile(0.95). نوصي بالتجربة للعثور على أفضل توازن يناسب عبء العمل لديك.
تحقّق من الفعالية باستمرار
- تأكّد من استخدامها عبر مؤشرات التسريع في واجهة المستخدم.
- قارِن أداء الاستعلامات قبل تفعيل العرض وبعده.
- راقب استخدام الموارد وسلوك الدمج.
الإعدادات المتقدمة
- بيانات حديثة عالية الدقة مع عروض تاريخية أقل دقة
- عروض على مستوى الخدمة لتقديم نظرة عامة، وعروض على مستوى نقطة النهاية لإجراء تشخيصات معمقة
القيود
أسباب شائعة لعدم التوافق
- النطاق الزمني للاستعلام إذا كانت بداية النطاق الزمني للاستعلام تسبق الحد الأدنى للطابع الزمني في العرض المادي. ونظرًا إلى أن العروض لا تُملأ بالبيانات التاريخية تلقائيًا، فلا يمكنها خدمة الاستعلامات إلا ضمن النطاقات الزمنية التي تغطيها بالكامل.
-
عدم تطابق مستوى التحبّب
يجب أن يكون مستوى التحبّب الفعّال في التصور مضاعفًا صحيحًا تمامًا لمستوى تحبّب العرض المادي. وبالتحديد:
- بالنسبة إلى المخططات الزمنية (المخططات الخطية أو الشريطية التي يكون فيها الوقت على المحور x)، يجب أن يكون مستوى التحبّب المحدد للمخطط مضاعفًا لمستوى تحبّب العرض. على سبيل المثال، يمكن لمخطط مدته 10 دقائق استخدام عروض مادية بدقة 10 دقائق أو 5 دقائق أو دقيقتين أو دقيقة واحدة، لكن لا يمكنه استخدام عروض بدقة 20 دقيقة أو 3 دقائق.
- بالنسبة إلى المخططات غير الزمنية (المخططات الرقمية أو الجدولية)، يُحسَب مستوى التحبّب الفعّال على أنه
(time range / 80)، مع التقريب للأعلى إلى أقرب مستوى تحبّب يدعمه HyperDX، ويجب أيضًا أن يكون مضاعفًا لمستوى تحبّب العرض.
- دوال تجميع غير مدعومة يطلب الاستعلام تجميعًا غير موجود في العرض المادي. ولا يمكن استخدام سوى التجميعات التي حُسِبت وخُزِّنت صراحةً في العرض.
-
تعبيرات count مخصّصة
لا يمكن اشتقاق الاستعلامات التي تستخدم تعبيرات مثل
count(if(...))أو غيرها من عمليات العدّ الشرطي من حالات التجميع القياسية، ولذلك لا يمكنها استخدام العروض المادية.
قيود التصميم والتشغيل
- عدم وجود تعبئة تاريخية تلقائية لا تحتوي العروض المادية التزايدية إلا على البيانات المُدرجة بعد إنشائها. ويتطلب تسريع البيانات التاريخية تعبئة تاريخية صريحة، وقد يكون ذلك مكلفًا أو غير عملي لمجموعات البيانات الكبيرة.
- مفاضلات مستوى التحبّب تؤدي العروض ذات مستوى التحبّب الدقيق جدًا إلى زيادة حجم التخزين والحمل الإضافي وقت الإدراج، بينما تقلل العروض ذات مستوى التحبّب الخشن من المرونة. ويجب اختيار مستوى التحبّب بعناية ليتوافق مع أنماط الاستعلام المتوقعة.
- تضخم الأبعاد تؤدي إضافة عدد كبير من أبعاد التجميع إلى زيادة حجم العرض بشكل كبير، وقد تقلل من فعاليته. ويجب ألا تتضمن العروض إلا أعمدة التجميع والتصفية شائعة الاستخدام.
- قابلية توسع محدودة لعدد العروض يضيف كل عرض مادي حملًا إضافيًا وقت الإدراج، ويساهم في ضغط الدمج. وقد يؤثر إنشاء عدد كبير جدًا من العروض سلبًا في إدخال البيانات وعمليات الدمج في الخلفية.
استكشاف الأخطاء وإصلاحها
عدم استخدام العرض المادي
- افتح نافذة التحسين لمعرفة ما إذا كانت تعرض “نطاق التاريخ غير مدعوم.”
- تأكد من أن نطاق تاريخ الاستعلام يبدأ بعد الحد الأدنى لتاريخ العرض المادي.
- أزل الحد الأدنى للتاريخ إذا كان العرض المادي يتضمن جميع البيانات التاريخية.
- تحقّق من أن مستوى تحبّب المخطط هو مضاعف لمستوى تحبّب MV.
- جرّب ضبط المخطط على “Auto” أو حدّد يدويًا مستوى تحبّب متوافقًا.
- تحقّق مما إذا كان المخطط يستخدم تجميعات موجودة في MV.
- راجع “الأعمدة المجمّعة المتاحة” في نافذة التحسين.
- تأكد من أن أعمدة Group By موجودة ضمن أعمدة الأبعاد في MV.
- تحقّق من “أعمدة التجميع/التصفية المتاحة” في نافذة التحسين.
بطء استعلامات العرض المادي
- يحتوي MV على عدد كبير جدًا من الصفوف بسبب صِغَر مستوى التحبّب (مثلًا، ثانية واحدة).
- الحل: أنشئ MV بمستوى تحبّب أكبر (مثلًا، دقيقة واحدة أو ساعة واحدة).
- يحتوي MV على عدد كبير من القيم الفريدة بسبب كثرة أعمدة الأبعاد.
- الحل: قلّل أعمدة الأبعاد إلى الأكثر استخدامًا.
- يشغّل النظام
EXPLAINعلى كل MV. - الحل: أزل MVs التي نادرًا ما تُستخدم أو التي يتم تخطيها دائمًا.
أخطاء الإعداد
- أضِف عمودًا مُجمَّعًا واحدًا على الأقل إلى إعداد MV.
- حدِّد العمود المطلوب تجميعه (يمكن فقط لـ count عدم تحديد عمود مصدر).
- استخدم أحد مستويات التحبّب المحددة مسبقًا من القائمة المنسدلة.
- يجب أن يكون التنسيق interval صالحًا في SQL (مثلًا:
1 hour، وليس1 h).