clickhouse-go v2.x. للاطلاع على دليل يتضمن أمثلة شيفرة، راجع الإعدادات.
تعليقات توضيحية للإصدارتُميَّز الخيارات التي أُضيفت في
clickhouse-go v2.35.0 أو الإصدارات الأحدث بوسم (منذ vX.Y.Z) بجانب وصفها. أما الخيارات التي لا تتضمن وسم “منذ”، فهي متاحة منذ v2.0 وموجودة في جميع الإصدارات المدعومة.كيفية تعيين الخيارات
عند تداخل المستويات، تكون الأولوية للمستوى الأكثر تحديدًا: الدفعة > الاستعلام > الاتصال. بالنسبة إلى
Settings، تُدمج المفاتيح على مستوى الاستعلام مع المفاتيح على مستوى الاتصال، وتُحسم الأفضلية لمستوى الاستعلام عند التعارض.
عبر struct Options:
خيارات الاتصال
البروتوكول والاتصال
المصادقة
المهلات الزمنية
تُوضَع خدمة ClickHouse Cloud التي ظلت خاملة في حالة إيقاف مؤقت، ثم تستيقظ عند أول اتصال وارد. تستغرق عملية الاستيقاظ عادةً بضع عشرات من الثواني، وخلال هذه الفترة يظل طلب الاتصال معلّقًا. إذا كانت قيمة
DialTimeout أقل من مدة الاستيقاظ، فسيفشل أول استعلام بعد فترة الخمول بسبب dial timeout بدلًا من أن يُنفَّذ.اضبط DialTimeout على 1m–2m للعملاء الذين قد يكونون أول من يصل إلى خدمة خاملة. والمقابل هو بطء اكتشاف الفشل عند حدوث انقطاع فعلي — إذ يظل طلب الاتصال معلّقًا حتى تنقضي المهلة بالكامل قبل ظهور الخطأ — لذا يُفضَّل قصر المهلة الأعلى على الاتصال الأول، أو استخدام 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 مجمّعها الداخلي باستخدام حقول struct Options مباشرةً.الضغط
دعم طريقة الضغط حسب البروتوكول:
TLS
راجع TLS للاطلاع على أمثلة الشيفرة.
تسجيل الأحداث
المخازن المؤقتة والذاكرة
خاص بـ HTTP
تجميع اتصالات HTTP على طبقتينعند استخدام HTTP، توجد مجموعتا اتصالات:
- الطبقة 1 (التطبيق):
MaxIdleConns/MaxOpenConns— تتحكم في كائناتhttpConnect - الطبقة 2 (النقل):
HttpMaxConnsPerHost— تتحكم في اتصالات TCP الأساسية
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.
الحل
جرّب الخطوات التالية بالترتيب، وشخِّص السبب الجذري قبل ضبط الإعدادات:
- تحقّق من وجود استعلامات طويلة التشغيل تحتفظ بالاتصالات:
SELECT query_id, elapsed FROM system.processes ORDER BY elapsed DESC. إذا وُجدت، فابدأ بمعالجة الاستعلامات البطيئة أولًا. - إذا كنت تشغّل دفعات طويلة العمر (دقائق/ساعات بين
PrepareBatch()وSend())، فاستخدمWithReleaseConnection()لإعادة الاتصال إلى مجمع الاتصالات مع بقاء الدفعة مفتوحة. - زِد
MaxOpenConnsليتوافق مع مستوى التزامن المرصود. - زِد
DialTimeoutفقط إذا كانت الاندفاعات المفاجئة في الحمل متوقعة، وكان انتظار الحصول على اتصال هو عنق الزجاجة الفعلي.
أخطاء مهلة القراءة وإعادة تعيين الاتصال
ReadTimeout أثناء انتظار استجابة من الخادم، أو أُغلِق الاتصال من جهة الخادم أو الشبكة.
الحل:
- زِد قيمة
ReadTimeoutللاستعلامات طويلة التنفيذ - استخدم
context deadlinesللتحكم في المهلة لكل استعلام - تحقّق من حدود
max_execution_timeعلى جهة خادم ClickHouse
”Code: 516. Authentication failed”
- تحقّق من بيانات الاعتماد في جدول
system.users - تحقّق من عدم وجود مشكلات في ترميز URL للأحرف الخاصة في كلمات مرور DSN
- تأكّد من أن المستخدم لديه حق الوصول إلى قاعدة البيانات المحددة
أخطاء شهادة TLS
الزيادة التدريجية في استهلاك الذاكرة
- اضبط
FreeBufOnConnRelease: trueفي البيئات محدودة الذاكرة - قلّل
MaxIdleConnsللحد من الاتصالات غير النشطة - قلّل
MaxCompressionBufferإذا كنت تستخدم الضغط - خفّض
ConnMaxLifetimeلتجديد الاتصالات بوتيرة أكثر تكرارًا