Как оценить объем передачи сетевых данных для базы данных 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 не измеряется (или, следовательно, оплачивается).