-
تأكد من أن جهازك المضيف يستوفي المتطلبات المسبقة اللازمة لـ QPL
-
يكون deflate_qpl ممكّنًا افتراضيًا أثناء البناء باستخدام cmake. إذا غيّرته عن طريق الخطأ، فيُرجى التحقق مجددًا من علامة البناء: ENABLE_QPL=1
-
للاطلاع على المتطلبات العامة، يُرجى الرجوع إلى إرشادات البناء العامة الخاصة بـ ClickHouse
قائمة الملفات
تقدّم المجلدات benchmark_sample ضمن qpl-cmake مثالًا على تشغيل اختبار الأداء باستخدام نصوص بايثون البرمجية:
يحتوي client_scripts على نصوص بايثون البرمجية لتشغيل اختبار أداء نموذجي، على سبيل المثال:
client_stressing_test.py: نص بايثون برمجي لاختبار الضغط على الاستعلامات مع [1~4] مثيلات خادم.queries_ssb.sql: يسرد هذا الملف جميع الاستعلامات الخاصة بـ Star Schema Benchmarkallin1_ssb.sh: ينفّذ نص shell البرمجي هذا سير عمل اختبار الأداء الكل في واحد تلقائيًا.
يعني database_files أنه سيخزّن ملفات قاعدة البيانات وفقًا لـ codec lz4/deflate/zstd.
شغّل الاختبار المعياري تلقائيًا على مخطط النجمة:
$ cd ./benchmark_sample/client_scripts
$ sh run_ssb.shبعد اكتمال العملية، يُرجى التحقق من جميع النتائج في هذا المجلد:./output/
في حال حدوث أي إخفاق، يُرجى تشغيل الاختبار المعياري يدويًا كما هو موضح في الأقسام أدناه.
التعريف
[CLICKHOUSE_EXE] يشير إلى مسار الملف التنفيذي لـ ClickHouse.
البيئة
- CPU: Sapphire Rapid
- راجع متطلبات النظام لـ QPL لمعرفة متطلبات نظام التشغيل
- راجع إعداد المسرّع لمعرفة إعداد IAA
- ثبّت وحدات بايثون:
pip3 install clickhouse_driver numpy[فحص ذاتي لـ IAA]
$ accel-config list | grep -P 'iax|state'المخرجات المتوقعة ستكون على النحو التالي:
"dev":"iax1",
"state":"enabled",
"state":"enabled",إذا لم يظهر أي ناتج، فهذا يعني أن IAA ليس جاهزًا للعمل. يُرجى التحقق من إعداد IAA مرة أخرى.
توليد البيانات الخام
$ cd ./benchmark_sample
$ mkdir rawdata_dir && cd rawdata_dirاستخدم dbgen لإنشاء بيانات تضم 100 مليون صف باستخدام المعلمة التالية:
-s 20
يُتوقع إنشاء ملفات مثل *.tbl ضمن ./benchmark_sample/rawdata_dir/ssb-dbgen:
إعداد قاعدة البيانات
هيّئ قاعدة البيانات باستخدام خوارزمية الضغط LZ4
$ cd ./database_dir/lz4
$ [CLICKHOUSE_EXE] server -C config_lz4.xml >&/dev/null&
$ [CLICKHOUSE_EXE] clientهنا ينبغي أن ترى الرسالة Connected to ClickHouse server في وحدة التحكّم، ما يعني أن العميل نجح في إعداد اتصال مع الخادم.
أكمل الخطوات الثلاث أدناه المذكورة في Star Schema Benchmark
- إنشاء الجداول في ClickHouse
- إدراج البيانات. ينبغي هنا استخدام
./benchmark_sample/rawdata_dir/ssb-dbgen/*.tblكبيانات إدخال. - تحويل "star schema" إلى مخطط "flat schema" غير مُطبَّع
أعِد إعداد قاعدة البيانات باستخدام codec IAA Deflate
$ cd ./database_dir/deflate
$ [CLICKHOUSE_EXE] server -C config_deflate.xml >&/dev/null&
$ [CLICKHOUSE_EXE] clientأكمل الخطوات الثلاث نفسها كما في lz4 أعلاه
أعِدّ قاعدة البيانات باستخدام ترميز ZSTD
$ cd ./database_dir/zstd
$ [CLICKHOUSE_EXE] server -C config_zstd.xml >&/dev/null&
$ [CLICKHOUSE_EXE] clientأكمل ثلاث خطوات كما هو موضح لـ lz4 أعلاه
[self-check]
لكل codec (lz4/zstd/deflate)، يُرجى تنفيذ الاستعلام أدناه للتأكد من إنشاء قواعد البيانات بنجاح:
SELECT count() FROM lineorder_flatيُفترض أن تظهر لك المخرجات التالية:
┌[فحص ذاتي لترميز IAA Deflate]
عند تنفيذ أول عملية إدراج أو استعلام من العميل، من المتوقع أن يطبع خادم ClickHouse هذا السجل في وحدة التحكم:
Hardware-assisted DeflateQpl codec is ready!إذا لم تعثر على هذا مطلقًا، لكن ظهر لك سجل آخر كما يلي:
Initialization of hardware-assisted DeflateQpl codec failedهذا يعني أن أجهزة IAA غير جاهزة، ويجب عليك التحقق من إعدادات IAA مرة أخرى.
اختبار الأداء باستخدام مثيل واحد
- قبل بدء اختبار الأداء، يُرجى تعطيل C6 وضبط حاكم تردد CPU على
performance
$ cpupower idle-set -d 3
$ cpupower frequency-set -g performance- لإزالة تأثير ربط الذاكرة عبر المقابس، نستخدم
numactlلربط الخادم بمقبس واحد والعميل بمقبس آخر. - يعني المثيل الواحد خادمًا واحدًا متصلًا بعميل واحد
شغّل الآن الاختبار المعياري لـ LZ4/Deflate/ZSTD على التوالي:
LZ4:
$ cd ./database_dir/lz4
$ numactl -m 0 -N 0 [CLICKHOUSE_EXE] server -C config_lz4.xml >&/dev/null&
$ cd ./client_scripts
$ numactl -m 1 -N 1 python3 client_stressing_test.py queries_ssb.sql 1 > lz4.logضغط IAA:
$ cd ./database_dir/deflate
$ numactl -m 0 -N 0 [CLICKHOUSE_EXE] server -C config_deflate.xml >&/dev/null&
$ cd ./client_scripts
$ numactl -m 1 -N 1 python3 client_stressing_test.py queries_ssb.sql 1 > deflate.logZSTD:
$ cd ./database_dir/zstd
$ numactl -m 0 -N 0 [CLICKHOUSE_EXE] server -C config_zstd.xml >&/dev/null&
$ cd ./client_scripts
$ numactl -m 1 -N 1 python3 client_stressing_test.py queries_ssb.sql 1 > zstd.logالآن يجب أن تظهر ثلاثة سجلات كما هو متوقع:
lz4.log
deflate.log
zstd.logكيفية التحقق من مقاييس الأداء:
نركّز على QPS، يُرجى البحث عن الكلمة المفتاحية: QPS_Final ثم جمع الإحصاءات
القياس المعياري باستخدام مثيلات متعددة
- لتقليل أثر القيود المرتبطة بالذاكرة عند استخدام عدد كبير جدًا من الخيوط، نوصي بإجراء القياس المعياري باستخدام مثيلات متعددة.
- تعني المثيلات المتعددة وجود عدة خوادم (2 أو 4) يتصل كلٌّ منها بالعميل المقابل له.
- يجب تقسيم الأنوية في socket واحد بالتساوي وتخصيصها للخوادم كلٌّ على حدة.
- عند استخدام مثيلات متعددة، يجب إنشاء مجلد جديد لكل codec وإدراج مجموعة البيانات باتباع خطوات مشابهة لخطوات المثيل الواحد.
يوجد اختلافان:
- من جهة العميل، تحتاج إلى تشغيل ClickHouse باستخدام المنفذ المخصص أثناء إنشاء الجدول وإدراج البيانات.
- من جهة الخادم، تحتاج إلى تشغيل ClickHouse باستخدام ملف xml config المحدد الذي جرى تعيين المنفذ فيه. وقد جرى توفير جميع ملفات xml config المخصصة للمثيلات المتعددة ضمن ./server_config.
نفترض هنا وجود 60 نواة لكل socket، ونأخذ مثيلين على سبيل المثال. شغّل الخادم للمثيل الأول LZ4:
$ cd ./database_dir/lz4
$ numactl -C 0-29,120-149 [CLICKHOUSE_EXE] server -C config_lz4.xml >&/dev/null&ZSTD:
$ cd ./database_dir/zstd
$ numactl -C 0-29,120-149 [CLICKHOUSE_EXE] server -C config_zstd.xml >&/dev/null&IAA Deflate:
$ cd ./database_dir/deflate
$ numactl -C 0-29,120-149 [CLICKHOUSE_EXE] server -C config_deflate.xml >&/dev/null&[شغّل الخادم للمثيل الثاني]
LZ4:
$ cd ./database_dir && mkdir lz4_s2 && cd lz4_s2
$ cp ../../server_config/config_lz4_s2.xml ./
$ numactl -C 30-59,150-179 [CLICKHOUSE_EXE] server -C config_lz4_s2.xml >&/dev/null&ZSTD:
$ cd ./database_dir && mkdir zstd_s2 && cd zstd_s2
$ cp ../../server_config/config_zstd_s2.xml ./
$ numactl -C 30-59,150-179 [CLICKHOUSE_EXE] server -C config_zstd_s2.xml >&/dev/null&IAA Deflate:
$ cd ./database_dir && mkdir deflate_s2 && cd deflate_s2
$ cp ../../server_config/config_deflate_s2.xml ./
$ numactl -C 30-59,150-179 [CLICKHOUSE_EXE] server -C config_deflate_s2.xml >&/dev/null&إنشاء الجداول && إدراج البيانات في المثيل الثاني
إنشاء الجداول:
$ [CLICKHOUSE_EXE] client -m --port=9001 إدخال البيانات:
$ [CLICKHOUSE_EXE] client --query "INSERT INTO [TBL_FILE_NAME] FORMAT CSV" < [TBL_FILE_NAME].tbl --port=9001- يمثّل [TBL_FILE_NAME] اسم ملف مُسمّى وفقًا للتعبير النمطي: *. tbl ضمن
./benchmark_sample/rawdata_dir/ssb-dbgen. - يشير
--port=9001إلى المنفذ المخصّص لمثيل الخادم، وهو معرّف أيضًا في config_lz4_s2.xml/config_zstd_s2.xml/config_deflate_s2.xml. ولإضافة المزيد من المثيلات، يجب استبداله بالقيمة 9002/9003، التي تشير إلى المثيلين s3/s4 على التوالي. وإذا لم تُعيّنه، فسيكون المنفذ 9000 افتراضيًا، وهو مستخدم بالفعل من قِبل المثيل الأول.
قياس الأداء باستخدام مثيلين
LZ4:
$ cd ./database_dir/lz4
$ numactl -C 0-29,120-149 [CLICKHOUSE_EXE] server -C config_lz4.xml >&/dev/null&
$ cd ./database_dir/lz4_s2
$ numactl -C 30-59,150-179 [CLICKHOUSE_EXE] server -C config_lz4_s2.xml >&/dev/null&
$ cd ./client_scripts
$ numactl -m 1 -N 1 python3 client_stressing_test.py queries_ssb.sql 2 > lz4_2insts.logZSTD:
$ cd ./database_dir/zstd
$ numactl -C 0-29,120-149 [CLICKHOUSE_EXE] server -C config_zstd.xml >&/dev/null&
$ cd ./database_dir/zstd_s2
$ numactl -C 30-59,150-179 [CLICKHOUSE_EXE] server -C config_zstd_s2.xml >&/dev/null&
$ cd ./client_scripts
$ numactl -m 1 -N 1 python3 client_stressing_test.py queries_ssb.sql 2 > zstd_2insts.logضغط deflate باستخدام IAA
$ cd ./database_dir/deflate
$ numactl -C 0-29,120-149 [CLICKHOUSE_EXE] server -C config_deflate.xml >&/dev/null&
$ cd ./database_dir/deflate_s2
$ numactl -C 30-59,150-179 [CLICKHOUSE_EXE] server -C config_deflate_s2.xml >&/dev/null&
$ cd ./client_scripts
$ numactl -m 1 -N 1 python3 client_stressing_test.py queries_ssb.sql 2 > deflate_2insts.logهنا تشير الوسيطة الأخيرة: 2 في client_stressing_test.py إلى عدد المثيلات. ولزيادة عدد المثيلات، عليك استبدالها بالقيمة 3 أو 4. يدعم هذا البرنامج النصي ما يصل إلى 4 مثيلات/
الآن ينبغي أن تظهر ثلاثة سجلات كما هو متوقع:
lz4_2insts.log
deflate_2insts.log
zstd_2insts.logكيفية التحقق من مقاييس الأداء:
نركّز على QPS، يُرجى البحث عن الكلمة المفتاحية: QPS_Final وجمع الإحصاءات
إعداد اختبار الأداء لأربعة مثيلات مماثل لإعداد المثيلين المذكورين أعلاه. نوصي باستخدام بيانات اختبار الأداء الخاصة بمثيلين بوصفها التقرير النهائي للمراجعة.
نصائح
في كل مرة قبل تشغيل ClickHouse server جديد، يُرجى التأكد من عدم وجود أي عملية ClickHouse تعمل في الخلفية، ثم التحقق منها وإنهاء العملية القديمة:
$ ps -aux| grep clickhouse
$ kill -9 [PID]بمقارنة قائمة الاستعلامات في ./client_scripts/queries_ssb.sql مع Star Schema Benchmark الرسمي، ستجد أن 3 استعلامات غير مشمولة: Q1.2/Q1.3/Q3.4 . ويرجع ذلك إلى أن نسبة استخدام CPU في هذه الاستعلامات منخفضة جدًا (< 10%)، ما يعني أنها لا تُبرز فروق الأداء.