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

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

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

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

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
6
0
868
7

Ответы 7

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по теме