Skip to main content

الوصف

يعرض للمستخدم الحالي سجلات استعلاماته في سجل الاستعلامات. يقرأ جدول سجل الاستعلامات المُعدّ عبر إعدادَي الخادم query_log.database وquery_log.table (وهو system.query_log افتراضيًا)، ولا يعيد إلا الصفوف التي يطابق فيها المستخدم الذي بدأ الاستعلام currentUser() (يُؤخذ هذا المستخدم من initial_user إذا كان مُعيَّنًا، وإلا فمن user). على خلاف جدول سجل الاستعلامات نفسه، يمكن قراءة system.user_query_log دون أي صلاحيات، ما يتيح للمستخدمين فحص استعلاماتهم الخاصة دون منحهم إمكانية الوصول إلى استعلامات الآخرين. لا يُدعم ذلك إلا إذا كان سجل الاستعلامات مخزنًا محليًا. إذا جرى إعداد query_log.engine كـ Distributed أو أي محرك آخر يفوّض عمليات القراءة إلى خادم آخر، يرفض system.user_query_log القراءة منه ويطرح استثناءً، إذ لا يمكن فرض فحص الوصول المطلوب عبر حدود خادم يستخدم بروتوكول ClickHouse. في هذه الحالة، عطّل الجدول باستخدام query_log.enable_user_query_log = 0. التوافر لا يُربط system.user_query_log إلا عند تمكين إعداد الخادم query_log.enable_user_query_log، وهو الوضع الافتراضي. وعندما تكون قيمة الإعداد 0، لا يكون الجدول موجودًا وتفشل الاستعلامات عليه بالخطأ UNKNOWN_TABLE. عندما يكون query_log.enable_user_query_log ممكَّنًا لكن سجل الاستعلامات الأساسي غير مُعدّ أو لم يُنشأ جدوله بعد، يكون system.user_query_log موجودًا لكنه فارغ. تُمرَّر شروط أعمدة التقسيم والمفتاح في سجل الاستعلامات (event_date وevent_time وquery_start_time وquery_id وtype والأعمدة القياسية المشابهة) التي تُقارن بثوابت إلى جدول سجل الاستعلامات الأساسي، لذا تحافظ عمليات البحث العادية، مثل المثال أدناه، على استبعاد الأقسام ولا تفحص السجل المحتفَظ به بالكامل. إذا كان هناك جدول باسم system.user_query_log أُنشئ قبل الترقية إلى إصدار من ClickHouse يوفّر هذا الجدول، فلن يبدأ الخادم حتى تتم إعادة تسمية الجدول الحالي أو حذفه، أو تعيين query_log.enable_user_query_log إلى 0.

الأعمدة

  • hostname (String) — اسم مضيف الخادم الذي ينفّذ الاستعلام.
  • clickhouse_version (String) — إصدار خادم ClickHouse الذي أنتج الصف.
  • system_processor (String) — بنية وحدة المعالجة المركزية لخادم ClickHouse الذي أنتج الصف.
  • type (Enum8(‘QueryStart’ = 1, ‘QueryFinish’ = 2, ‘ExceptionBeforeStart’ = 3, ‘ExceptionWhileProcessing’ = 4)) — نوع الحدث الذي وقع أثناء تنفيذ الاستعلام. القيم: QueryStart — بدء تنفيذ الاستعلام بنجاح، QueryFinish — انتهاء تنفيذ الاستعلام بنجاح، ExceptionBeforeStart — استثناء قبل بدء تنفيذ الاستعلام، ExceptionWhileProcessing — استثناء أثناء تنفيذ الاستعلام.
  • event_date (Date) — تاريخ بدء الاستعلام.
  • event_time (DateTime) — وقت بدء الاستعلام.
  • event_time_microseconds (DateTime64(6)) — وقت بدء الاستعلام بدقة الميكروثانية.
  • query_start_time (DateTime) — وقت بدء تنفيذ الاستعلام.
  • query_start_time_microseconds (DateTime64(6)) — وقت بدء تنفيذ الاستعلام بدقة الميكروثانية.
  • query_duration_ms (UInt64) — مدة تنفيذ الاستعلام بالمللي ثانية.
  • read_rows (UInt64) — العدد الإجمالي للصفوف المقروءة من جميع الجداول ودوال الجداول المشاركة في الاستعلام. يشمل ذلك الاستعلامات الفرعية العادية والاستعلامات الفرعية لـ IN وJOIN. بالنسبة إلى الاستعلامات الموزعة، يتضمن read_rows العدد الإجمالي للصفوف المقروءة في جميع النسخ المتماثلة. ترسل كل نسخة متماثلة قيمة read_rows الخاصة بها، ويلخّص الخادم الذي بدأ الاستعلام جميع القيم المستلمة والمحلية. لا تؤثر أحجام ذاكرة التخزين المؤقت في هذه القيمة.
  • read_bytes (UInt64) — العدد الإجمالي للبايتات المقروءة من جميع الجداول ودوال الجداول المشاركة في الاستعلام. يشمل ذلك الاستعلامات الفرعية العادية والاستعلامات الفرعية لـ IN وJOIN. بالنسبة إلى الاستعلامات الموزعة، يتضمن read_bytes العدد الإجمالي للبايتات المقروءة في جميع النسخ المتماثلة. ترسل كل نسخة متماثلة قيمة read_bytes الخاصة بها، ويلخّص الخادم الذي بدأ الاستعلام جميع القيم المستلمة والمحلية. لا تؤثر أحجام ذاكرة التخزين المؤقت في هذه القيمة.
  • written_rows (UInt64) — عدد الصفوف التي كتبها الاستعلام، بما في ذلك أي صفوف كتبتها عمليات الإدراج اللاحقة التي شغّلها خط المعالجة، مثل العروض المجسدة المرفقة. بالنسبة إلى إدراج متزامن، تُسجل هذه الصفوف اللاحقة في الإدخال query_kind = Insert؛ أما بالنسبة إلى إدراج غير متزامن، فتُسجل في الإدخال query_kind = AsyncInsertFlush، بينما يسجل الإدخال Insert الموجّه للعميل الصفوف المقبولة من العميل فقط. بالنسبة إلى الاستعلامات التي لا تكتب صفوفًا، تكون القيمة 0.
  • written_bytes (UInt64) — عدد البايتات التي كتبها الاستعلام (غير مضغوطة)، بما في ذلك أي بايتات كتبتها عمليات الإدراج اللاحقة التي شغّلها خط المعالجة، مثل العروض المجسدة المرفقة. بالنسبة إلى إدراج متزامن، تُسجل هذه البايتات اللاحقة في الإدخال query_kind = Insert؛ أما بالنسبة إلى إدراج غير متزامن، فتُسجل في الإدخال query_kind = AsyncInsertFlush، بينما يسجل الإدخال Insert الموجّه للعميل البايتات المقبولة من العميل فقط. بالنسبة إلى الاستعلامات التي لا تكتب بيانات، تكون القيمة 0.
  • result_rows (UInt64) — عدد الصفوف في نتيجة استعلام SELECT، أو عدد الصفوف التي كتبها إدراج. بالنسبة إلى إدراج متزامن، يشمل ذلك الصفوف التي كتبتها عمليات الإدراج اللاحقة التي شغّلها خط المعالجة (مثل العروض المجسدة المرفقة) في الإدخال query_kind = Insert؛ أما بالنسبة إلى إدراج غير متزامن، فتُسجل تلك الصفوف اللاحقة في الإدخال query_kind = AsyncInsertFlush، بينما يسجل الإدخال Insert الموجّه للعميل الصفوف المقبولة من العميل فقط.
  • result_bytes (UInt64) — حجم ذاكرة RAM، بالبايتات، المستخدم لتخزين نتيجة استعلام.
  • memory_usage (UInt64) — استهلاك الذاكرة بواسطة الاستعلام.
  • current_database (String) — اسم قاعدة البيانات الحالية.
  • query (String) — سلسلة الاستعلام.
  • formatted_query (String) — سلسلة الاستعلام المنسقة.
  • normalized_query_hash (UInt64) — قيمة تجزئة رقمية تتطابق، على سبيل المثال، بين الاستعلامات التي تختلف فقط في قيم الثوابت الحرفية.
  • query_kind (String) — نوع الاستعلام.
  • databases (Array(String)) — أسماء قواعد البيانات الواردة في الاستعلام.
  • tables (Array(String)) — أسماء الجداول الواردة في الاستعلام.
  • columns (Array(String)) — أسماء الأعمدة الواردة في الاستعلام.
  • partitions (Array(String)) — أسماء الأقسام الواردة في الاستعلام.
  • projections (Array(String)) — أسماء الإسقاطات المستخدمة أثناء تنفيذ الاستعلام.
  • views (Array(String)) — أسماء العروض (المادية أو الحية) الواردة في الاستعلام.
  • exception_code (Int32) — رمز الاستثناء.
  • exception (String) — رسالة الاستثناء.
  • stack_trace (String) — تتبع المكدس. تكون سلسلة فارغة إذا اكتمل الاستعلام بنجاح.
  • is_initial_query (UInt8) — ما إذا كان الاستعلام أوليًا. القيم الممكنة: 1 — استعلام أولي (من المستوى الأعلى)، 0 — استعلام تابع بدأه استعلام آخر، بما في ذلك استعلامات التنفيذ الموزع والاستعلامات الفرعية الداخلية.
  • connection_address (IPv6) — عنوان IP للعميل الذي أُجري الاتصال منه. عند الاتصال عبر وكيل، يكون هذا عنوان الوكيل.
  • connection_port (UInt16) — منفذ العميل الذي أُجري الاتصال منه. عند الاتصال عبر وكيل، يكون هذا منفذ الوكيل.
  • user (String) — اسم المستخدم الذي بدأ الاستعلام الحالي.
  • query_id (String) — معرّف الاستعلام.
  • address (IPv6) — عنوان IP المستخدم لإجراء الاستعلام. عند الاتصال عبر وكيل وتعيين auth_use_forwarded_address، يكون هذا عنوان العميل بدلاً من عنوان الوكيل.
  • port (UInt16) — منفذ العميل المستخدم لإجراء الاستعلام. عند الاتصال عبر وكيل وتعيين auth_use_forwarded_address، يكون هذا منفذ العميل بدلاً من منفذ الوكيل.
  • initial_user (String) — اسم المستخدم الذي شغّل الاستعلام الأولي في سلسلة الاستعلام نفسها.
  • initial_query_id (String) — معرّف الاستعلام الأولي في سلسلة الاستعلام نفسها.
  • initial_address (IPv6) — عنوان IP الذي أُطلق منه الاستعلام الأولي في سلسلة الاستعلام نفسها.
  • initial_port (UInt16) — منفذ العميل الذي أُطلق منه الاستعلام الأولي في سلسلة الاستعلام نفسها.
  • initial_query_start_time (DateTime) — وقت بدء الاستعلام الأولي في سلسلة الاستعلام نفسها.
  • initial_query_start_time_microseconds (DateTime64(6)) — وقت بدء الاستعلام الأولي في سلسلة الاستعلام نفسها، بدقة الميكروثانية.
  • authenticated_user (String) — اسم المستخدم الذي تمت مصادقته في الجلسة.
  • interface (Enum8(‘Unknown’ = 0, ‘TCP’ = 1, ‘HTTP’ = 2, ‘gRPC’ = 3, ‘MySQL’ = 4, ‘PostgreSQL’ = 5, ‘Local’ = 6, ‘TCP_Interserver’ = 7, ‘Prometheus’ = 8, ‘Background’ = 9, ‘ArrowFlight’ = 10)) — الواجهة التي بدأ منها الاستعلام، وفقًا لما أبلغ به العميل. تكون Unknown إذا كانت الواجهة المُبلّغ عنها غير معروفة لهذا الخادم.
  • is_secure (UInt8) — علامة تشير إلى ما إذا كان الاستعلام قد نُفِّذ عبر واجهة آمنة
  • os_user (String) — اسم مستخدم نظام التشغيل الذي يشغّل clickhouse-client.
  • client_hostname (String) — اسم مضيف جهاز العميل الذي يعمل عليه clickhouse-client أو عميل TCP آخر.
  • client_name (String) — اسم clickhouse-client أو عميل TCP آخر.
  • client_agent (String) — وكيل برمجة بالذكاء الاصطناعي استدعى العميل (مثل claude-code وcursor) ويُكتشف من متغيرات البيئة. تكون القيمة فارغة إذا لم يُكتشف أي وكيل.
  • client_revision (UInt32) — مراجعة clickhouse-client أو عميل TCP آخر.
  • client_version_major (UInt32) — الإصدار الرئيسي لـ clickhouse-client أو عميل TCP آخر.
  • client_version_minor (UInt32) — الإصدار الثانوي لـ clickhouse-client أو عميل TCP آخر.
  • client_version_patch (UInt32) — مكوّن التصحيح من إصدار clickhouse-client أو عميل TCP آخر.
  • script_query_number (UInt32) — رقم الاستعلام في برنامج نصي يضم استعلامات متعددة لـ clickhouse-client.
  • script_line_number (UInt32) — رقم السطر الذي يبدأ فيه الاستعلام في برنامج نصي يضم استعلامات متعددة لـ clickhouse-client.
  • http_method (Enum8(‘UNKNOWN’ = 0, ‘GET’ = 1, ‘POST’ = 2, ‘OPTIONS’ = 3, ‘PUT’ = 4, ‘DELETE’ = 5, ‘HEAD’ = 6)) — طريقة HTTP التي بدأت الاستعلام. تكون UNKNOWN إذا لم يصل الاستعلام عبر HTTP، أو إذا كانت الطريقة المُبلّغ عنها غير معروفة لهذا الخادم.
  • http_user_agent (String) — ترويسة HTTP ‏UserAgent المُمرَّرة في استعلام HTTP.
  • http_referer (String) — ترويسة HTTP ‏Referer المُمرَّرة في استعلام HTTP (تحتوي على عنوان كامل أو جزئي للصفحة التي تُجري الاستعلام).
  • forwarded_for (String) — ترويسة HTTP ‏X-Forwarded-For المُمرَّرة في استعلام HTTP.
  • quota_key (String) — مفتاح الحصة المحدد في إعداد quotas (راجع keyed).
  • distributed_depth (UInt64) — عدد مرات إعادة توجيه الاستعلام بين الخوادم.
  • revision (UInt32) — مراجعة ClickHouse.
  • http_handler_name (String) — اسم معالج HTTP المعرّف بلغة SQL ‏(CREATE HANDLER) الذي استدعى الاستعلام. تكون القيمة فارغة إذا لم يُستدعَ الاستعلام عبر هذا المعالج.
  • http_request_url (String) — مسار طلب HTTP (دون سلسلة الاستعلام) الذي استدعى الاستعلام. تُحذف سلسلة الاستعلام كي لا تُحفظ معلمات الطلب الحساسة. تكون القيمة فارغة للاستعلامات غير التابعة لـ HTTP.
  • log_comment (String) — تعليق السجل. يمكن ضبطه على سلسلة نصية عشوائية لا تتجاوز max_query_size. تكون القيمة سلسلة فارغة إذا لم يُعرَّف.
  • thread_ids (Array(UInt64)) — معرّفات الخيوط المشاركة في تنفيذ الاستعلام. قد لا تكون هذه الخيوط قد عملت بالتزامن.
  • peak_threads_usage (UInt64) — الحد الأقصى لعدد الخيوط التي تنفذ الاستعلام بالتزامن.
  • ProfileEvents (Map(String, UInt64)) — أحداث ProfileEvents التي تقيس مقاييس مختلفة. يمكن العثور على وصفها في جدول system.events
  • Settings (Map(String, String)) — الإعدادات التي غُيّرت عند تشغيل العميل للاستعلام. لتمكين تسجيل التغييرات على الإعدادات، اضبط المعلمة log_query_settings على 1.
  • used_aggregate_functions (Array(String)) — الأسماء المعيارية لدوال التجميع التي استُخدمت أثناء تنفيذ الاستعلام.
  • used_aggregate_function_combinators (Array(String)) — الأسماء المعيارية لمُركِّبات دوال التجميع التي استُخدمت أثناء تنفيذ الاستعلام.
  • used_database_engines (Array(String)) — الأسماء الأساسية لمحركات قواعد البيانات المُستخدمة أثناء تنفيذ الاستعلام.
  • used_data_type_families (Array(String)) — الأسماء الأساسية لعائلات أنواع البيانات المُستخدمة أثناء تنفيذ الاستعلام.
  • used_dictionaries (Array(String)) — الأسماء الأساسية للقواميس المُستخدمة أثناء تنفيذ الاستعلام.
  • used_formats (Array(String)) — الأسماء الأساسية للتنسيقات المُستخدمة أثناء تنفيذ الاستعلام.
  • used_functions (Array(String)) — الأسماء الأساسية للدوال المُستخدمة أثناء تنفيذ الاستعلام.
  • used_storages (Array(String)) — الأسماء الأساسية لمكوّنات التخزين المُستخدمة أثناء تنفيذ الاستعلام.
  • used_table_functions (Array(String)) — الأسماء الأساسية لدوال الجداول المُستخدمة أثناء تنفيذ الاستعلام.
  • used_executable_user_defined_functions (Array(String)) — الأسماء الأساسية للدوال المعرّفة من المستخدم القابلة للتنفيذ والمُستخدمة أثناء تنفيذ الاستعلام.
  • used_sql_user_defined_functions (Array(String)) — الأسماء الأساسية للدوال المعرّفة من المستخدم بلغة SQL والمُستخدمة أثناء تنفيذ الاستعلام.
  • used_row_policies (Array(String)) — قائمة أسماء سياسات الصفوف المُستخدمة أثناء تنفيذ الاستعلام.
  • used_privileges (Array(String)) — الامتيازات التي تم التحقق منها بنجاح أثناء تنفيذ الاستعلام.
  • missing_privileges (Array(String)) — الامتيازات المفقودة أثناء تنفيذ الاستعلام.
  • used_number_of_joins (UInt64) — عدد عمليات الربط الفعلية المنفَّذة لهذا الاستعلام. يُجمَع هذا العدد من مسارات التنفيذ أثناء بنائها، ولذا فهو يعكس عمليات الربط المتبقية بعد تطبيق جميع التحسينات، لا عدد عبارات JOIN في نص الاستعلام. تُحتسب عملية الربط أيًّا كان عمق تداخلها: فالاستعلامات الفرعية وتعبيرات الجدول الشائعة والعروض والعروض المبنية على عروض أخرى واستعلام SELECT الخاص بعرض مُجسَّد يُشغّله INSERT، كلها تُسجَّل في صف الاستعلام المُرسَل، ولذلك قد تكون هذه القيمة غير صفرية لاستعلام لا يتضمن نصه أي JOIN على الإطلاق. أما الاستعلام الذي يبني مسار تنفيذ دون تشغيله، مثل EXPLAIN PIPELINE، فيُبلغ عن عمليات الربط الخاصة بالاستعلام الذي يشرحه. وتُجمَّع بعض مسارات التنفيذ أكثر من مرة خلال تشغيل استعلام واحد: إذ يُجمَّع استعلام SELECT الخاص بالعرض المُجسَّد لكل كتلة من عملية INSERT التي تُشغّله ولكل تدفق إدراج، ويُجمَّع العضو التعاودي في تعبير الجدول الشائع التعاودي في كل تكرار، وتُجمَّع علاقة الحلقة من جديد في كل مرة يُعاد تشغيلها. ومع ذلك، تُحتسب عمليات الربط في مسار التنفيذ هذا مرة واحدة فقط، وبذلك يصف هذا الرقم الاستعلام نفسه لا عدد مرات تجميع مسارات تنفيذه.
  • used_join_algorithms (Array(String)) — خوارزميات عمليات الربط المحسوبة في used_number_of_joins: ‘HASH’ و’PARALLEL_HASH’ و’GRACE_HASH’ و’PARTIAL_MERGE’ و’FULL_SORTING_MERGE’ و’PARALLEL_FULL_SORTING_MERGE’ و’IE_JOIN’ و’DIRECT’ و’PASTE’ و’CONSTANT’، مرتبةً بعد إزالة التكرار منها، بحيث تظهر الخوارزمية المشتركة بين عدة عمليات ربط مرة واحدة فقط. وهي الخوارزمية التي وقع عليها الاختيار فعليًا لتنفيذ كل عملية ربط، لا الخوارزميات التي يسمح بها الإعداد join_algorithm. وقد تُستبدل خوارزمية بأخرى في أثناء التنفيذ، وحينئذٍ تُدرج كلتاهما.
  • used_join_kinds (Array(String)) — أنواع عمليات الربط المحسوبة في used_number_of_joins، بواقع عنصر واحد لكل عملية ربط، ولذا يتكرر النوع المشترك بين عدة عمليات ربط بعددها. وتكون العناصر مرتبةً لا وفق ترتيب التنفيذ. وكل نوع هو النوع الذي نُفِّذ فعليًا، وقد يختلف عمّا ورد في نص الاستعلام، لأن المُحسِّن قد ينفّذ عملية الربط بعد تبديل طرفيها، فيتحول LEFT إلى RIGHT.
  • used_join_strictness (Array(String)) — صرامة عمليات الربط المحسوبة في used_number_of_joins، بواقع عنصر واحد لكل عملية ربط، وبالترتيب نفسه المتبع في used_join_kinds، أي أن العنصر الموجود عند فهرس معيّن يصف عملية الربط نفسها في كلتا المصفوفتين.
  • spilled_to_disk (Array(String)) — المشغّلات التي كتبت بيانات إلى ملفات مؤقتة على القرص (المعالجة في الذاكرة الخارجية) أثناء تنفيذ الاستعلام، مرتبةً بعد إزالة التكرار منها. وتعني المصفوفة الفارغة أن الاستعلام نُفِّذ بالكامل في الذاكرة.
  • transaction_id (Tuple(UInt64, UInt64, UUID, Int64)) — معرّف المعاملة التي نُفّذ هذا الاستعلام في نطاقها.
  • query_cache_usage (Enum8(‘Unknown’ = 0, ‘None’ = 1, ‘Write’ = 2, ‘Read’ = 3)) — استخدام ذاكرة التخزين المؤقت لنتائج الاستعلامات أثناء تنفيذ الاستعلام. القيم: ‘Unknown’ = الحالة غير معروفة، ‘None’ = لم تُكتب نتيجة الاستعلام إلى ذاكرة التخزين المؤقت لنتائج الاستعلامات ولم تُقرأ منها، ‘Write’ = كُتبت نتيجة الاستعلام إلى ذاكرة التخزين المؤقت لنتائج الاستعلامات، ‘Read’ = قُرئت نتيجة الاستعلام من ذاكرة التخزين المؤقت لنتائج الاستعلامات.
  • asynchronous_read_counters (Map(String, UInt64)) — مقاييس القراءة غير المتزامنة.
  • is_internal (UInt8) — يشير إلى ما إذا كان الاستعلام مساعدًا ويُنفّذ داخليًا.
الأسماء البديلة:
  • ProfileEvents.Names — اسم بديل لـ mapKeys(ProfileEvents).
  • ProfileEvents.Values — اسم بديل لـ mapValues(ProfileEvents).
  • Settings.Names — اسم بديل لـ mapKeys(Settings).
  • Settings.Values — اسم بديل لـ mapValues(Settings).

مثال

آخر تعديل في ٢٦ سبتمبر ٢٠٢٦