Как оценить объем передачи сетевых данных для базы данных MySQL

Планируя портировать мое приложение (Java+Tomcat+MySql) на облачный хостинг, я обнаружил, что одним из важных факторов, который следует учитывать, является объем данных, передаваемых в / из базы данных, поскольку он ограничен облачными провайдерами. Я не нашел удобного способа оценить этот объем на основе статистики использования (например, количества запросов и среднего размера строки), а также как измерить текущее использование.

Есть ли какая-либо статистика, встроенная в MySql, которую я мог бы использовать, или лучше отслеживать это с точки зрения сети, отслеживая данные, передаваемые в / из порта, используемого MySql.

заранее спасибо

2 ответа

Решение

Если вы хотите напрямую измерять сетевой трафик в MySQL и выходить из него в вашем приложении, вы можете отслеживать две переменные состояния:

  • Bytes_received: количество байтов, полученных от всех клиентов
  • Bytes_sent: количество байтов, отправленных всем клиентам

ГЛОБАЛЬНЫЙ УРОВЕНЬ

Вы можете получить их для всех сессий (прошлых и настоящих) с этим запросом

SELECT * FROM information_schema.global_status
WHERE variable_name IN ('Bytes_received','Bytes_sent');

Это даст вам номер каждого за время существования экземпляра mysql.

УРОВЕНЬ СЕССИИ

Вы можете получить их для каждой сессии с

SELECT * FROM information_schema.session_status
WHERE variable_name IN ('Bytes_received','Bytes_sent');

Это даст вам номер каждого за время существования сессии БД.

Вы можете использовать графические интерфейсы для их отображения с течением времени. Поскольку вы упомянули Java и Tomcat, вы можете создать свою собственную презентацию. Вам нужно будет сохранить предыдущие значения, получить текущие значения, вычесть их, а затем построить или вывести средние значения по своему усмотрению.

Попробуйте!

ПРЕДОСТЕРЕЖЕНИЕ

Я обсуждал это в DBA StackExchange давным-давно ( MySQL: включают ли bytes_sent и bytes_received данные mysqldump?) Все, что имеет поток, будет подсчитано в этих двух переменных, включая внутренние данные, такие как для MySQL Replication (через Поток ввода-вывода и поток SQL).

В свете этого убедитесь, что у вас нет ненужных подключений к БД, выполняющих чтение, и что вы не контролируете MySQL во время mysqldump или перезагрузки mysqldump. Даже программное обеспечение для мониторинга (например, Nagios, Zabbix, MONYog, EM7 и т. Д.) Будет генерировать Bytes_received трафик каждый раз, когда он работает SHOW GLOBAL VARIABLES;

ПРЕДЛОЖЕНИЕ

Поскольку все, что связано с MySQL, повлияет на глобальный Bytes_received а также Bytes_sent значения статуса, вы можете захотеть, чтобы ваше приложение собирало уровень сеанса Bytes_received а также Bytes_sent непосредственно перед запуском mysqli_close (). Затем вы можете создать отчет о тех числах. Затем вы можете вычесть эти итоговые значения из глобальных подсчетов, чтобы увидеть, сколько служебных данных запрашивается.

Самый простой способ - запустить MySQL Workbench. Хотя для правильной настройки функций администрирования сервера могут потребоваться небольшие усилия, он представляет графики использования сети и является отличным инструментом для управления экземплярами MySQL. Сетевым решением для администрирования MySQL является phpMyAdmin, который также предоставляет статистику MySQL. Тем не менее, имейте в виду, что в прошлом у phpMyAdmin было несколько серьезных уязвимостей (например, разрешено полное поглощение системы), поэтому я настоятельно рекомендую вместо этого использовать MySQL Workbench. (Тангенциально: если вы действительно хотите или вам нужно использовать phpMyAdmin, убедитесь, что у вас есть схема аутентификации перед phpMyAdmin, поэтому, чтобы злоумышленники даже увидели ваш логин phpMyAdmin, они должны пройти через ваш первый уровень входа. Мои серверы, например, требуют Обычная аутентификация по HTTPS и проверьте предоставленные имя пользователя и пароль для PAM, прежде чем разрешить доступ даже к странице входа phpMyAdmin.)

Если вам также интересен сбор общей статистики с множеством симпатичных графиков, Munin - хорошее решение, включающее также набор подключаемых модулей мониторинга MySQL, хотя они должны быть предварительно настроены, и для их установки необходимо установить некоторые зависимости Perl. плагины мониторинга MySQL работают (Cache::Cache а также DBD::MySQLСогласно комментариям, оставленным в плагине скриптов).

Наконец, помните, что выставление счетов за трафик MySQL является проблемой, только если ваше приложение и база данных находятся на разных серверах; трафик localhost не измеряется (или, следовательно, оплачивается).

Другие вопросы по тегам