Ein Projekt, an dem ich kürzlich gearbeitet habe, musste die Timings unserer SQL-Abfragen überprüfen und sie im Debug-Modus an den Debug-Listener ausgeben. Auf diese Weise konnten wir das Timing der SQL-Abfragen und deren Ausführungszeit beurteilen sowie unseren Website-Code debuggen.
Ich tat dies, indem wir für die verwendeten 3 Arten von SQL-Methoden SQL-Abfragen in eine Wrappermethode zentralisieren aus:
- ExecuteQuery
- ExecuteNonQuery
- ExecuteScalar
Sie verwendet haben die Stoppuhr-Klasse, aber auch Code zum Umwandeln der Abfrage in eine SQL-Anweisung, ähnlich der in SQL Server Profiler.
Jede Methode war ähnlich der folgenden:
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");
}
}
}
Dies würde dann ausgegeben unsere SQL-Anweisungen in DebugView.exe wie folgt aus:
/*SQL*/ exec spsGetOrder @OrderNumber='234567' -- Rows returned = 1 ; 1 params |--> completed NonQuery in 0.0016144 seconds.
Das Schöne daran ist, dass, obwohl, ja, es ist ein Engpass für diese Anweisungen, können wir die Abfrage direkt in SQL-Profiler einfügen und die Ausgabe der Abfrage abrufen. Wenn Sie über ein Tool zum Anzeigen der Protokolldateien verfügen, können Sie mithilfe von regulären Ausdrücken überwachen, wo die benötigte Zeit in einem bestimmten Bereich liegt.
Also, wenn Sie nach Abfragen über 0 suchen wollen.5 Sekunden, können Sie nach dem Begriff suchen:
"in 0. [5-9] \ d +" < - Alles größer als 0,5 Sekunden oder "in [1-9] \ d +" < - - Alles größer als 1 Sekunde
Dies hat uns geholfen, unsere Bemühungen immens zu konzentrieren. Es hilft uns auch bei der Identifizierung, ob ein Problem datenbankbezogen oder, wie oben beschrieben, ein ASP.NET-Problem ist.
Schließlich gibt es ein Tool namens Fiddler, das Ihnen auch bei der Diagnose von Seiten helfen kann, wenn diese auf Ihren Computer gelangen. Dies gibt Ihnen Informationen wie Dateigröße, Verweise auf Bilder/CSS, Download-Zeiten. Dies ist auch sehr nützlich beim Diagnostizieren von ViewState-Größenproblemen.
Ich hoffe, das hilft