Я работаю над продуктом для системного мониторинга, который в настоящее время ориентирован на производительность на системном уровне. Мы расширяемся до систем мониторинга баз данных. Прямо сейчас мы можем получить простую информацию о производительности из выбранной СУБД, такую как количество подключений, скорость ввода-вывода диска, время ожидания блокировки и т. Д.
Однако нам действительно нужен способ измерения времени выполнения каждого запроса, поступающего в СУБД, без требуя, чтобы клиент реализовал мониторинг в коде своего приложения.
Вот некоторые возможные решения:
Другие проблемы включают "анонимизацию" SQL, т.е. получение чего-то вроде SELECT * FROM products WHERE price > 20 AND name LIKE "%disk%"
и производство SELECT * FROM products WHERE price > ? AND name LIKE "%?%"
, хотя это не должно быть слишком сложно с умным синтаксическим анализом и регулярным выражением.
В основном мы фокусируемся на:
Есть ли какие-либо механизмы в стиле плагинов, которые мы можем использовать для любого из них? Или есть решение попроще?
Не существует универсального решения, применимого ко всем вашим базам данных. И попытаться измерить время ответа на запрос в Oracle очень сложно. Я не работал с анализом производительности для memcache / nosql dbs.
Для mysql есть mysqlproxy - которые можно легко написать по сценарию. Однако вы, вероятно, получите все необходимое из журнала медленных запросов (с нулевым порогом). Я использую модифицированную версию этот сценарий чтобы «анонимизировать» мои запросы.
Существуют (очень дорогие) инструменты, такие как Compuware client vantage, которые могут анализировать сетевой трафик и определять показатели производительности на различных уровнях (включая базу данных). Единственный сопоставимый бесплатный программный инструмент, о котором я знаю, это PastMon который (AFAIK) не обеспечивает глубокую проверку, необходимую для измерения времени отклика БД при постоянном TCP-соединении.
Хотя можно было бы получить все показатели, направив весь доступ через веб-сервисы, это приводит к задержке транзакции. Это верно для любой операции типа прокси, но будет особенно болезненно для непостоянных подключений через SSL.
Вы обдумывали, как вы собираетесь собирать / поддерживать / анализировать все эти данные? Возможно, вы захотите взглянуть на графит.
Какие типы клиентов вы используете? Прежде чем вы начнете просматривать базы данных, вы должны измерить ответные связи на клиенте - вам нужно только начать беспокоиться о производительности базы данных, если у вас есть проблемы с производительностью. А если клиентом является веб-браузер, то это гораздо более простая задача. Просто настройте свой веб-сервер на регистрацию времени ответа и начните смешивать данные. Вы даже можете добавить простые приспособления для измерения отклика страницы, что является гораздо лучшим показателем воспринимаемой производительности, например Бумеранг Yahoo