Автоматически измерять все SQL-запросы
-
08-06-2019 - |
Вопрос
В Возможно, нормализация — это ненормально Джефф Этвуд говорит: «Вы автоматически измеряете все запросы, которые проходят через ваше программное обеспечение, верно?» Я нет, но я бы хотел.
Некоторые особенности рассматриваемого приложения:
- АСП.НЕТ
- уровень доступа к данным, который зависит от Блок приложения доступа к данным библиотеки MS Enterprise
- MS SQL-сервер
Решение
В дополнение к упоминанию Брэдом SQL Profiler, если вы хотите сделать это в коде, то все вызовы вашей базы данных должны быть направлены через общую библиотеку..Вы вставляете туда временной код и вуаля, вы знаете, сколько времени занимает каждый запрос в вашей системе.
Единая точка входа в базу данных — довольно стандартная функция любого ORM или уровня базы данных — по крайней мере, так было в любом проекте, над которым я до сих пор работал!
Другие советы
SQL-профилировщик это инструмент, который я использую для мониторинга трафика, поступающего на мой SQL-сервер.Это позволяет вам собирать подробные данные о вашем SQL Server.SQL Profiler распространяется вместе с SQL Server, по крайней мере, с SQL Server 2000 (но, вероятно, и раньше).
Настоятельно рекомендуется.
Взгляните на эту главу, которую мы с Джеффом Этвудом написали об оптимизации производительности веб-сайтов.Мы рассматриваем много вещей, но есть много информации о трассировке и оптимизации базы данных:Ускорьте свой сайт:8 советов по повышению производительности ASP.NET
А Бродячие вещи В проекте на CodePlex есть класс для синхронизации блоков кода.Класс называется TimedLog.Он реализует IDisposable.Вы помещаете блок кода, который хотите синхронизировать, в оператор using.
Если вы используете рельсы, он автоматически регистрирует все SQL-запросы и время, необходимое для их выполнения, в вашем файле журнала разработки.
Я нахожу это очень полезным, потому что если вы видите что-то, что занимает некоторое время, достаточно просто скопировать и вставить его прямо с экрана/файла журнала и поставить перед ним «объяснение» в mysql.
Вам не нужно копаться в коде и восстанавливать происходящее.
Излишне говорить, что в производственной среде этого не происходит, поскольку примерно через час у вас закончится дисковое пространство.
Если вы определяете фабрику, которая создает для вас SqlCommands и всегда вызываете ее, когда вам нужна новая команда, вы можете вернуть RealProxy в SqlCommand.
Затем этот прокси-сервер может измерить, как долго ExecuteReader / ExecuteScalar и т. д.возьмите секундомер и запишите его где-нибудь.Преимущество использования этого метода перед Sql Server Profiler заключается в том, что вы можете получить полную трассировку стека для каждого выполненного фрагмента SQL.