Проект, над которым я работал в последнее время, должен был проверить время наших запросов SQL и вывести их на прослушиватель отладки в режиме отладки. Таким образом, мы могли оценить время выполнения SQL-запросов и время их выполнения, а также отладить код нашего веб-сайта.
Я сделал это, централизовав SQL-запросы в метод-оболочку для 3 типов используемых нами SQL-методов:
- ExecuteQuery
- ExecuteNonQuery
- ExecuteScalar
Они действительно использовали класс Stopwatch, но также был код для преобразования запроса в оператор SQL, аналогичный тому, который можно увидеть в SQL Server Profiler.
Каждый метод был похож на следующее:
protected static object ExecuteScalar(SqlCommand comm, SqlParameter[] sqlParameters)
{
Stopwatch st = new Stopwatch();
bool errorDetected = false;
try
{
comm.Parameters.Add(sqlParameters);
using(comm)
{
st.Start();
object returnValue = comm.ExecuteScalar();
st.Stop();
return returnValue;
}
}
catch(Exception)
{
errorDetected = true;
st.Stop();
throw;
}
finally
{
string output = GetSqlStringForParameters(sqlParameters,st.Elapsed,QueryType.Scalar);
if(errorDetected)
{
Debug.WriteLine("/*SQL (Errored)*/" + output,"DataAccess.SqlAdapter.ExecuteScalar");
}
else
{
Debug.WriteLine("/*SQL*/" + output,"DataAccess.SqlAdapter.ExecuteScalar");
}
}
}
Это вывело бы наши операторы SQL в DebugView.exe так:
/*SQL*/ exec spsGetOrder @OrderNumber='234567' -- Rows returned = 1 ; 1 params |--> completed NonQuery in 0.0016144 seconds.
Прелесть этого в том, что, хотя, да, для этих операторов есть узкое место, мы можем вставить запрос непосредственно в профилировщик SQL и получить выходные данные запроса. Это также означает, что если у вас есть инструмент для просмотра файлов журналов, вы можете использовать регулярные выражения для отслеживания того, сколько времени занимает определенный интервал.
Так что, если вы хотите искать запросы, которые занимают более 0,5 секунд, вы можете найти термин:
"через 0. [5-9] \ d +" <- Все больше 0,5 секунд
или же
"в [1-9]. \ d +" <- все, что больше 1 секунды </p>
Это помогло нам сосредоточить наши усилия очень. Это также помогает нам определить, связана ли проблема с базой данных или, как указано выше, проблема ASP.NET.
Наконец, есть инструмент под названием Fiddler , который также может помочь вам диагностировать страницы по мере их поступления на ваш компьютер. Это дает вам такую информацию, как размер файла, ссылки на изображения / CSS, время загрузки. Это также очень полезно для диагностики проблем размера ViewState.
Надеюсь, это поможет