Анализ производительности с помощью «плагинов» СУБД или другого решения

Анализ производительности с помощью «плагинов» СУБД или другого решения

Я работаю над продуктом для мониторинга систем, который в настоящее время фокусируется на производительности на системном уровне. Мы расширяемся до мониторинга систем баз данных. Прямо сейчас мы можем извлекать простую информацию о производительности из ряда СУБД, например, количество подключений, скорость дискового ввода-вывода, время ожидания блокировки и т. д.

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

Вот некоторые возможные решения:

  • Некий прокси, который находится между клиентом и сервером. SSL может быть здесь проблемой, плюс он требует от нас обратного проектирования и внедрения сетевого протокола для каждой СУБД.
  • Плагин для каждой системы СУБД, который автоматически записывает информацию о производительности при поступлении запроса.

Другие проблемы включают «анонимизацию» SQL, т. е. взятие чего-то вроде SELECT * FROM products WHERE price > 20 AND name LIKE "%disk%"и создание SELECT * FROM products WHERE price > ? AND name LIKE "%?%", хотя это не должно быть слишком сложным при использовании умного синтаксического анализа и регулярных выражений.

В основном мы фокусируемся на:

  • MySQL
  • MSSQL
  • Оракул
  • Редис
  • mongodb
  • memcached

Есть ли какие-либо механизмы в стиле плагинов, которые мы можем использовать для любого из них? Или есть более простое решение?

решение1

Нет универсального решения, применимого ко всем вашим базам данных. И попытка измерить время ответа запроса на Oracle очень сложна. Я не работал с анализом производительности на memcache/nosql dbs.

Для mysql естьmysqlproxy- который можно легко заскриптовать. Однако вы, вероятно, получите все, что вам нужно, из журнала медленных запросов (с порогом ноль). Я использую модифицированную версиюэтот сценарийчтобы «анонимизировать» мои запросы.

Существуют (очень дорогие) инструменты, такие как клиент Vantage от Compuware, которые могут прослушивать сетевой трафик и выводить показатели производительности на разных уровнях (включая базу данных). Единственный сопоставимый бесплатный программный инструмент, о котором я знаю, этоПрошлыйПнкоторый (насколько мне известно) не обеспечивает глубокого анализа, необходимого для измерения времени отклика БД при постоянном TCP-соединении.

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

Вы думали, как вы собираетесь собирать / хранить / анализировать все эти данные? Вы можете взглянуть награфит.

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

Связанный контент