10 принципов правильного бенчмаркинга баз данных
1 июня 2022 г.На https://db-benchmarks.com/ мы тестируем различные базы данных с открытым исходным кодом и поисковые системы и разрабатываем платформу с открытым исходным кодом, чтобы вы тоже могли это сделать. В этой статье я хотел бы поделиться 10 наиболее важными принципами, которые мы для себя сформулировали и которые помогают нам делать качественные бенчмарки.
- Протестируйте разные базы данных на одном и том же оборудовании. В ряде тестов баз данных я видел, как люди сравнивали конкурентов на разном оборудовании. Например, в тесте [Druid vs Clickhouse vs Rocket] (https://imply.io/blog/druid-nails-cost-efficiency-challenge-against-clickhouse-and-rockset/) говорится: «На самом деле мы хотели сделать тест на том же оборудовании, что и m5.8xlarge, но единственная предварительно подготовленная конфигурация, которая у нас есть для m5.8xlarge, на самом деле является m5d.8xlarge… Вместо этого мы запускаем экземпляр c5.9xlarge». Плохая новость, ребята: когда вы запускаете бенчмарки на другом оборудовании, по крайней мере, вы не можете сказать, что что-то «106,76%» и «103,13%» чего-то другого. Даже при тестировании на одном и том же чистом сервере довольно сложно получить коэффициент вариации ниже 5%. Разница в 3% на разных серверах, скорее всего, может быть проигнорирована. При условии всего этого, как можно убедиться, что окончательный вывод верен?
- Протестируйте с полной очисткой кеша ОС перед каждым тестом. В DB Benchmarks мы специализируемся на тестировании задержки. Мы следим за тем, чтобы какой-то запрос к какой-либо базе данных занимал 117 мс сегодня, завтра и через неделю. Это фундаментальная вещь в платформе, без нее все остальное не имеет значения. Это сложно. Чтобы это произошло, важно убедиться, что при тестировании запроса среда точно такая же, как и в предыдущий раз. Одна из вещей, о которой люди всегда забывают, — это очистка кеша ОС. Если у вас нет шансов, у вас будет часть данных, которые ваш запрос должен прочитать с диска, уже в памяти, что сделает результат нестабильным.
- Измеряйте холодный запуск отдельно. Диски, будь то NVMe или HDD, по-прежнему значительно медленнее, чем оперативная память. Люди, занимающиеся бенчмарками, часто не уделяют ему должного внимания, хотя это важно, особенно для аналитических запросов и аналитических баз данных, где часто могут возникать холодные запросы. Итак, принцип таков: измерять время холодного запуска отдельно. В противном случае вы полностью скроете результаты того, как база данных может обрабатывать ввод-вывод.
- Все внутренние кэши тестируемой базы данных должны быть отключены. Еще одна связанная с этим вещь — отключить внутренние кэши базы данных. В противном случае вы просто будете измерять производительность кэша, что также может иметь смысл для некоторых тестов, но обычно это не то, что вам нужно.
- Во время тестирования не должно быть запущено ничего другого. В противном случае результаты вашего теста могут быть просто очень нестабильными, поскольку вашей базе данных придется конкурировать с другим процессом.
- Вам необходимо перезапустить базу данных перед каждым запросом. В противном случае предыдущие запросы могут по-прежнему влиять на время ответа текущего запроса, несмотря на очистку внутренних кешей.
- Вам нужно дождаться полного прогрева базы данных после ее запуска. В противном случае вы можете как минимум конкурировать с процессом прогрева БД для ввода-вывода, что может сильно испортить результаты вашего теста.
- Протестируйте на фиксированной частоте ЦП. В противном случае, если вы используете регулятор ЦП «по запросу» (который обычно используется по умолчанию), он может легко превратить ваше время отклика 500 мс в 1000+ мс.
- Тестируйте на SSD/NVME, а не на жестком диске. В противном случае, в зависимости от того, где ваши файлы расположены на жестком диске, вы можете получить в 2 раза более низкую / более высокую производительность ввода-вывода (без шуток, в 2 раза), что может сделать как минимум ваш холодный запрос дает неправильные результаты.
- Самое главное: больше повторений и контроль над CV. Это, пожалуй, самая распространенная ошибка в бенчмаркинге латентности: люди запускают запрос 2–3 раза, вычисляют среднее значение и все. В большинстве случаев нескольких попыток недостаточно, при следующем запуске того же запроса можно получить другой результат на 50%.
Но есть способ улучшить и контролировать его: делать больше повторений и контролировать коэффициент вариации. CV — очень хорошая метрика, показывающая, насколько стабильны результаты ваших тестов. Если он выше N%, нельзя сказать, что одна база данных на N% быстрее другой. Так что просто делайте достаточно повторений, пока ваш CV не станет достаточно низким (например, 3%). Если вы так и не достигли этого, значит, вы не сделали все возможное, следуя вышеуказанным принципам.
Я надеюсь, что эта статья поможет вам улучшить ваши тесты. Если вам нужно что-то готовое, загляните на https://db-benchmarks.com/. Это на 100 % бесплатная платформа и фреймворк с открытым исходным кодом (включая очень необработанные результаты тестов), которые помогут вам проще и быстрее тестировать базы данных и запросы.
Оригинал