Mysql мониторинг запросов. MySQL On air. Мониторим SQL запросы. PRTG — это комплексное средство мониторинга баз данных

Для мониторинга загрузки сервера MySQL есть такая хорошая утилита – mytop .
Mytop – это открытый инструмент командной строки для мониторинга производительности MySQL, разработанный по примеру инструмента мониторинга системы Linux под названием top. Mytop подключается к MySQL и периодически запускает команды show processlist и show global status, а затем резюмирует информацию в удобном формате. При помощи Mytop можно в режиме реального времени отслеживать потоки, запросы и аптайм MySQL, узнать, какой пользователь отправляет запросы к той или иной базе данных, определить медленные запросы и многое другое. Вся эта информация может быть использована для оптимизации производительности сервера MySQL.

Установка для разных систем:

# apt-get install mytop

# yum install mytop

#pkg install mytop

Подключаемся к нашему MySQL :

# mysql -u root -p Enter password:

Желательно для каждой базы или для разных программ создавать разные учетные записи. Поэтому создадим и опишем права на нужные базы пользователю mytopuser:

Mysql> create user "mytopuser"@"localhost" identified by "password"; mysql> grant all on *.* to ‘mytopuser’@’localhost’ identified by ‘password’;

Создадим файл настроек в домашнем каталоге ~/.mytop и в него вносим конфигурацию подключения:

# mcedit .mytop user=mytopuser pass=dgbple host=localhost db=asterisk port=3306 color=1 delay=3 idle=0

где user и pass – логин и пароль, что мы создавали.

host, port – адрес и порт MySQL сервера

db – база, к которой подлючаемся

delay – чтобы дисплей mytop обновлялся каждые 3 секунды

idle – определяет, нужно ли выводить в mytop ожидающие потоки. По умолчанию такие потоки учитываются. Опуская ожидающие потоки, mytop меняет порядок сортировки по умолчанию, выводя длинные запросы в верхней части списка.

Сменим права на доступ к этому файлу:

# chmod 700 .mytop

Запускаем утилиту:

# mytop

Можно вывести данные по определенной базе, например:

# mytop -u mytopuser -p password -d goip

В первой строке: имя хоста и версия запущенного сервера MySQL . Верхний правый угол – uptime сервера (время непрерывной работы) дней+часов+минут+секунд.

Во второй строке: общее количество обработанных запросов к базе (Queries:), среднее количество запросов в секунду (qps:), и кол-во медленных запросов (Slow:).

В третьей строке показывает информацию о процессах: всего, активных, кешированных.

В четвертой строке: сведения об эффективности буфера ключей – как часто MySQL находит ключи в буфере, не обращаясь к диску, среднее число байтов, посланных и полученных сервером, и число байтов, пересылаемых в данный момент.

Вторая часть экрана показывает все активные потоки (в том числе тот, который использует MyTOP ). Здесь выводятся в табличной форме имя пользователя, базы данных и узла, а также текущий запрос и состояние.

В стандартном выводе mytop запросы сокращены. Чтобы просмотреть запись полностью, нажмите F . Программа спросит:

Full query for which thread id:

Введите id потока, чтобы просмотреть необходимый запрос.

Чтобы получить объяснение запроса, нажмите Е , и тогда программа предоставит данные о запущенном запросе, которые помогут выяснить, оптимизируется ли запрос. EXPLAIN – один из самых производительных инструментов для понимания и оптимизации запросов MySQL.

Чтобы закрыть этот режим, нажмите любую клавишу; чтобы вернуть стандартный вывод, нажмите t .

Еще один полезный вид mytop доступен при нажатии клавиши С. Он показывает запущенные команды.

Столбец Command показывает тип запущенной команды или запроса. Столбец Total указывает общее количество команд такого типа с момента запуска сервера, а Pct показывает это число в процентном соотношении. Столбец Last показывает количество команд такого типа с момента последнего обновления mytop. В целом эти данные дают представление о работе сервера MySQL в краткосрочной и долгосрочной перспективе.

Заключение

Этот инструмент позволяет вовремя обнаружить и оптимизировать сложные запросы SQL, тем самым увеличивая общую производительность сервера.

MySQL — это система управления базами данных с открытым исходным кодом , основанная на структурированном языке запросов (SQL). Помимо того, что система доступна бесплатно, преимущество MySQL в том, что она работает почти на всех платформах . MySQL — одна из наиболее широко используемых систем баз данных в мире, на основе которой строится множество динамических веб-сайтов . Наряду с версией с открытым исходным кодом существует также коммерческая версия системы управления базами данных. Чтобы использовать MySQL в коммерческом продукте, необходимо приобрести лицензию.

Преимущества MySQL

MySQL занимает самую большую долю на рынке среди всех баз данных с открытым исходным кодом. Следовательно, нет недостатка в книгах, статьях и поддержке по MySQL.

По сравнению с прочими базами данных настраивать и администрировать MySQL легко. Для начала работы доступны такие средства, как MySQL Administrator.

Одно из самых больших преимуществ MySQL: молниеносная скорость! Благодаря простой структуре MySQL демонстрирует чрезвычайную эффективность в плане потребления ресурсов и почти не использует память.

Производитель-
ность MySQL: основа для ряда других служб

Если ваша база данных работает очень медленно, возвращает ошибки в ответ на некоторые запросы или вообще недоступна, то пострадают и производительность, и качество всех приложений , которые зависят от этой базы данных. Чтобы обеспечить постоянную и максимально быструю доступность приложений, необходимо осуществлять мониторинг баз данных MySQL. Таким образом, оптимизируя работу базы данных, вы создаете основу для доступности и производительности всех ваших служб на разных уровнях.

Что делает PRTG полноценным средством мониторинга MySQL

Если ваш веб-сайт, интернет-магазин или веб-приложение использует базу данных MySQL и работа этой базы данных нарушается, пострадает сам сайт: он может отображаться неверно, некоторые его части могут быть недоступны или же сайт может не загружаться вообще.

PRTG позволяет постоянно отслеживать доступность вашей базы данных MySQL . С помощью PRTG вы сократите время простоев базы данных и сможете немедленно реагировать на перебои в ее работе. Результатом будет рост удовлетворенности клиентов и повышение продуктивности сотрудников.

Комплексное средство мониторинга MySQL от PAESSLER отслеживает не только доступность баз данных, но и другие данные о производительности MySQL. Для этого PRTG автоматически опрашивает базы данных и измеряет время , необходимое для установления соединения, выполнения запроса SQL, обработки транзакции и разрыва соединения. На панели мониторинга PRTG отображается понятная статистика общего времени запросов .

PRTG также позволяет отслеживать определенные наборы данных из базы данных MySQL. Можно, например, получить некоторую информацию из интернет-магазина или базы данных заявок. Для этого просто задайте собственные запросы SQL в приложении PRTG и отслеживайте значения, которые они возвращают.

Помимо возвращаемых значений, PRTG покажет время выполнения запроса и количество опрошенных в таблицах данных строк. Используя настраиваемые пороговые значения , можно запускать автоматические оповещения и получать уведомления, например о скором исчерпании складских запасов того или иного товара в интернет-магазине.

Одной из множества полезных функций PRTG является создание настраиваемых отчетов. Содержимое отчетов можно настраивать любым желаемым образом, а затем вызывать отчеты на лету или создавать их автоматически (ежедневно, еженедельно или ежемесячно) с последующей отправкой, например по электронной почте.

PRTG позволяет создавать отчеты со всеми данными, которые важны для вашей работы. Функция отчетности — это также идеальный способ предоставления актуальной информации коллегам и начальству. Просто выберите значимую информацию, и отчеты будут автоматически отправляться соответствующим руководителям. Например, можно перенаправить наиболее важную статистику веб-сайта группе по маркетингу или автоматически отправлять количество открытых заявок в службу поддержки.

В программе PRTG для мониторинга MySQL имеется функция тревоги. Если база данных недоступна или если некоторые запросы не возвращают требуемые (или возвращают неверные) значения, можно настроить получение автоматических уведомлений об этой ситуации от PRTG.

Оповещение может выполняться в форме сообщения электронной почты, SMS или push-уведомления на смартфон. Вы будете информированы своевременно, до эскалации проблемы. Благодаря API-интерфейсу PRTG можно также создавать пользовательские уведомления и автоматически выполнять скрипты или HTTP-действия.

Наслаждайтесь ощущением полного контроля с помощью PRTG!

PRTG позволяет постоянно следить за
базами данных MySQL даже в дороге

Программа PRTG устанавливается за несколько минут и совместима с большинством мобильных устройств.

PRTG контролирует для вас работу этих и многих других производителей и приложений

Переход на PRTG осуществляется легко и безопасно

На рынке существует множество средств для мониторинга серверов MySQL. PRTG обладает следующими преимуществами.

Нет скрытой
платы

Многие администраторы в особых случаях используют разнообразные средства мониторинга. Управление таким сочетанием инструментов требует времени и энергии. Это выливается в бесчисленные рабочие часы, которые можно было бы потратить более эффективно. Более того, таким образом обычно не удается получить краткий обзор.

  • Полная версия PRTG на 30 дней
  • После 30 дней – бесплатная версия
  • Для расширенной версии – коммерческая лицензия

Как отслеживать работу базы данных MySQL с помощью PRTG

Для начала мониторинга MySQL с помощью PRTG нужно выполнить лишь несколько простых шагов. Решение PRTG поставляется с готовым сенсором для мониторинга MySQL. В общем случае можно сразу же начать использовать этот сенсор для отслеживания основных сведений о базе данных, таких как доступность и время выполнения.

Для получения более подробных показателей добавьте собственные запросы SQL в виде отдельного файла.

Настройка сенсора MySQL производится легко и не требует много времени.

1. Создание запроса SQL

Самостоятельно определяемые запросы SQL позволяют отслеживать различные ключевые показатели эффективности, например:

  • количество посетителей веб-сайта;
  • показатели продаж в интернет-магазине;
  • открытые заявки в службе поддержки клиентов.

Возможности практически безграничны. Единственное требование: необходимо задать соответствующую инструкцию SQL.

Вот пример, как она может выглядеть:


SELECT count(idorder), sum(value), avg(value), GROUP_CONCAT(customer SEPARATOR ", ") from test.order

2. Сохранение скрипта

Сохраните запрос SQL в отдельном файле на жестком диске. Убедитесь, что файлу задано расширение.sql и выбран следующий путь:

C:\Program Files (x86)\PRTG Network Monitor\Custom Sensors\sql\mysql

3. Создание сенсора в PRTG

Перед добавлением сенсора в приложение PRTG убедитесь, что ваша среда соответствует требованиям (дополнительные сведения приведены в нашем руководстве пользователя). Особое внимание следует обращать на правильность ввода данных для доступа в настройках устройства, поскольку это устройство будет представлять вашу базу данных в приложении PRTG.

Щелкните «Добавить сенсор» на устройстве, которое получит сенсор, выполните поиск по строке MySQL и выберите сенсор MySQL-v2-Sensor. В последующем диалоговом окне введите имя сенсора и имя базы данных, которая будет отслеживаться.

Затем выберите SQL-файл, содержащий ваш запрос SQL (из шага 2), и настройте сенсор нужным образом. Например, определите, нужно ли просто отслеживать время выполнения запроса или также анализировать и обрабатывать значения из таблицы данных. Если вы выбрали последний вариант, укажите, какие значения следует считывать из таблицы.

Сенсор PRTG будет добавлен после закрытия диалогового окна. Он будет выглядеть примерно следующим образом.

PRTG делает вашу жизнь проще!

Наше программное обеспечение мониторинга работает на вас
и своевременно уведомляет о потенциальных проблемах.
Оно позволяет вам сосредоточиться на более важных делах.

PRTG экономит время

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

PRTG бережет нервы

Установить PRTG очень просто. Начало работы с PRTG или переход с другого инструмента для мониторинга происходит беспроблемно благодаря функции автоматического обнаружения и готовым шаблонам для многочисленных устройств.

PRTG экономит деньги

PRTG стоит своих денег. 80 % наших клиентов говорят о том, что смогли добиться экономии в сфере управления сетью . А затраты на лицензии PRTG окупаются в среднем всего за несколько недель.

Компания Paessler AG провела обширный опрос свыше 600 ИТ-отделов по всему миру, в которых используется PRTG.
Целью этого опроса была оптимизация и тонкая настройка нашего программного обеспечения для мониторинга работы сети
которая позволила бы лучше удовлетворить потребности администраторов.
По результатам нашего опроса более 95 % участников были готовы порекомендовать PRTG или уже сделали это.

Многократно премированное программное обеспечение

Мы каждый день прилагаем все усилия на предоставление мощного и
простого программного обеспечения для наших клиентов.
Конечно, мы гордимся, когда имеем успех и благодарность за нашу работу.

PRTG — это комплексное средство мониторинга
баз данных

PRTG поддерживает не только MySQL, но также подходит для мониторинга прочего программного обеспечения баз данных. В программе имеются готовые сенсоры для всех основных сред баз данных, включая Microsoft SQL, Oracle SQL и PostgreSQL. Кроме того, наш сенсор ADO SQL можно использовать почти с любой другой системой управления базами данных. Этот сенсор позволяет отслеживать любой источник данных, который доступен через OLE DB или ODBC.

PRTG: Революционнoe программное обеспечение для мониторинга сети

Используя API , вы можете приспосабливать PRTG индивидуально и динамически для ваших конкретных потребностей:
  • HTTP API: доступ к данным мониторинга сети и управления объектами с помощью HTTP-запросов
  • Индивидуальные сенсоры: вы можете добавить собственные сенсоры для индивидуального мониторинга сети
  • Индивидуальные уведомления: вы можете добавить собственные уведомления для отправки предупреждений во внешние системы
  • Новый сенсор REST API: Мониторит практически все, что поддерживает XML и JSON

Разбираясь как работает та или иная CMS приходится использовать различные инструменты, облегчающие работу.
Наиболее интересная тема - это работа с баз(ой|ами) данных. Естественно для изучения запросов и результатов запросов нужно использовать что-то универсальное. Что-то, что будет работать стабильно как с известным движком, так и с самописной системой.
Предположим у вас оказалась система управления контентом и вам необходимо посмотреть как реализовано добавление новых пользователей или смена паролей.

Большинство инструментов позволяющих мониторить работу с БД являются платными [раз , два ]. Я хотел что-то более легкое и удобное, поэтому выбрал mysql-proxy. Хотя возможности утилиты гораздо шире чем мне требуется, я опишу лишь основное. Работает как под Windows, так и под Unix системами.

Скачать можно тут: dev.mysql.com/downloads/mysql-proxy
Первым делом нужно определиться с выбором дистрибутива. На данный момент новейшей версией является «MySQL Proxy 0.8.3 alpha», в качестве ОС у меня стоит Windows 7, поэтому все тесты будут на ней.

После нажатия на кнопку «Download» вас попросят авторизироваться либо зарегистрировать, но снизу есть ссылка для скачивания без лишних действий. (В репозиториях Ubuntu и Debian есть готовые пакеты, так что: sudo apt-get install mysql-proxy)

Хочу заметить, что при размере в 7.9Мб в дистрибутив входит Lua с поддержкой основых модулей.

После скачивания архива его нужно распаковать в удобную для вас директорию, возьмем для примера C:\mysql-proxy
Для запуска приложения нужно определиться с параметрами.

В данном контексте многое зависит от того, что у вас установлено. В качестве LAMP я использую Winginx, прочитать об этой связке можно тут: winginx.ru
По умолчанию MySQL работает на 3306 порту, его мы трогать не будем.
Нам нужно изменить порт для подключения php к базе. Для этого необходимо поправить php.ini
Найдем строку «mysql.default_port» и установим порт (по умолчанию 4040). Для более универсальной работы измените и «mysqli.default_port» на 4040

Подготовительная часть пройдена, перейдем к делу.

Вариант 1. Мониторинг запросов.
Для простого мониторинга необходимо использовать Lua скрипт. Как я уже говорил Lua идет в комплекте, так что ничего нового устанавливать не надо.
Создадим простой скрипт view.lua в директории C:\mysql-proxy\ с содержимым:

Function read_query(packet) if string.byte(packet) == proxy.COM_QUERY then print(string.sub(packet, 2)) end end

Теперь можно проверить результат.
Для удобства создадим в директории C:\mysql-proxy файл view.bat c содержимым:

C:\mysql-proxy\bin\mysql-proxy.exe --proxy-lua-script=C:\mysql-proxy\view.lua --log-file="C:\mysql-proxy\mysql-proxy-log.txt" --proxy-backend-addresses=localhost:3306

Proxy-backend-addresses - адрес MySQL сервера на который будем проксировать запрос.

Запустив вэб-сервер и выполнив какие либо запросы к базе можете увидеть такое:

Запросы отображаются, хорошо.

Вариант 2. Мониторинг запросов и запись в файл.
Для записи запросов в файл будем использовать штатные возможности Lua.
Создадим файл view-write.lua в директории C:\mysql-proxy\ с содержимым:

Function read_query(packet) if string.byte(packet) == proxy.COM_QUERY then local file = io.open("C:\\mysql-proxy\\sql-log.txt", "a") file:write(string.sub(packet, 2) .. "\n") file:close() print(string.sub(packet, 2)) end end
и bat файл - «view-write.bat»
C:\mysql-proxy\bin\mysql-proxy.exe --proxy-lua-script="C:\mysql-proxy\view-write.lua" --log-file="C:\mysql-proxy\mysql-proxy-log.txt" --proxy-backend-addresses=localhost:3306

Результат после выполнения запросов (по адресу «C:\mysql-proxy\sql-log.txt»)

Помимо отображения самих запросов, нам может понадобиться вывод результатов этих запросов.

Вариант 3. Запросы и результат
По той-же схеме создаём скрипт «view-result.lua»:
function read_query(packet) if packet:byte() == proxy.COM_QUERY then print("Query: " .. string.sub(packet, 2)) local file = io.open("C:\\mysql-proxy\\sql-log.txt", "a") file:write("Query: " .. string.sub(packet, 2) .. "\n") file:close() proxy.queries:append(2, string.char(proxy.COM_QUERY) .. string.sub(packet, 2), {resultset_is_needed = true}) proxy.queries:append(1, packet, {resultset_is_needed = true}) return proxy.PROXY_SEND_QUERY end end function read_query_result(inj) if inj.id == 1 then for row in inj.resultset.rows do local i = 1 local fields = {} while row[i] do if row[i] == row then break end local file = io.open("C:\\mysql-proxy\\sql-log.txt", "a") file:write("Response field: " .. inj.resultset.fields[i].name .. " => " .. row[i] .. "\n") file:close() print("Response field: " .. inj.resultset.fields[i].name .. " => " .. row[i]) i = i + 1 end end return proxy.PROXY_IGNORE_RESULT end end

И view-result.bat
C:\mysql-proxy\bin\mysql-proxy.exe --proxy-lua-script="C:\mysql-proxy\view-result.lua" --log-file="C:\mysql-proxy\mysql-proxy-log.txt" --proxy-backend-addresses=localhost:3306

В результате получаем полное логирование запросов и ответов в читаемом виде


Разбираясь как работает та или иная CMS приходится использовать различные инструменты, облегчающие работу.
Наиболее интересная тема - это работа с баз(ой|ами) данных. Естественно для изучения запросов и результатов запросов нужно использовать что-то универсальное. Что-то, что будет работать стабильно как с известным движком, так и с самописной системой.
Предположим у вас оказалась система управления контентом и вам необходимо посмотреть как реализовано добавление новых пользователей или смена паролей.

Большинство инструментов позволяющих мониторить работу с БД являются платными [раз , два ]. Я хотел что-то более легкое и удобное, поэтому выбрал mysql-proxy. Хотя возможности утилиты гораздо шире чем мне требуется, я опишу лишь основное. Работает как под Windows, так и под Unix системами.

Скачать можно тут: dev.mysql.com/downloads/mysql-proxy
Первым делом нужно определиться с выбором дистрибутива. На данный момент новейшей версией является «MySQL Proxy 0.8.3 alpha», в качестве ОС у меня стоит Windows 7, поэтому все тесты будут на ней.

После нажатия на кнопку «Download» вас попросят авторизироваться либо зарегистрировать, но снизу есть ссылка для скачивания без лишних действий. (В репозиториях Ubuntu и Debian есть готовые пакеты, так что: sudo apt-get install mysql-proxy)

Хочу заметить, что при размере в 7.9Мб в дистрибутив входит Lua с поддержкой основых модулей.

После скачивания архива его нужно распаковать в удобную для вас директорию, возьмем для примера C:\mysql-proxy
Для запуска приложения нужно определиться с параметрами.

В данном контексте многое зависит от того, что у вас установлено. В качестве LAMP я использую Winginx, прочитать об этой связке можно тут: winginx.ru
По умолчанию MySQL работает на 3306 порту, его мы трогать не будем.
Нам нужно изменить порт для подключения php к базе. Для этого необходимо поправить php.ini
Найдем строку «mysql.default_port» и установим порт (по умолчанию 4040). Для более универсальной работы измените и «mysqli.default_port» на 4040

Подготовительная часть пройдена, перейдем к делу.

Вариант 1. Мониторинг запросов.
Для простого мониторинга необходимо использовать Lua скрипт. Как я уже говорил Lua идет в комплекте, так что ничего нового устанавливать не надо.
Создадим простой скрипт view.lua в директории C:\mysql-proxy\ с содержимым:

Function read_query(packet) if string.byte(packet) == proxy.COM_QUERY then print(string.sub(packet, 2)) end end

Теперь можно проверить результат.
Для удобства создадим в директории C:\mysql-proxy файл view.bat c содержимым:

C:\mysql-proxy\bin\mysql-proxy.exe --proxy-lua-script=C:\mysql-proxy\view.lua --log-file="C:\mysql-proxy\mysql-proxy-log.txt" --proxy-backend-addresses=localhost:3306

Proxy-backend-addresses - адрес MySQL сервера на который будем проксировать запрос.

Запустив вэб-сервер и выполнив какие либо запросы к базе можете увидеть такое:

Запросы отображаются, хорошо.

Вариант 2. Мониторинг запросов и запись в файл.
Для записи запросов в файл будем использовать штатные возможности Lua.
Создадим файл view-write.lua в директории C:\mysql-proxy\ с содержимым:

Function read_query(packet) if string.byte(packet) == proxy.COM_QUERY then local file = io.open("C:\\mysql-proxy\\sql-log.txt", "a") file:write(string.sub(packet, 2) .. "\n") file:close() print(string.sub(packet, 2)) end end
и bat файл - «view-write.bat»
C:\mysql-proxy\bin\mysql-proxy.exe --proxy-lua-script="C:\mysql-proxy\view-write.lua" --log-file="C:\mysql-proxy\mysql-proxy-log.txt" --proxy-backend-addresses=localhost:3306

Результат после выполнения запросов (по адресу «C:\mysql-proxy\sql-log.txt»)

Помимо отображения самих запросов, нам может понадобиться вывод результатов этих запросов.

Вариант 3. Запросы и результат
По той-же схеме создаём скрипт «view-result.lua»:
function read_query(packet) if packet:byte() == proxy.COM_QUERY then print("Query: " .. string.sub(packet, 2)) local file = io.open("C:\\mysql-proxy\\sql-log.txt", "a") file:write("Query: " .. string.sub(packet, 2) .. "\n") file:close() proxy.queries:append(2, string.char(proxy.COM_QUERY) .. string.sub(packet, 2), {resultset_is_needed = true}) proxy.queries:append(1, packet, {resultset_is_needed = true}) return proxy.PROXY_SEND_QUERY end end function read_query_result(inj) if inj.id == 1 then for row in inj.resultset.rows do local i = 1 local fields = {} while row[i] do if row[i] == row then break end local file = io.open("C:\\mysql-proxy\\sql-log.txt", "a") file:write("Response field: " .. inj.resultset.fields[i].name .. " => " .. row[i] .. "\n") file:close() print("Response field: " .. inj.resultset.fields[i].name .. " => " .. row[i]) i = i + 1 end end return proxy.PROXY_IGNORE_RESULT end end

И view-result.bat
C:\mysql-proxy\bin\mysql-proxy.exe --proxy-lua-script="C:\mysql-proxy\view-result.lua" --log-file="C:\mysql-proxy\mysql-proxy-log.txt" --proxy-backend-addresses=localhost:3306

В результате получаем полное логирование запросов и ответов в читаемом виде

Публикации по теме