الانتقال إلى المحتوى الرئيسي

الإجابة

يتتبّع الجدول query_log في قاعدة البيانات system جميع استعلاماتك، بما في ذلك:
  • مقدار الذاكرة التي استهلكها الاستعلام، و
  • مقدار وقت CPU الذي استغرقه
يعرض الاستعلام التالي أعلى 10 استعلامات، حيث يُقصد بـ “أعلى” الاستعلامات التي استخدمت أكبر قدر من الذاكرة:
تكون الاستجابة كما يلي:
يمثّل initial_query_id معرّف الاستعلام الأوّلي لتنفيذ الاستعلام الموزّع الذي يُطلَق من العقدة التي تستقبل الطلب. ويحتوي query_id على معرّف الاستعلام الفرعي الذي يُنفَّذ على عقدة أخرى. راجع هذه المقالة لمزيد من التفاصيل.
يمكنك استخدام معرّف الاستعلام لاستخراج مزيد من التفاصيل عنه. لنبحث في الاستعلام الأطول تشغيلًا أعلاه (الأول):
يتبيّن أن هذا هو الاستعلام الذي استخدمناه لإدراج بضعة مليارات من صفوف البيانات في جدول باسم youtube (راجع مجموعة بيانات عدم الإعجاب على YouTube):

initial_query_id مقابل query_id

لاحظ أنه في بيئة ClickHouse العنقودية (مثل ClickHouse Cloud)، يمثّل initial_query_id معرّف الاستعلام الأوّلي لعملية تنفيذ الاستعلام الموزّع التي تبدأ من العُقدة التي تستقبل الطلب؛ بينما يحتوي الحقل query_id على معرّف الاستعلام الفرعي الذي يُنفَّذ على عُقدة أخرى.
التنفيذ الموزّع ليس السبب الوحيد لاختلاف قيم query_idيمكن للاستعلام الواحد أيضًا أن يولّد استعلامات فرعية داخلية تُسجَّل بمعرّف query_id خاص بها وبالقيمة is_initial_query = 0 — وأكثرها شيوعًا الاستعلامات الداخلية التي يشغّلها ClickHouse لتقييم العروض. يعيّن ClickHouse هذه المعرّفات الداخلية، وقد لا تتبع التنسيق نفسه الذي يُبلَّغ إلى عميلك؛ وفي الخطوات المرتبطة بالـ view قد ترى قيم query_id تتضمن وسمًا مثل queryView.... وعندما تريد الاستعلام كما أرسلته تمامًا، صفِّ النتائج باستخدام is_initial_query = 1 (أو query_id = initial_query_id). هذا سلوك من جهة الخادم لـ query_log، وهو نفسه بغضّ النظر عن العميل المستخدم، بما في ذلك Cloud SQL Console.
إذا أضفنا query_id إلى الاستعلام أعلاه، فإننا نحصر بحثنا حول initial_query_id = a7262fa2-bd8b-4b51-a359-621ccf282417 وhostname():
سنحصل على:
لاحظ أن لدينا عدة نتائج من عدة مضيفات (عُقد الكتلة المختلفة). ولمزيد من التحديد، وللحصول على الاستعلامات الفرعية فقط، يمكننا أيضًا إضافة الشرط query_id != initial_query_id إلى عبارة WHERE:
يعيد جميع الاستعلامات الفرعية التي نُفِّذت على العقد البعيدة (أي البعيدة عن العقدة التي أُرسِل إليها الاستعلام أول مرة):
وعلى النقيض، سيُرجع query_id = initial_query_id فقط الاستعلامات التي نُفِّذت على العقدة المحلية التي أُطلق منها الاستعلام الموزّع أول مرة:
ما ينتج:
كما في جداول النظام الأخرى، يمكنك العثور على مزيد من التفاصيل حول معنى كل حقل في الوثائق.
آخر تعديل في ١ يوليو ٢٠٢٦