Тестирање перформанси аналитичких упита у ПостгреСКЛ, ЦлицкХоусе и цлицкхоуседб_фдв (ПостгреСКЛ)

У овој студији, желео сам да видим каква побољшања перформанси могу да се постигну коришћењем ЦлицкХоусе извора података уместо ПостгреСКЛ-а. Знам предности продуктивности које добијам од коришћења ЦлицкХоусе-а. Да ли ће се ове погодности наставити ако приступим ЦлицкХоусе-у из ПостгреСКЛ-а користећи Фореигн Дата Враппер (ФДВ)?

Проучавана окружења базе података су ПостгреСКЛ в11, цлицкхоуседб_фдв и ЦлицкХоусе база података. На крају, од ПостгреСКЛ в11 ћемо покретати различите СКЛ упите који се усмеравају преко нашег цлицкхоуседб_фдв до ЦлицкХоусе базе података. Затим ћемо видети какве су перформансе ФДВ-а у поређењу са истим упитима који се покрећу у матичном ПостгреСКЛ-у и матичном ЦлицкХоусе-у.

Цлицкхоусе Датабасе

ЦлицкХоусе је систем за управљање базом података са колонама отвореног кода који може постићи перформансе 100-1000 пута брже од традиционалних приступа бази података, способан да обради више од милијарду редова за мање од секунде.

Цлицкхоуседб_фдв

цлицкхоуседб_фдв – Екстерни омотач података за ЦлицкХоусе базу података, или ФДВ, је пројекат отвореног кода компаније Перцона. Ево везе до ГитХуб спремишта пројекта.

У марту сам написао блог који вам говори више о нашем ФДВ-у.

Као што ћете видети, ово обезбеђује ФДВ за ЦлицкХоусе који омогућава СЕЛЕЦТ фром и ИНСЕРТ ИНТО, ЦлицкХоусе базу података са ПостгреСКЛ в11 сервера.

ФДВ подржава напредне функције као што су агрегат и спајање. Ово значајно побољшава перформансе коришћењем ресурса удаљеног сервера за ове ресурсно интензивне операције.

Бенцхмарк окружење

  • Супермикро сервер:
    • Интел® Ксеон® ЦПУ Е5-2683 в3 на 2.00 ГХз
    • 2 утичнице / 28 језгара / 56 нити
    • Меморија: КСНУМКСГБ РАМ-а
    • Складиштење: Самсунг СМ863 1.9ТБ Ентерприсе ССД
    • Систем датотека: ект4/кфс
  • ОС: Линук смбладе01 4.15.0-42-генерички #45~16.04.1-Убунту
  • ПостгреСКЛ: верзија 11

Бенцхмарк тестови

Уместо да користимо неки машински генерисани скуп података за овај тест, користили смо податке „Продуктивност према временском извештајном времену оператера“ од 1987. до 2018. године. Можете приступити подацима користећи нашу скрипту која је доступна овде.

Величина базе података је 85 ГБ, пружајући једну табелу од 109 колона.

Бенцхмарк Куериес

Ево упита које сам користио да упоредим ЦлицкХоусе, цлицкхоуседб_фдв и ПостгреСКЛ.

Q#
Упит садржи агрегате и групе по

Q1
СЕЛЕЦТ ДаиОфВеек, цоунт(*) АС ц ФРОМ онтиме ВХЕРЕ Година >= 2000 И Година <= 2008 ГРОУП БИ ДаиОфВеек ОРДЕР БИ ц ДЕСЦ;

Q2
СЕЛЕЦТ ДаиОфВеек, цоунт(*) АС ц ФРОМ онтиме ВХЕРЕ ДепДелаи>10 АНД Иеар >= 2000 АНД Иеар <= 2008 ГРОУП БИ ДаиОфВеек ОРДЕР БИ ц ДЕСЦ;

Q3
СЕЛЕЦТ Оригин, цоунт(*) АС ц ФРОМ онтиме ВХЕРЕ ДепДелаи>10 АНД Иеар >= 2000 АНД Иеар <= 2008 ГРОУП БИ Оригин ОРДЕР БИ ц ДЕСЦ ЛИМИТ 10;

Q4
СЕЛЕЦТ Царриер, цоунт() ФРОМ онтиме ВХЕРЕ ДепДелаи>10 АНД Иеар = 2007 ГРУПА ПО Превознику ОРДЕР БИ цоунт() ДЕСЦ;

Q5
СЕЛЕЦТ а.Носилац, ц, ц2, ц1000/ц2 као ц3 ФРОМ ( СЕЛЕЦТ Царриер, цоунт() КАО ц ОД онтиме ВХЕРЕ ДепДелаи>10 И Година=2007 ГРУПА ПО Превознику ) а УНУТРАШЊЕ ПРИДРУЖЕЊЕ ( СЕЛЕЦТ Царриер,цоунт(*) АС ц2 ФРОМ онтиме ВХЕРЕ Иеар=2007 ГРУПА ПО Превознику)б на а.Превозник=б.Превозник ОРДЕР БИ ц3 ДЕСЦ;

Q6
СЕЛЕЦТ а.Носилац, ц, ц2, ц1000/ц2 као ц3 ФРОМ ( СЕЛЕЦТ Царриер, цоунт() АС ц ФРОМ онтиме ВХЕРЕ ДепДелаи>10 АНД Иеар >= 2000 АНД Иеар <= 2008 ГРОУП БИ Царриер) а ИННЕР ЈОИН ( СЕЛЕЦТ Царриер, цоунт(*) АС ц2 ФРОМ онтиме ГДЕ Година >= 2000 И Година <= 2008 ГРУПА ПО Носилац ) б на а.Носилац=б.Носилац ОРДЕР БИ ц3 ДЕСЦ;

Q7
СЕЛЕЦТ Царриер, авг(ДепДелаи) * 1000 АС ц3 ФРОМ онтиме ВХЕРЕ Година >= 2000 И Година <= 2008 ГРУПА ПО Превознику;

Q8
СЕЛЕЦТ Иеар, авг(ДепДелаи) ФРОМ онтиме ГРОУП БИ Иеар;

Q9
изаберите Година, цоунт(*) као ц1 из онтиме групе по години;

ККСНУМКС
СЕЛЕЦТ авг(цнт) ФРОМ (СЕЛЕЦТ Иеар,Монтх,цоунт(*) АС цнт ФРОМ онтиме ВХЕРЕ ДепДел15=1 ГРОУП БИ Иеар,Монтх) а;

ККСНУМКС
изаберите авг(ц1) из (изаберите Иеар,Монтх,цоунт(*) као ц1 из онтиме групе по Иеар,Монтх) а;

ККСНУМКС
СЕЛЕЦТ ОригинЦитиНаме, ДестЦитиНаме, цоунт(*) АС ц ФРОМ онтиме ГРОУП БИ ОригинЦитиНаме, ДестЦитиНаме ОРДЕР БИ ц ДЕСЦ ЛИМИТ 10;

ККСНУМКС
СЕЛЕЦТ ОригинЦитиНаме, цоунт(*) АС ц ФРОМ онтиме ГРОУП БИ ОригинЦитиНаме ОРДЕР БИ ц ДЕСЦ ЛИМИТ 10;

Упит садржи придруживања

ККСНУМКС
ИЗАБЕРИТЕ а.Годину, ц1/ц2 ИЗ ( изаберите годину, број ()1000 као ц1 од онтиме ВХЕРЕ ДепДелаи>10 ГРОУП БИ Иеар) а ИННЕР ЈОИН (изаберите годину, рачунајте(*) као ц2 од онтиме ГРОУП БИ Иеар ) б на а.Иеар=б.Иеар ОРДЕР БИ а.Иеар;

ККСНУМКС
ИЗАБЕРИТЕ а.”Година”, ц1/ц2 ФРОМ ( изаберите “Година”, број ()1000 као ц1 ФРОМ фонттиме ВХЕРЕ “ДепДелаи”>10 ГРОУП БИ “Иеар”) а ИННЕР ЈОИН (изаберите “Иеар”, рачунајте(*) као ц2 ФРОМ фонттиме ГРОУП ПО “Иеар” ) б на а.”Иеар”=б. "Година";

Табела-1: Упити који се користе у бенцхмарк-у

Извршења упита

Ево резултата сваког од упита када се покрећу у различитим поставкама базе података: ПостгреСКЛ са и без индекса, изворни ЦлицкХоусе и цлицкхоуседб_фдв. Време је приказано у милисекундама.

Q#
ПостгреСКЛ
ПостгреСКЛ (индексирано)
ЦлицкХоусе
цлицкхоуседб_фдв

Q1
27920
19634
23
57

Q2
35124
17301
50
80

Q3
34046
15618
67
115

Q4
31632
7667
25
37

Q5
47220
8976
27
60

Q6
58233
24368
55
153

Q7
30566
13256
52
91

Q8
38309
60511
112
179

Q9
20674
37979
31
81

ККСНУМКС
34990
20102
56
148

ККСНУМКС
30489
51658
37
155

ККСНУМКС
39357
33742
186
1333

ККСНУМКС
29912
30709
101
384

ККСНУМКС
54126
39913
124
1364212

ККСНУМКС
97258
30211
245
259

Табела-1: Време потребно за извршавање упита коришћених у бенцхмарк-у

Преглед резултата

Графикон приказује време извршења упита у милисекундама, Кс оса приказује број упита из горњих табела, а И оса приказује време извршења у милисекундама. Приказани су ЦлицкХоусе резултати и подаци преузети из постгреса коришћењем цлицкхоуседб_фдв. Из табеле можете видети да постоји огромна разлика између ПостгреСКЛ и ЦлицкХоусе, али минимална разлика између ЦлицкХоусе и цлицкхоуседб_фдв.

Тестирање перформанси аналитичких упита у ПостгреСКЛ, ЦлицкХоусе и цлицкхоуседб_фдв (ПостгреСКЛ)

Овај графикон показује разлику између ЦлицкхоусеДБ и цлицкхоуседб_фдв. У већини упита, трошкови ФДВ-а нису толико високи и једва да су значајни осим за К12. Овај упит укључује спајања и клаузулу ОРДЕР БИ. Због клаузуле ОРДЕР БИ ГРОУП/БИ, ОРДЕР БИ не пада на ЦлицкХоусе.

У табели 2 видимо временски скок у упитима К12 и К13. Опет, ово је узроковано клаузулом ОРДЕР БИ. Да бих то потврдио, покренуо сам упите К-14 и К-15 са и без клаузуле ОРДЕР БИ. Без ОРДЕР БИ клаузуле време завршетка је 259мс, а са ОРДЕР БИ клаузулом је 1364212. Да бих отклонио грешке у овом упиту, објашњавам оба упита и ево резултата објашњења.

П15: Без клаузуле ОРДЕР БИ

bm=# EXPLAIN VERBOSE SELECT a."Year", c1/c2 
     FROM (SELECT "Year", count(*)*1000 AS c1 FROM fontime WHERE "DepDelay" > 10 GROUP BY "Year") a
     INNER JOIN(SELECT "Year", count(*) AS c2 FROM fontime GROUP BY "Year") b ON a."Year"=b."Year";

П15: Упит без клаузуле ОРДЕР БИ

QUERY PLAN                                                      
Hash Join  (cost=2250.00..128516.06 rows=50000000 width=12)  
Output: fontime."Year", (((count(*) * 1000)) / b.c2)  
Inner Unique: true   Hash Cond: (fontime."Year" = b."Year")  
->  Foreign Scan  (cost=1.00..-1.00 rows=100000 width=12)        
Output: fontime."Year", ((count(*) * 1000))        
Relations: Aggregate on (fontime)        
Remote SQL: SELECT "Year", (count(*) * 1000) FROM "default".ontime WHERE (("DepDelay" > 10)) GROUP BY "Year"  
->  Hash  (cost=999.00..999.00 rows=100000 width=12)        
Output: b.c2, b."Year"        
->  Subquery Scan on b  (cost=1.00..999.00 rows=100000 width=12)              
Output: b.c2, b."Year"              
->  Foreign Scan  (cost=1.00..-1.00 rows=100000 width=12)                    
Output: fontime_1."Year", (count(*))                    
Relations: Aggregate on (fontime)                    
Remote SQL: SELECT "Year", count(*) FROM "default".ontime GROUP BY "Year"(16 rows)

П14: Упит са клаузулом ОРДЕР БИ

bm=# EXPLAIN VERBOSE SELECT a."Year", c1/c2 FROM(SELECT "Year", count(*)*1000 AS c1 FROM fontime WHERE "DepDelay" > 10 GROUP BY "Year") a 
     INNER JOIN(SELECT "Year", count(*) as c2 FROM fontime GROUP BY "Year") b  ON a."Year"= b."Year" 
     ORDER BY a."Year";

П14: План упита са клаузулом ОРДЕР БИ

QUERY PLAN 
Merge Join  (cost=2.00..628498.02 rows=50000000 width=12)   
Output: fontime."Year", (((count(*) * 1000)) / (count(*)))   
Inner Unique: true   Merge Cond: (fontime."Year" = fontime_1."Year")   
->  GroupAggregate  (cost=1.00..499.01 rows=1 width=12)        
Output: fontime."Year", (count(*) * 1000)         
Group Key: fontime."Year"         
->  Foreign Scan on public.fontime  (cost=1.00..-1.00 rows=100000 width=4)               
Remote SQL: SELECT "Year" FROM "default".ontime WHERE (("DepDelay" > 10)) 
            ORDER BY "Year" ASC   
->  GroupAggregate  (cost=1.00..499.01 rows=1 width=12)         
Output: fontime_1."Year", count(*)         Group Key: fontime_1."Year"         
->  Foreign Scan on public.fontime fontime_1  (cost=1.00..-1.00 rows=100000 width=4) 
              
Remote SQL: SELECT "Year" FROM "default".ontime ORDER BY "Year" ASC(16 rows)

Излаз

Резултати ових експеримената показују да ЦлицкХоусе нуди заиста добре перформансе, а цлицкхоуседб_фдв нуди предности перформанси ЦлицкХоусе-а из ПостгреСКЛ-а. Иако постоје одређени трошкови при коришћењу цлицкхоуседб_фдв, они су занемарљиви и упоредиви са учинком који се постиже изворним покретањем у бази података ЦлицкХоусе. Ово такође потврђује да фдв у ПостгреСКЛ-у даје одличне резултате.

Телеграм ћаскање преко Цлицкхоусе-а https://t.me/clickhouse_ru
Телеграм ћаскање користећи ПостгреСКЛ https://t.me/pgsql

Извор: ввв.хабр.цом

Додај коментар