mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 08:40:50 +00:00
Add some perf tests
This commit is contained in:
parent
116c889b42
commit
bab4b3b042
62
dbms/tests/performance/simple/system_numbers.xml
Normal file
62
dbms/tests/performance/simple/system_numbers.xml
Normal file
@ -0,0 +1,62 @@
|
||||
<test>
|
||||
<name>wip</name>
|
||||
<type>once</type>
|
||||
<stop_conditions>
|
||||
<any_of>
|
||||
<!-- This is only for infinite running query. -->
|
||||
<average_speed_not_changing_for_ms>10000</average_speed_not_changing_for_ms>
|
||||
<total_time_ms>1000</total_time_ms>
|
||||
</any_of>
|
||||
</stop_conditions>
|
||||
<metrics>
|
||||
<!-- For running one inifinite query -->
|
||||
<max_rows_per_second />
|
||||
<max_bytes_per_second />
|
||||
<avg_rows_per_second />
|
||||
<avg_bytes_per_second />
|
||||
</metrics>
|
||||
|
||||
<!--
|
||||
9. Генератор случайных чисел.
|
||||
Функция rand представляет собой linear congruential generator (то есть, целочисленное умножение на константу и сложение с константой), возвращающий 32-битные целые случайные числа.
|
||||
Она реализована так, чтобы несколько потоков случайных чисел вычислялось независимо, и компилятор мог векторизовать цикл.
|
||||
Тест, как и многие другие ниже, представлен в виде запроса из таблицы system.numbers. Чтение из этой таблицы осуществляется в один поток, и эта таблица при чтении выдаёт подряд почти все натуральные числа.
|
||||
То есть, этот запрос представляет собой необычным образом написанный бесконечный цикл.
|
||||
Мы запускаем этот запрос и наблюдаем, с какой скоростью он выполняется. Через несколько секунд, когда скорость стабилизируется, прерываем выполнение.
|
||||
В качестве скорости выполнения запроса указывается количество обработанных исходных (прочитанных из таблицы) данных в единицу времени.
|
||||
Например, в таблице system.numbers читаемые нами данные - это числа типа UInt64 (8 байт). Если мы обрабатываем миллиард таких чисел в секунду, то отобразится скорость - 8 GB/sec.
|
||||
-->
|
||||
<query>SELECT count() FROM system.numbers WHERE NOT ignore(rand())</query>
|
||||
<!-- 10. Некриптографическая хэш-функция для целых чисел 64bit -> 64bit. -->
|
||||
<query>SELECT count() FROM system.numbers WHERE NOT ignore(intHash64(number))</query>
|
||||
<!-- 11. Некриптографическая хэш-функция для целых чисел 64bit -> 32bit. -->
|
||||
<query>SELECT count() FROM system.numbers WHERE NOT ignore(intHash32(number))</query>
|
||||
<!-- 12. Преобразование целого числа в строку в десятичном виде. -->
|
||||
<query>SELECT count() FROM system.numbers WHERE NOT ignore(toString(number))</query>
|
||||
<!-- 13. Преобразование целого числа в строку путём копирования куска памяти. -->
|
||||
<query>SELECT count() FROM system.numbers WHERE NOT ignore(reinterpretAsString(number))</query>
|
||||
|
||||
<!-- 26. Целочисленное деление на константу. Используется библиотека libdivide. -->
|
||||
<query>SELECT count() FROM system.numbers WHERE NOT ignore(number / 7)</query>
|
||||
<!-- 27. Целочисленное деление на константу. -->
|
||||
<query>SELECT count() FROM system.numbers WHERE NOT ignore(number % 7)</query>
|
||||
<!-- 28. Целочисленное деление на константу. -->
|
||||
<query>SELECT count() FROM system.numbers WHERE NOT ignore(number % 34908756)</query>
|
||||
<!-- 29. Lookup-таблица, помещающаяся в L2-кэш. -->
|
||||
<query>SELECT number % 1000 AS k, count() FROM system.numbers GROUP BY k</query>
|
||||
<!-- 30. Хэш-таблица, помещающаяся в L3-кэш. -->
|
||||
<query>SELECT number % 100000 AS k, count() FROM system.numbers GROUP BY k</query>
|
||||
<!-- 31. Хэш-таблица, наверное помещающаяся в L3-кэш. -->
|
||||
<query>SELECT number % 1000000 AS k, count() FROM system.numbers GROUP BY k</query>
|
||||
<!-- 32. Хэш-таблица, не помещающаяся в L3-кэш. -->
|
||||
<query>SELECT number % 10000000 AS k, count() FROM system.numbers GROUP BY k</query>
|
||||
<!-- 33. Хэш-таблица, требующая кучу оперативки. Возможны интересные эффекты. -->
|
||||
<query>SELECT number % 500000000 AS k, count() FROM system.numbers GROUP BY k</query>
|
||||
|
||||
|
||||
<!-- 35. Кэш-промахи, осуществляемые из многих процессорных ядер. -->
|
||||
<!-- <query>SELECT number % (intDiv(100000000, {THREADS})) AS k, count() FROM system.numbers_mt GROUP BY k</query> -->
|
||||
<!-- 46. Запрос, требующий много бесполезных копирований. -->
|
||||
<query>SELECT count() FROM system.numbers WHERE NOT ignore(materialize('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') AS s, concat(s,s,s,s,s,s,s,s,s,s) AS t, concat(t,t,t,t,t,t,t,t,t,t) AS u) SETTINGS max_block_size = 1000</query>
|
||||
|
||||
</test>
|
80
dbms/tests/performance/simple/test_hits.xml
Normal file
80
dbms/tests/performance/simple/test_hits.xml
Normal file
@ -0,0 +1,80 @@
|
||||
<test>
|
||||
<name>test.hits misc</name>
|
||||
<type>once</type>
|
||||
<stop_conditions>
|
||||
<any_of>
|
||||
<!-- This is only for infinite running query. -->
|
||||
<average_speed_not_changing_for_ms>10000</average_speed_not_changing_for_ms>
|
||||
<total_time_ms>1000</total_time_ms>
|
||||
</any_of>
|
||||
</stop_conditions>
|
||||
<metrics>
|
||||
<!-- For running one inifinite query -->
|
||||
<max_rows_per_second />
|
||||
<max_bytes_per_second />
|
||||
<avg_rows_per_second />
|
||||
<avg_bytes_per_second />
|
||||
</metrics>
|
||||
<preconditions>
|
||||
<table_exists>test.hits</table_exists>
|
||||
</preconditions>
|
||||
|
||||
<!--
|
||||
14. Некриптографическая хэш-функция для строк небольшой длины.
|
||||
В качестве данных в следующих тестах будут использованы поисковые фразы (SearchPhrase), URL и PageCharset.
|
||||
Строка SearchPhrase непустая только в 6.8% случаев. Средняя длина непустой строки - 47 байт.
|
||||
URL почти всегда непуст и его средняя длина - 77 байт.
|
||||
PageCharset тоже почти всегда непуст, но его средняя длина поменьше - 6.2 байта. -->
|
||||
|
||||
<query>SELECT count() FROM test.hits WHERE NOT ignore(cityHash64(SearchPhrase)) SETTINGS max_threads = 1</query>
|
||||
<!-- 15. Некриптографическая хэш-функция для строк небольшой длины. -->
|
||||
|
||||
<query>SELECT count() FROM test.hits WHERE NOT ignore(farmHash64(SearchPhrase)) SETTINGS max_threads = 1</query>
|
||||
<!-- 16. Некриптографическая хэш-функция для строк небольшой длины. -->
|
||||
<query>SELECT count() FROM test.hits WHERE NOT ignore(metroHash64(SearchPhrase)) SETTINGS max_threads = 1</query>
|
||||
<!-- 17. Криптографическая хэш-функция для строк. -->
|
||||
<query>SELECT count() FROM test.hits WHERE NOT ignore(sipHash64(SearchPhrase)) SETTINGS max_threads = 1</query>
|
||||
<!-- 18. Криптографическая хэш-функция для строк. -->
|
||||
<query>SELECT count() FROM test.hits WHERE NOT ignore(MD5(SearchPhrase)) SETTINGS max_threads = 1</query>
|
||||
<!-- 19. Криптографическая хэш-функция для строк. -->
|
||||
<query>SELECT count() FROM test.hits WHERE NOT ignore(MD5(URL)) SETTINGS max_threads = 1</query>
|
||||
<!-- 20. -->
|
||||
<query>SELECT count() FROM test.hits WHERE NOT ignore(cityHash64(URL)) SETTINGS max_threads = 1</query>
|
||||
<!-- 21. -->
|
||||
<query>SELECT count() FROM test.hits WHERE NOT ignore(sipHash64(URL)) SETTINGS max_threads = 1</query>
|
||||
<!-- 22. -->
|
||||
<query>SELECT count() FROM test.hits WHERE NOT ignore(cityHash64(PageCharset)) SETTINGS max_threads = 1</query>
|
||||
<!-- 23. Поиск подстроки в строке. -->
|
||||
<query>SELECT count() FROM test.hits WHERE URL LIKE '%metrika%' SETTINGS max_threads = 1</query>
|
||||
<!-- 24. Более сложный поиск подстроки в строке. -->
|
||||
<query>SELECT count() FROM test.hits WHERE positionCaseInsensitiveUTF8(URL, 'новости') != 0 SETTINGS max_threads = 1</query>
|
||||
<!-- 25. Регексп. -->
|
||||
<query>SELECT count() FROM test.hits WHERE match(URL, '^https?://(?:www\\.)?metri[kc]a\\.yandex\\.(?:ru|com|com\\.tr|ua|by|kz)/.+?2014') SETTINGS max_threads = 1</query>
|
||||
|
||||
|
||||
<!-- 34. Сложная агрегация. -->
|
||||
<query>SELECT SearchEngineID, SearchPhrase, RegionID FROM test.hits GROUP BY SearchEngineID, SearchPhrase, RegionID ORDER BY count() DESC LIMIT 10 SETTINGS max_threads = 1</query>
|
||||
<!-- 36. Функция для работы с датой и временем. -->
|
||||
<query>SELECT count() FROM test.hits WHERE NOT ignore(toMonday(EventTime)) SETTINGS max_threads = 1</query>
|
||||
<!-- 37. Функция для работы с URL. -->
|
||||
<query>SELECT count() FROM test.hits WHERE NOT ignore(cutQueryString(URL)) SETTINGS max_threads = 1</query>
|
||||
<!-- 38. Разные алгоритмы вычисления квантилей. -->
|
||||
<query>SELECT quantilesIf(0.5, 0.9)(SendTiming, SendTiming > 0) FROM test.hits SETTINGS max_threads = 1</query>
|
||||
<!-- 39. Разные алгоритмы вычисления квантилей. -->
|
||||
<query>SELECT quantilesTimingIf(0.5, 0.9)(SendTiming, SendTiming > 0) FROM test.hits SETTINGS max_threads = 1</query>
|
||||
<!-- 40. Разные алгоритмы вычисления квантилей. -->
|
||||
<query>SELECT quantilesExactIf(0.5, 0.9)(SendTiming, SendTiming > 0) FROM test.hits SETTINGS max_threads = 1</query>
|
||||
<!-- 41. Разные алгоритмы вычисления квантилей. -->
|
||||
<query>SELECT quantilesTDigestIf(0.5, 0.9)(SendTiming, SendTiming > 0) FROM test.hits SETTINGS max_threads = 1</query>
|
||||
<!-- 42. Разные алгоритмы вычисления кардинальности. -->
|
||||
<query>SELECT uniq(UserID) FROM test.hits SETTINGS max_threads = 1</query>
|
||||
<!-- 43. Разные алгоритмы вычисления кардинальности. -->
|
||||
<query>SELECT uniqCombined(UserID) FROM test.hits SETTINGS max_threads = 1</query>
|
||||
<!-- 44. Разные алгоритмы вычисления кардинальности. -->
|
||||
<query>SELECT uniqExact(UserID) FROM test.hits SETTINGS max_threads = 1</query>
|
||||
<!-- 45. Что-то чуть более похожее на реальный запрос. -->
|
||||
<query>SELECT RegionID, uniq(UserID) FROM test.hits GROUP BY RegionID SETTINGS max_threads = 1</query>
|
||||
<!-- 47. Читаем и разжимаем все столбцы, и ничего с ними потом не делаем. -->
|
||||
<query>SELECT count() FROM test.hits WHERE NOT ignore(*) SETTINGS max_threads = 1</query>
|
||||
|
||||
</test>
|
Loading…
Reference in New Issue
Block a user