LINUX.ORG.RU
решено ФорумAdmin

Как провести нагрузочное тестирование сервера с СУБД mysql?

 , , ,


0

2

Добрый день.

Есть довольно нагруженный сервер с mysql. БД - весит 500GB Средняя нагрузка 7000 запросов к БД в секунду. Из них примерно 4000 SELECT, запросов и 3000 INSERT, UPDATE,DELETE запросов.

На пиках, количество запросов достигает 12 000 - 14 000. С этого сервера идет slave репликация, на другой сервер, который значительно слабже. Получается он тянет с Master-сервера только запросы на запись (3000 запросов) и нормально выдерживает.

Хочу обновить Master сервер, поэтому временно хочу отключить реплику, и переключить все запросы на неё. Но не уверен что этот сервер выдержит нагрузку. Точнее нагрузку на запись он понятно что выдерживает, но вот что будет когда на него переключаться все SELECT запросы непонятно. На master сервере ОЗУ в 8 раз больше.

Поэтому хочу как-то оценить возможность этого сервера держать нагрузку. Первое что в голову пришло, это логировать все SELECT запросы в какой-нибудь файл в течении часа. Затем написать скрипт который выполняет все эти запросы из файла уже к БД тестируемого сервера, также в течении. И мониторить нагрузку. Важно протестировать максимально приближенную нагрузку.

Возможно для этих целей уже есть готовые скрипты/ПО. Посоветуйте пожалуйста



Последнее исправление: Falcon-peregrinus (всего исправлений: 1)
Ответ на: комментарий от svr4

есть, называется ...

Во-первых в бинарный лог не пишутся SELECT запросы.

The binary log is not used for statements such as SELECT or SHOW that do not modify data.

Во-вторых с логированием запросов никаких проблем нет. Мне нужны советы по готовому ПО/скриптам, которые умеют с помощью списка запросов делать нагрузочное тестирование БД. Было бы не плохо, если там будет возможность указывать количетсво потоков, количество запросов для каждого потока.

Свой велосипед на perl конечно можно написать. Но зачем, если есть готовые решения, которые скорее всего будут лучше.

demsi
() автор топика
Последнее исправление: demsi (всего исправлений: 2)

Попробовал юзать стандартный mysqlslap. В принципе норм утилита, + в стандартном пакте Mysql идет.
Также навоял простой скриптик на перле, который читает запрос из файла и выполняет его, с определенным лимитом в секунду.
Запустил этот скрипт с нескольких серверов, получилось достингуть 20K запросов в секунду в течении часа. Сервер выдержал без пробелм.
Всем спасибо.

demsi
() автор топика
Последнее исправление: demsi (всего исправлений: 1)

Получается он тянет с Master-сервера только запросы на запись (3000 запросов) и нормально выдерживает.

Я не силен в репликации, но здравый смысл подсказывает, что при репликации ресурсов сервера будет тратится меньше хотя бы из-за того, что там можно сделать транзакцию по 100 запросов одновременно, а в реальном приложении это будут раздельные запросы.

Может есть спецы кто в курсе, как же на самом деле работает репликация внутри?

kiotoze ★★★★
()

На master сервере ОЗУ в 8 раз больше

главное смотреть чтобы индексы в память залезли, иначе упрется в io

kiotoze ★★★★
()
Ответ на: комментарий от kiotoze

Может есть спецы кто в курсе, как же на самом деле работает репликация внутри?

Я не спец. Но вроде ничего сложного. Один поток качает бинарный лог с мастер сервера, и записывает его в релей лог у себя. Второй поток выполняет запросы из этого релэй лога.

что там можно сделать транзакцию по 100 запросов одновременно

А если на каждый запрос открывать соединение и закрывать его после завершения запроса? В этом случае один запрос на транзакцию.

главное смотреть чтобы индексы в память залезли, иначе упрется в io

Памяти хватает

demsi
() автор топика
Последнее исправление: demsi (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.