2010-09-25 5 views
1

Я думаю, что с SQLite3, по крайней мере, он не хранит кэшированную страницу, потому что нет сервера, и каждая запись будет выходить из SQLite3, поэтому он не может делать кеширование напрямую.Как оценивать/тестировать скорость MySQL, Postgresql, MongoDB, где столько слоев кеша?

Но когда это MySQL, Postgresql или MongoDB, будет существовать слой, который, когда считается, диск.

И даже если он записан на диск, есть уровень ОС, который сохраняет секторы, которые должны быть записаны на диск.

И вот тогда кэш жесткого диска. При этом это 8 МБ, поэтому, возможно, когда тест вставляет данные, создающие базу данных 800 МБ, ошибка может быть 1% или меньше.

Но как насчет других слоев? На самом деле нужно полностью смыть уровень ОС. В противном случае, с компьютерами, имеющими 4 ГБ ОЗУ или 8 ГБ ОЗУ, вся база данных может легко находиться в ОЗУ, когда считается, что она довольно быстро. Как мы можем сказать, что тест полностью очистил данные до физического уровня жесткого диска или, по крайней мере, из уровня ОС?

ответ

1

Когда вы проводите бенчмаркинг, вы никогда не сможете отменить все оптимизации скорости на каждом уровне вплоть до ОС или даже уровня ЦП, включая кеширование. Тебе это не нужно. Что вы можете сделать, это сравнить производительность в разных состояниях жизненного цикла вашей системы. Кроме того, если вы знаете, какие данные кэшируются, когда (приблизительно) вы можете делать тесты до и после этого. Например: чистый старт, первый доступ к базам данных DB, последующий доступ к БД и т. Д. Лучше всего сначала определить узкие места, а затем проверить только там более подробно. Другая хорошая практика заключается в том, чтобы имитировать нагрузку на реальную жизнь и сравнить ее. Любые синтетические тесты практически бессмысленны. Удачи;)