رتّب حسب الكاردينالية (من الأقل إلى الأعلى)
درجة الدقة الزمنية مهمة
runnable editable
ركّز على الاستعلامات الفردية، لا على المتوسطات
الذاكرة ومسح الصفوف
GROUP BY user_id, error_message, url_path ينشئ حالة ذاكرة منفصلة لكل تركيبة فريدة من القيم الثلاث معًا. ومع زيادة عدد المستخدمين وأنواع الأخطاء ومسارات URL، قد ينتهي بك الأمر بسهولة إلى توليد ملايين من حالات التجميع التي يجب الاحتفاظ بها في الذاكرة في الوقت نفسه.
في الحالات القصوى، تستخدم Sentry أخذ العينات الحتمي. وتؤدي عينة بنسبة 10% إلى خفض استخدام الذاكرة بنسبة 90% مع الحفاظ على دقة تقارب 5% لمعظم عمليات التجميع:
cityHash64() يُنتج قيم تجزئة ثابتة للمدخل نفسه، لذا فإن user_id = 12345 سيُنتج دائمًا القيمة نفسها، ما يضمن أن هذا المستخدم سيظهر دائمًا ضمن العينة البالغة 10% أو لن يظهر أبدًا — من دون أي تبدّل بين الاستعلامات.
تحسين قناع البت في Sentry
مصادر الفيديو
- Lost in the Haystack - Optimizing High Cardinality Aggregations - دروس Sentry من بيئة الإنتاج حول تحسين الذاكرة
- ClickHouse Performance Analysis - أليكسي ميلوفيدوف حول منهجية استكشاف الأخطاء وإصلاحها
- ClickHouse Meetup: Query Optimization Techniques - استراتيجيات تحسين من المجتمع