Как вы измеряете все запросы, которые проходят через ваше программное обеспечение? - PullRequest
1 голос
/ 04 октября 2008

В одной из своих статей блога владелец этого веб-сайта задал этот вопрос читателю: «Вы автоматически измеряете все запросы, которые проходят через ваше программное обеспечение, верно?»

Как ты это делаешь? За каждой строкой кода, которая делает запрос к базе данных, следует строка кода, которая увеличивает счетчик? Или есть инструменты, которые находятся между вашим приложением и БД и делают это для вас?

Ответы [ 6 ]

3 голосов
/ 04 октября 2008

SQL Server Profiler - мой инструмент выбора, но, очевидно, только для конца БД.

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

1 голос
/ 10 октября 2008

Мы только что купили программный продукт под названием dynaTrace для этого. Для этого он использует инструментарий байт-кода (в нашем случае MSIL, поскольку мы используем .Net, но также и Java). В основном это инструменты вокруг методов, которые мы выбираем, и различные методы каркаса для определения времени, которое требуется для выполнения каждого метода.

Что касается вызовов базы данных, он отслеживает каждый сделанный вызов (через ADO.Net) и параметры в вызове, а также время выполнения. Затем вы можете перейти от вызова к базе данных и пройти путь выполнения, который программа взяла, чтобы туда попасть. Он покажет каждый вызов метода (который вы установили) в пути. Это довольно круто.

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

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

1 голос
/ 04 октября 2008

У меня есть оболочка C ++, которую я использую для всей своей работы с базой данных. Эта оболочка (в режиме отладки) в основном выполняет EXPLAIN QUERY PLAN для каждого выполняемого оператора. Если он получает ответ о том, что индекс не используется, он ПОМОГАЕТ. Отличный способ убедиться, что индексы используются (но только для режима отладки)

1 голос
/ 04 октября 2008

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

Другой подход - использовать обертки для соединений с базой данных в вашем коде. Например, в Java, если у вас есть DataSource, который используют все ваши классы, вы можете написать свою собственную реализацию DataSource, которая использует базовый DataSource для создания объектов Connection. Ваш DataSource должен обернуть эти соединения в ваши собственные объекты Connection, которые могут отслеживать данные, которые проходят через них.

0 голосов
/ 05 октября 2008

Если ваша архитектура хорошо спроектирована, должно быть довольно легко перехватывать все вызовы доступа к данным и измерять время выполнения запроса. Довольно простой способ сделать это - использовать аспект вокруг вызовов БД (если ваш язык / фреймворк поддерживает аспектное программирование). Другой способ - использовать специальный драйвер, который перехватывает все вызовы, перенаправляет на реальный драйвер и измеряет время выполнения запроса.

0 голосов
/ 04 октября 2008
...