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