Доступ к базе данных инструментов

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

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

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

12.08.2008 12:01:01
7 ОТВЕТОВ

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

1
12.08.2008 12:11:23

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

0
12.08.2008 12:27:58

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

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

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

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

1
12.08.2008 13:13:32

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

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

0
12.08.2008 13:54:22

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

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

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

0
12.08.2008 18:26:13

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

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

0
24.08.2008 16:32:42

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

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

0
25.05.2010 19:18:02