الانتقال إلى المحتوى الرئيسي
توثّق هذه الصفحة جميع الخيارات القابلة للإعداد في clickhouse-go v2.x. للاطلاع على دليل يتضمن أمثلة شيفرة، راجع الإعدادات.
تعليقات توضيحية للإصدارتُميَّز الخيارات التي أُضيفت في clickhouse-go v2.35.0 أو الإصدارات الأحدث بوسم (منذ vX.Y.Z) بجانب وصفها. أما الخيارات التي لا تتضمن وسم “منذ”، فهي متاحة منذ v2.0 وموجودة في جميع الإصدارات المدعومة.

كيفية تعيين الخيارات

تتوفر الخيارات على ثلاثة مستويات: عند تداخل المستويات، تكون الأولوية للمستوى الأكثر تحديدًا: الدفعة > الاستعلام > الاتصال. بالنسبة إلى Settings، تُدمج المفاتيح على مستوى الاستعلام مع المفاتيح على مستوى الاتصال، وتُحسم الأفضلية لمستوى الاستعلام عند التعارض. عبر struct Options:
باستخدام سلسلة DSN:
عبر Connector ‏(database/sql مع Options struct):
عبر السياق (لكل استعلام):

خيارات الاتصال

البروتوكول والاتصال


المصادقة


المهلات الزمنية

تُوضَع خدمة ClickHouse Cloud التي ظلت خاملة في حالة إيقاف مؤقت، ثم تستيقظ عند أول اتصال وارد. تستغرق عملية الاستيقاظ عادةً بضع عشرات من الثواني، وخلال هذه الفترة يظل طلب الاتصال معلّقًا. إذا كانت قيمة DialTimeout أقل من مدة الاستيقاظ، فسيفشل أول استعلام بعد فترة الخمول بسبب dial timeout بدلًا من أن يُنفَّذ.اضبط DialTimeout على 1m2m للعملاء الذين قد يكونون أول من يصل إلى خدمة خاملة. والمقابل هو بطء اكتشاف الفشل عند حدوث انقطاع فعلي — إذ يظل طلب الاتصال معلّقًا حتى تنقضي المهلة بالكامل قبل ظهور الخطأ — لذا يُفضَّل قصر المهلة الأعلى على الاتصال الأول، أو استخدام context deadlines على الاستعلامات الفردية لتحديد latency من البداية إلى النهاية.

مجمع الاتصالات

database/sql فقطConnMaxIdleTime هو إعداد قياسي لمجمع database/sql في Go. ولا يتوفر في clickhouse.Options struct أو عبر clickhouse.Open(). اضبطه بعد OpenDB():
راجع تجميع الاتصالات للحصول على تفاصيل الاستخدام.

إعدادات مجمّع database/sql القياسية

عند استخدام clickhouse.OpenDB() أو sql.Open("clickhouse", dsn)، فإن الكائن *sql.DB المُعاد يدعم طرق المجمّع القياسية في Go. يطبّق OpenDB() تلقائيًا أول ثلاثٍ منها من Options:
ClickHouse API (clickhouse.Open)هذه الطرق غير متاحة على الاتصال المُعاد من clickhouse.Open(). تدير ClickHouse API مجمّعها الداخلي باستخدام حقول structOptions مباشرةً.

الضغط

دعم طريقة الضغط حسب البروتوكول:

TLS

راجع TLS للاطلاع على أمثلة الشيفرة.

تسجيل الأحداث

راجع التسجيل للاطلاع على أمثلة كاملة.

المخازن المؤقتة والذاكرة


خاص بـ HTTP

يُتجاهَل بصمت عند استخدام Nativeلا تؤثر هذه الخيارات إلا في Protocol: clickhouse.HTTP. وعند استخدام البروتوكول Native، تُتجاهَل بصمت من دون إصدار أي خطأ أو تحذير.
تجميع اتصالات HTTP على طبقتينعند استخدام HTTP، توجد مجموعتا اتصالات:
  • الطبقة 1 (التطبيق): MaxIdleConns / MaxOpenConns — تتحكم في كائنات httpConnect
  • الطبقة 2 (النقل): HttpMaxConnsPerHost — تتحكم في اتصالات TCP الأساسية
يملك البروتوكول Native تعيينًا بسيطًا بنسبة 1:1، ويتجاهل HttpMaxConnsPerHost.

الاتصال المتقدم


معلومات العميل


إعدادات خادم ClickHouse

إعدادات شائعة:

خيارات الاستعلام على مستوى Context

يمكن ضبطها لكل استعلام باستخدام clickhouse.Context():
سلوك المهلة المرتبطة بالسياقإذا كانت للسياق مهلة نهائية > 1s، فسيُضبط max_execution_time تلقائيًا على seconds_remaining + 5. ويحلّ هذا محل أي قيمة مُعيّنة يدويًا.

خيارات Batch

تُمرَّر إلى PrepareBatch(). الاستيراد: github.com/ClickHouse/clickhouse-go/v2/lib/driver.

جداول للرجوع السريع

توصيات تحديد حجم مجمع الاتصالات

توصيات timeout

مرجع سريع لمعلمات DSN


استكشاف الأخطاء وإصلاحها

استُنفِد مجمع الاتصالات: “acquire conn timeout”

السبب: استُنفِد مجمع الاتصالات — فجميع اتصالات MaxOpenConns قيد الاستخدام، ولم تصبح أيٌّ منها متاحة خلال المهلة DialTimeout. الحل جرّب الخطوات التالية بالترتيب، وشخِّص السبب الجذري قبل ضبط الإعدادات:
  1. تحقّق من وجود استعلامات طويلة التشغيل تحتفظ بالاتصالات: SELECT query_id, elapsed FROM system.processes ORDER BY elapsed DESC. إذا وُجدت، فابدأ بمعالجة الاستعلامات البطيئة أولًا.
  2. إذا كنت تشغّل دفعات طويلة العمر (دقائق/ساعات بين PrepareBatch() وSend())، فاستخدم WithReleaseConnection() لإعادة الاتصال إلى مجمع الاتصالات مع بقاء الدفعة مفتوحة.
  3. زِد MaxOpenConns ليتوافق مع مستوى التزامن المرصود.
  4. زِد DialTimeout فقط إذا كانت الاندفاعات المفاجئة في الحمل متوقعة، وكان انتظار الحصول على اتصال هو عنق الزجاجة الفعلي.

أخطاء مهلة القراءة وإعادة تعيين الاتصال

السبب: تم تجاوز ReadTimeout أثناء انتظار استجابة من الخادم، أو أُغلِق الاتصال من جهة الخادم أو الشبكة. الحل:
  • زِد قيمة ReadTimeout للاستعلامات طويلة التنفيذ
  • استخدم context deadlines للتحكم في المهلة لكل استعلام
  • تحقّق من حدود max_execution_time على جهة خادم ClickHouse

”Code: 516. Authentication failed”

السبب: اسم المستخدم أو كلمة المرور غير صحيحَين، أو أن المستخدم غير موجود. الحل:
  • تحقّق من بيانات الاعتماد في جدول system.users
  • تحقّق من عدم وجود مشكلات في ترميز URL للأحرف الخاصة في كلمات مرور DSN
  • تأكّد من أن المستخدم لديه حق الوصول إلى قاعدة البيانات المحددة

أخطاء شهادة TLS

الزيادة التدريجية في استهلاك الذاكرة

السبب: تراكم مخازن مؤقتة كبيرة لاتصالات غير النشطة. الحل:
  • اضبط FreeBufOnConnRelease: true في البيئات محدودة الذاكرة
  • قلّل MaxIdleConns للحد من الاتصالات غير النشطة
  • قلّل MaxCompressionBuffer إذا كنت تستخدم الضغط
  • خفّض ConnMaxLifetime لتجديد الاتصالات بوتيرة أكثر تكرارًا
آخر تعديل في ١ يوليو ٢٠٢٦