الاستعلام في ClickHouse Cloudتُخزَّن بيانات جدول النظام هذا محليًا على كل عقدة في ClickHouse Cloud. لذلك، يتطلب الحصول على رؤية كاملة لجميع البيانات استخدام الدالة
clusterAllReplicas. راجع هنا لمزيد من التفاصيل.الوصف
flush_interval_milliseconds ضمن قسم إعدادات الخادوم query_log. ولإجبار التفريغ، استخدم الاستعلام SYSTEM FLUSH LOGS.
لا يحذف ClickHouse البيانات من الجدول تلقائيًا. راجع المقدمة لمزيد من التفاصيل.
يسجل الجدول system.query_log نوعين من الاستعلامات:
- الاستعلامات الأولية التي شغّلها العميل مباشرة.
- الاستعلامات الفرعية التي بدأت بواسطة استعلامات أخرى (لتنفيذ الاستعلامات الموزعة). وبالنسبة إلى هذه الأنواع من الاستعلامات، تُعرض معلومات الاستعلامات الأصلية في الأعمدة
initial_*.
query_log، وذلك بحسب حالة الاستعلام (راجع العمود type):
- إذا نجح تنفيذ الاستعلام، يُنشأ صفّان بالنوعين
QueryStartوQueryFinish. - إذا حدث خطأ أثناء معالجة الاستعلام، يُنشأ حدثان بالنوعين
QueryStartوExceptionWhileProcessing. - إذا حدث خطأ قبل بدء تنفيذ الاستعلام، يُنشأ حدث واحد بالنوع
ExceptionBeforeStart.
query_log.
يمكنك استخدام الإعداد log_formatted_queries لتسجيل الاستعلامات المنسقة في العمود formatted_query.
الأعمدة
hostname(LowCardinality(String)) — اسم المضيف للخادم الذي ينفّذ الاستعلام.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، أو عدد الصفوف التي كتبتها عملية INSERT. في حالة الإدراج المتزامن، يشمل ذلك الصفوف التي كتبتها عمليات الإدراج اللاحقة التي شغّلها مسار المعالجة (مثل العروض المادية المرفقة) في الإدخالquery_kind=Insert؛ وفي حالة الإدراج غير المتزامن، تُسجَّل تلك الصفوف اللاحقة في الإدخالquery_kind=AsyncInsertFlush، بينما لا يسجّل الإدخالInsertالظاهر للعميل إلا الصفوف المقبولة من العميل.result_bytes(UInt64) — حجم ذاكرة RAM بالبايتات المستخدم لتخزين نتيجة الاستعلام.memory_usage(UInt64) — استهلاك الاستعلام للذاكرة.current_database(LowCardinality(String)) — اسم قاعدة البيانات الحالية.query(String) — نص الاستعلام.formatted_query(String) — نص الاستعلام المنسّق.normalized_query_hash(UInt64) — قيمة hash رقمية متطابقة، على سبيل المثال، للاستعلامات التي لا تختلف إلا في قيم الثوابت الحرفية.query_kind(LowCardinality(String)) — نوع الاستعلام.databases(Array(LowCardinality(String))) — أسماء قواعد البيانات الموجودة في الاستعلام.tables(Array(LowCardinality(String))) — أسماء الجداول الموجودة في الاستعلام.columns(Array(LowCardinality(String))) — أسماء الأعمدة الموجودة في الاستعلام.partitions(Array(LowCardinality(String))) — أسماء التقسيمات الموجودة في الاستعلام.projections(Array(LowCardinality(String))) — أسماء الإسقاطات المستخدمة أثناء تنفيذ الاستعلام.views(Array(LowCardinality(String))) — أسماء العروض (المجسّدة أو الحية) الموجودة في الاستعلام.exception_code(Int32) — رمز الاستثناء.exception(String) — رسالة الاستثناء.stack_trace(String) — تتبّع المكدس. تكون سلسلة فارغة إذا اكتمل الاستعلام بنجاح.is_initial_query(UInt8) — نوع الاستعلام. القيم الممكنة: 1 — بدأ العميل الاستعلام، 0 — بدأ هذا الاستعلامَ استعلامٌ آخر كجزء من التنفيذ الموزّع للاستعلامات.connection_address(IPv6) — عنوان IP للعميل الذي أُنشئ منه الاتصال. عند الاتصال عبر proxy، سيكون هذا عنوان الـ proxy.connection_port(UInt16) — منفذ العميل الذي أُنشئ منه الاتصال. عند الاتصال عبر proxy، سيكون هذا منفذ الـ proxy.user(LowCardinality(String)) — اسم المستخدم الذي بدأ الاستعلام الحالي.query_id(String) — معرّف الاستعلام.address(IPv6) — عنوان IP الذي استُخدم لإجراء الاستعلام. عند الاتصال عبر proxy وعند تعيينauth_use_forwarded_address، سيكون هذا عنوان العميل بدلًا من الـ proxy.port(UInt16) — منفذ العميل الذي استُخدم لإجراء الاستعلام. عند الاتصال عبر proxy وعند تعيينauth_use_forwarded_address، سيكون هذا منفذ العميل بدلًا من الـ proxy.initial_user(LowCardinality(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(LowCardinality(String)) — اسم المستخدم الذي تمت المصادقة عليه في الجلسة.interface(UInt8) — الواجهة التي بدأ منها الاستعلام. القيم الممكنة: 1 — TCP، 2 — HTTP.is_secure(UInt8) — علامة تشير إلى ما إذا كان الاستعلام قد نُفِّذ عبر واجهة آمنة.os_user(LowCardinality(String)) — اسم مستخدم نظام التشغيل الذي يشغّل clickhouse-client.client_hostname(LowCardinality(String)) — اسم مضيف جهاز العميل الذي يعمل عليه clickhouse-client أو عميل TCP آخر.client_name(LowCardinality(String)) — اسم clickhouse-client أو اسم عميل TCP آخر.client_agent(LowCardinality(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(UInt8) — طريقة HTTP التي بدأ بها الاستعلام. القيم الممكنة: 0 — تم تشغيل الاستعلام من واجهة TCP، 1 — استُخدمت طريقة GET، 2 — استُخدمت طريقة POST.http_user_agent(LowCardinality(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.log_comment(String) — تعليق السجل. يمكن تعيينه إلى أي سلسلة نصية لا يزيد طولها على max_query_size. وتكون القيمة سلسلة فارغة إذا لم يتم تعريفه.thread_ids(Array(UInt64)) — معرّفات الخيوط المشاركة في تنفيذ الاستعلام. وقد لا تكون هذه الخيوط قد عملت في الوقت نفسه.peak_threads_usage(UInt64) — الحد الأقصى لعدد الخيوط المتزامنة التي تنفذ الاستعلام.ProfileEvents(Map(LowCardinality(String), UInt64)) — قيم ProfileEvents التي تقيس مقاييس مختلفة. ويمكن العثور على وصفها في الجدول system.events.Settings(Map(LowCardinality(String), LowCardinality(String))) — الإعدادات التي غُيّرت عند تشغيل العميل للاستعلام. ولتمكين تسجيل تغييرات الإعدادات، اضبط المعلمة log_query_settings على 1.used_aggregate_functions(Array(LowCardinality(String))) — الأسماء المعيارية للدوال التجميعية التي استُخدمت أثناء تنفيذ الاستعلام.used_aggregate_function_combinators(Array(LowCardinality(String))) — الأسماء القياسية لمُركِّبات الدوال التجميعية التي استُخدمت أثناء تنفيذ الاستعلام.used_database_engines(Array(LowCardinality(String))) — الأسماء القياسية لمحركات قواعد البيانات التي استُخدمت أثناء تنفيذ الاستعلام.used_data_type_families(Array(LowCardinality(String))) — الأسماء القياسية لعائلات أنواع البيانات التي استُخدمت أثناء تنفيذ الاستعلام.used_dictionaries(Array(LowCardinality(String))) — الأسماء القياسية للقواميس التي استُخدمت أثناء تنفيذ الاستعلام.used_formats(Array(LowCardinality(String))) — الأسماء القياسية للتنسيقات التي استُخدمت أثناء تنفيذ الاستعلام.used_functions(Array(LowCardinality(String))) — الأسماء القياسية للدوال التي استُخدمت أثناء تنفيذ الاستعلام.used_storages(Array(LowCardinality(String))) — الأسماء القياسية لوحدات التخزين التي استُخدمت أثناء تنفيذ الاستعلام.used_table_functions(Array(LowCardinality(String))) — الأسماء القياسية لدوال الجداول التي استُخدمت أثناء تنفيذ الاستعلام.used_executable_user_defined_functions(Array(LowCardinality(String))) — الأسماء القياسية للدوال التنفيذية المعرّفة من المستخدم التي استُخدمت أثناء تنفيذ الاستعلام.used_sql_user_defined_functions(Array(LowCardinality(String))) — الأسماء القياسية لدوال SQL المعرّفة من المستخدم التي استُخدمت أثناء تنفيذ الاستعلام.used_row_policies(Array(LowCardinality(String))) — قائمة أسماء سياسات الصفوف التي استُخدمت أثناء تنفيذ الاستعلام.used_privileges(Array(LowCardinality(String))) — الامتيازات التي جرى التحقق منها بنجاح أثناء تنفيذ الاستعلام.missing_privileges(Array(LowCardinality(String))) — الامتيازات الناقصة أثناء تنفيذ الاستعلام.transaction_id(Tuple(UInt64, UInt64, UUID)) — معرّف المعاملة التي نُفِّذ هذا الاستعلام ضمن نطاقها.query_cache_usage(Enum8(‘Unknown’ = 0, ‘None’ = 1, ‘Write’ = 2, ‘Read’ = 3)) — استخدام ذاكرة التخزين المؤقت للاستعلامات أثناء تنفيذ الاستعلام. القيم: ‘Unknown’ = الحالة غير معروفة، ‘None’ = لم تُكتب نتيجة الاستعلام في ذاكرة التخزين المؤقت لنتائج الاستعلام ولم تُقرأ منها، ‘Write’ = كُتبت نتيجة الاستعلام في ذاكرة التخزين المؤقت لنتائج الاستعلام، ‘Read’ = قُرئت نتيجة الاستعلام من ذاكرة التخزين المؤقت لنتائج الاستعلام.asynchronous_read_counters(Map(LowCardinality(String), UInt64)) — المقاييس الخاصة بالقراءة غير المتزامنة.is_internal(UInt8) — يشير إلى ما إذا كان هذا استعلامًا مساعدًا يُنفَّذ داخليًا.
ProfileEvents.Names— اسم مستعار لـmapKeys(ProfileEvents).ProfileEvents.Values— اسم مستعار لـmapValues(ProfileEvents).Settings.Names— اسم مستعار لـmapKeys(Settings).Settings.Values— اسم مستعار لـmapValues(Settings).
أمثلة
system.query_log محليًا على كل عقدة؛ ولرؤية جميع الإدخالات، يجب الاستعلام عبر clusterAllReplicas.
على سبيل المثال، لتجميع صفوف query_log من كل نسخة متماثلة في العنقود المسمّى “default”، يمكنك كتابة ما يلي:
انظر أيضًا
- system.query_thread_log — يحتوي هذا الجدول على معلومات عن كل خيط تنفيذ خاص بالاستعلام.