Skip to main content
تصف هذه الصفحة عبارتي KILL QUERY وKILL MUTATION. افتراضيًا، لا يُرفع أي استثناء عند عدم وجود مطابقات. لجعل KILL QUERY يرفع استثناءً عندما لا يُبقي تعبير WHERE الخاص به أي صفوف مؤهلة في system.processes بعد استبعاد عبارة KILL الحالية، وجعل KILL MUTATION يرفع استثناءً عندما لا يطابق تعبير WHERE الخاص به أي صف في system.mutations، اضبط kill_throw_if_noop على true. لا يرفع التنفيذ باستخدام ON CLUSTER استثناءً عند عدم وجود مطابقات، لأن نتائج المطابقة لا تُجمَّع عبر المضيفين.

KILL QUERY

تُستخدَم لإنهاء الاستعلامات الجارية حاليًا قسرًا. تُحدَّد الاستعلامات المطلوب إنهاؤها من جدول system.processes باستخدام المعايير المحددة في عبارة WHERE ضمن استعلام KILL. أمثلة: أولًا، ستحتاج إلى الحصول على قائمة الاستعلامات غير المكتملة. يعرض استعلام SQL هذا هذه القائمة مرتبةً حسب الأطول تشغيلًا: قائمة من عقدة ClickHouse واحدة:
قائمة من عنقود ClickHouse:
أنهِ الاستعلام:
إذا كنت تُنهي استعلامًا في ClickHouse Cloud أو في عنقود مُدار ذاتيًا، فتأكّد من استخدام الخيار ON CLUSTER [cluster-name] لضمان إنهاء الاستعلام على جميع النُسخ المتماثلة
لا يمكن للمستخدمين للقراءة فقط إيقاف سوى استعلاماتهم الخاصة. يمكن للمستخدم الذي لم يُمنح إذن SELECT على system.processes إلغاء استعلامه الخاص بتحديد معرّفه: KILL QUERY WHERE query_id = '<id>'. إذا لم يكن لدى المستخدم هذا الإذن ولا إذن KILL QUERY، فإن تحديد معرّف استعلام ليس قيد التشغيل باسمه لا يُلغي أي استعلام ولا يُرجع أي صفوف، بدلًا من الإبلاغ عن خطأ، ما لم يكن الإعداد kill_throw_if_noop مفعّلًا، إذ يُبلَّغ حينئذٍ عن العملية عديمة الأثر على هيئة استثناء؛ أما المستخدم الذي لديه إذن KILL QUERY دون إذن SELECT المذكور فيُرفَض طلبه لافتقاره إلى إذن SELECT. ويظل أي شرط آخر في WHERE، وكذلك ON CLUSTER، يتطلب الأذونات الموضّحة أعلاه. بشكل افتراضي، يُستخدَم الإصدار غير المتزامن من الاستعلامات (ASYNC)، وهو لا ينتظر تأكيدًا على توقّف الاستعلامات. ينتظر الإصدار المتزامن (SYNC) حتى تتوقف جميع الاستعلامات، ويعرض معلومات عن كل عملية عند توقفها. تتضمن الاستجابة العمود kill_status، والذي يمكن أن يأخذ القيم التالية:
  1. finished – تم إنهاء الاستعلام بنجاح.
  2. waiting – جارٍ انتظار انتهاء الاستعلام بعد إرسال إشارة إليه بإنهائه.
  3. تشرح القيم الأخرى سبب تعذّر إيقاف الاستعلام.
لا يتحقق الاستعلام الاختباري (TEST) إلا من صلاحيات المستخدم ويعرض قائمة بالاستعلامات المطلوب إيقافها.

KILL MUTATION

غالبًا ما يشير وجود عمليات mutation تستغرق وقتًا طويلًا أو عمليات mutation غير مكتملة إلى أن خدمة ClickHouse لا تعمل بكفاءة. وقد تتسبب الطبيعة غير المتزامنة لهذه عمليات mutation في استهلاكها جميع الموارد المتاحة على النظام. وقد تحتاج إلى أحد الخيارين التاليين:
  • إيقاف جميع عمليات mutation الجديدة وعمليات INSERT وSELECT مؤقتًا، وترك قائمة انتظار عمليات mutation تكتمل.
  • أو إنهاء بعض هذه عمليات mutation يدويًا بإرسال أمر KILL.
يحاول إلغاء عمليات mutations الجارية حاليًا وإزالتها. تُحدَّد عمليات mutations المطلوب إلغاؤها من جدول system.mutations باستخدام عامل التصفية المحدد في عبارة WHERE ضمن استعلام KILL. استعلام اختباري (TEST) يتحقق فقط من صلاحيات المستخدم ويعرض قائمة بعمليات mutations التي سيتم إيقافها. أمثلة: الحصول على count() لعدد عمليات mutations غير المكتملة: عدد عمليات mutations من عقدة ClickHouse واحدة:
عدد عمليات mutation في عنقود ClickHouse من النُسخ المتماثلة:
استعلم عن قائمة عمليات mutation غير المكتملة: قائمة عمليات mutation من عقدة ClickHouse واحدة:
قائمة عمليات mutation في عنقود ClickHouse:
أنهِّ عمليات الـ mutation عند الحاجة:
يكون هذا الاستعلام مفيدًا عندما تكون إحدى عمليات mutation عالقة ولا يمكنها الاكتمال (على سبيل المثال، إذا كانت إحدى الدوال في استعلام mutation تُطلق استثناءً عند تطبيقها على البيانات الموجودة في الجدول). لا يُتراجع عن التغييرات التي أجرتها mutation بالفعل.
لا يعني العمود is_killed=1 (في ClickHouse Cloud فقط) في جدول system.mutations بالضرورة أن mutation قد انتهت بالكامل. فقد تظل mutation في حالة يكون فيها is_killed=1 وis_done=0 لفترة طويلة. ويمكن أن يحدث هذا إذا كانت mutation أخرى طويلة التشغيل تحجب mutation التي تم إنهاؤها. هذا وضع طبيعي.