Доступ к базе данных инструментов - PullRequest
6 голосов
/ 12 августа 2008

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

Это просто случай включения таймера в каждый вызов базы данных и регистрации результата, или есть «аккуратный» способ сделать это? Может быть, есть фреймворк, который уже делает это для вас, или есть флаг, который я мог бы включить, например, Linq-to-SQL, обеспечивающий аналогичную функциональность.

Я в основном использую c #, но мне также было бы интересно увидеть методы из разных языков, и меня больше интересовал бы способ "кода" сделать это с помощью метода платформы db, такого как SQL Profiler.

Ответы [ 7 ]

1 голос
/ 12 августа 2008

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

Это может показать вам схемы использования, которые вы не ожидали. Это может показать, где вы используете доступ «строка за строкой» вместо операций «на основе набора».

Лучшим инструментом для использования является SQL Profiler, который анализирует количество операций чтения в сравнении с процессором и продолжительность. Вы хотите избежать высоких запросов к ЦП, больших чтений и длительных операций (дух!).

«Сгруппировать по чтению» - это полезная функция, позволяющая поднять самые гадкие запросы.

1 голос
/ 12 августа 2008

Если запрос - это больше, чем просто SELECT для одной таблицы, я всегда запускаю его через EXPLAIN, если я нахожусь на MySQL или PostgreSQL. Если вы используете SQL Server, то Management Studio имеет «Показать примерный план выполнения», который по сути такой же. Полезно посмотреть, как механизм будет обращаться к каждой таблице и какие индексы он будет использовать. Иногда это вас удивит.

0 голосов
/ 25 мая 2010

Если вы используете Hibernate (я использую версию Java, я бы предположил, что NHibernate имеет нечто подобное), вы можете заставить Hibernate собирать статистику о множестве разных вещей. Смотрите, например:

http://www.javalobby.org/java/forums/t19807.html

0 голосов
/ 24 августа 2008

Если вы в Firebird, вы можете посмотреть sinatica.com .
Скоро мы запустим инструмент мониторинга в реальном времени для администраторов баз данных Firebird.

</ бесстыдная вилка>

0 голосов
/ 12 августа 2008

Я определенно вижу значение в использовании SQL Profiler во время работы приложения, и EXPLAIN или SET STATISTICS предоставят вам информацию об отдельных запросах, но кто-нибудь регулярно помещает точки измерения в свой код для сбора информации о текущих запросах к базе данных - это подхватило бы, например, запрос к таблице, который изначально хорошо работает, но с ростом числа строк становится все медленнее и медленнее.

Если вы используете MySQL или Postgre, есть различные инструменты для наблюдения за запросами в режиме реального времени, но я не нашел такого инструмента, как SQL Profiler, для измерения производительности запросов во времени.

Мне интересно, есть ли (или должно быть?) Что-то похожее на ELMAH в том смысле, что оно просто подключается и дает вам информацию без особых дополнительных усилий?

0 голосов
/ 12 августа 2008

Я бы подумал, что здесь важно спросить: «Какую платформу базы данных вы используете?»

Например, в Sybase установка таблиц MDA может решить вашу проблему: они предоставляют целый набор статистических данных от использования вызовов процедур до среднего логического ввода-вывода, времени ЦП и покрытия индекса. Это может быть так умно, как вы хотите.

0 голосов
/ 12 августа 2008

Если вы пишете запросы в SQL Management Studio, вы можете ввести: SET STATISTICS TIME ON и SQl Server сообщит вам, сколько времени понадобилось отдельным частям запроса для анализа, компиляции и выполнения. Вы, возможно, сможете зарегистрировать эту информацию, обработав событие InfoMessage класса SqlConnection (но я думаю, что использовать SQL Profiler намного проще.)

...