FastNetMon

Wednesday 3 February 2010

Методика тестирования MySQL

После нескольких дней извращений вывел следующее - правильному тестированию MySQL категорически мешают две вещи: MySQL Query Cache и Linux Page Cache.

Имеем тестовую базу данных вордпресса, забитую 3 миллионами постов, с генерированных скриптом, суммарно около 302 мегабайт. Тест производится запросом главной страницы вордпресса и замером времени ее отклика. Запуск осуществляется таким образом:
time wget http://test1.ru:80/


Далее, перед каждым тестом делается "подготовка" для очистки всех кэшей Линукса:

/etc/init.d/apache2 stop
/etc/init.d/failoverapache stop # наш спец апач
/etc/init.d/mysql stop

# запись грязных страниц на диск и сброс slab буферов и дискового кэша
sync
echo 3 > /proc/sys/vm/drop_caches

/etc/init.d/apache2 start
/etc/init.d/failoverapache start
/etc/init.d/mysql start


Итого, все кэши включены:

Первый запрос:
real 0m16.408s
user 0m0.002s
sys 0m0.009s

Повторно:
real 0m0.324s
user 0m0.001s
sys 0m0.008s


Крайне хороший результат, тут работают и страничный кэш Линукса и Query Cache MySQL.

Теперь, чтобы узнать, какую часть вносит кэш MySQL, а какую страничный кэш Линукса, перезапускаем MySQL для обнуления Query Cache и снова делаем запрос:

real 0m6.438s
user 0m0.002s
sys 0m0.010s


То есть Query Cache дает -6 секунд ко скорости работы :) А страничный же кэш дает аж -10секунд ко времени отработки повторного запроса.

No comments :

Post a Comment

Note: only a member of this blog may post a comment.