ClickHouse/dbms/tests/performance/system_numbers.xml

73 lines
6.4 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<test>
<name>system_numbers</name>
<type>once</type>
<stop_conditions>
<any_of>
<!-- This is only for infinite running query. -->
<average_speed_not_changing_for_ms>1000</average_speed_not_changing_for_ms>
<total_time_ms>10000</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>
<query>SELECT count() FROM system.numbers_mt WHERE NOT ignore(rand())</query>
<!-- 10. Некриптографическая хэш-функция для целых чисел 64bit -> 64bit. -->
<query>SELECT count() FROM system.numbers WHERE NOT ignore(intHash64(number))</query>
<query>SELECT count() FROM system.numbers_mt WHERE NOT ignore(intHash64(number))</query>
<!-- 11. Некриптографическая хэш-функция для целых чисел 64bit -> 32bit. -->
<query>SELECT count() FROM system.numbers WHERE NOT ignore(intHash32(number))</query>
<query>SELECT count() FROM system.numbers_mt WHERE NOT ignore(intHash32(number))</query>
<!-- 12. Преобразование целого числа в строку в десятичном виде. -->
<query>SELECT count() FROM system.numbers WHERE NOT ignore(toString(number))</query>
<query>SELECT count() FROM system.numbers_mt WHERE NOT ignore(toString(number))</query>
<!-- 13. Преобразование целого числа в строку путём копирования куска памяти. -->
<query>SELECT count() FROM system.numbers WHERE NOT ignore(reinterpretAsString(number))</query>
<query>SELECT count() FROM system.numbers_mt WHERE NOT ignore(reinterpretAsString(number))</query>
<!-- 26. Целочисленное деление на константу. Используется библиотека libdivide. -->
<query>SELECT count() FROM system.numbers WHERE NOT ignore(number / 7)</query>
<query>SELECT count() FROM system.numbers_mt WHERE NOT ignore(number / 7)</query>
<!-- 27. Целочисленное деление на константу. -->
<query>SELECT count() FROM system.numbers WHERE NOT ignore(number % 7)</query>
<query>SELECT count() FROM system.numbers_mt WHERE NOT ignore(number % 7)</query>
<!-- 28. Целочисленное деление на константу. -->
<query>SELECT count() FROM system.numbers WHERE NOT ignore(number % 34908756)</query>
<query>SELECT count() FROM system.numbers_mt WHERE NOT ignore(number % 34908756)</query>
<!-- 29. Lookup-таблица, помещающаяся в L2-кэш. -->
<query>SELECT number % 1000 AS k, count() FROM system.numbers GROUP BY k</query>
<query>SELECT number % 1000 AS k, count() FROM system.numbers_mt GROUP BY k</query>
<!-- 30. Хэш-таблица, помещающаяся в L3-кэш. -->
<query>SELECT number % 100000 AS k, count() FROM system.numbers GROUP BY k</query>
<query>SELECT number % 100000 AS k, count() FROM system.numbers_mt GROUP BY k</query>
<!-- 31. Хэш-таблица, наверное помещающаяся в L3-кэш. -->
<query>SELECT number % 1000000 AS k, count() FROM system.numbers GROUP BY k</query>
<query>SELECT number % 1000000 AS k, count() FROM system.numbers_mt GROUP BY k</query>
<!-- 32. Хэш-таблица, не помещающаяся в L3-кэш. -->
<query>SELECT number % 10000000 AS k, count() FROM system.numbers GROUP BY k</query>
<query>SELECT number % 10000000 AS k, count() FROM system.numbers_mt GROUP BY k</query>
<!-- 33. Хэш-таблица, требующая кучу оперативки. Возможны интересные эффекты. -->
<query>SELECT number % 500000000 AS k, count() FROM system.numbers GROUP BY k</query>
<query>SELECT number % 500000000 AS k, count() FROM system.numbers_mt 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>