2016-06-27 4 views
2

Azure Diagnostics verschiebt Windows-Ereignisse in eine Speichertabelle "WADWindowsEventLogsTable".Falsche Leistung beim Filtern von Azure-Protokollen - WCF Data Services-Filter

Ich möchte diese Storage-Tabelle mit VisualStudio (2015) und CloudExplorer abfragen.

Wie diese Tabelle einen großen Inhalt hat, bin ich auf unbestimmte Zeit für die Ergebnisse warten ..

Hier ist eine Abfrage Beispiel:

EventId eq 4096 and Timestamp gt datetime'2016-06-24T08:20:00' and Timestamp lt datetime'2016-06-24T10:00:00' 

Ich nehme an, dass diese Abfrage ist richtig?

Gibt es eine Möglichkeit, die Leistung zu verbessern?

  • Filterergebnisspalten?
  • nur TOP X-Ergebnisse zurückgeben?
  • weitere nützliche Tipps?

Ich weiß, dass ein besserer Weg wäre, das zu skripten; zum Beispiel unter Verwendung von Python, aber ich würde die Benutzeroberfläche so viel wie möglich zu verwenden, wie ..


(Edit) folgende Gaurav Mantri Antwort ich diesen kleinen C# -Programm verwendet, um meine Abfrage. Die Antwort ist so schnell, und dass mein erstes Performance-Problem lösen:

static void Main(string[] args) 
    { 
     string startDate = "24 June 2016 8:20:00 AM"; 
     string endDate = "24 June 2016 10:00:00 AM"; 

     string startPKey = convertDateToPKey(startDate); 
     string endPKey = convertDateToPKey(endDate); 
     Debug.WriteLine("(PartitionKey gt '" + startPKey + "'" 
      + " and PartitionKey le '" + endPKey +"')" 
      + " and (EventId eq 4096)" 
      ); 
    } 

    private static string convertDateToPKey(string myDate) 
    { 
     System.DateTime dt = System.Convert.ToDateTime(myDate); 
     long dt2ticks = dt.Ticks; 
     string ticks = System.Convert.ToString(dt2ticks); 
     return "0" + ticks; 
    } 

NB: für die, wie ich, die so weit weg suchen, wie die Ergebnisse in eine CSV-Datei zu exportieren, sollen Sie wissen, dass dieses Symbol Ihre Antwort (und es ist kein ‚rückgängig machen‘;)): CloudExplorer-Table-Export action button

Antwort

2

In Ihrer Anfrage, sind Sie auf Timestamp Attribut Filtern, die nicht indiziert ist (nur PartitionKey und RowKey Attribute indiziert). Daher führt Ihre Abfrage einen vollständigen Tabellenscan durch (d. H. Geht vom ersten Datensatz bis zu dem Zeitpunkt, zu dem sie einen übereinstimmenden Datensatz findet) und ist daher nicht optimiert.

Um einen vollständigen Tabellenscan zu vermeiden, verwenden Sie bitte PartitionKey in Ihrer Abfrage. Im Fall von WADWindowsEventLogsTable repräsentiert die PartitionKey im Wesentlichen den Datum/Uhrzeit-Wert in Ticks. Sie müssten den Datums-/Uhrzeitbereich, für den Sie die Daten erhalten möchten, in Ticks umwandeln, davor einen 0 voranstellen und ihn dann in der Abfrage verwenden.

So Ihre Frage wäre so etwas wie:

(PartitionKey gt 'from date/time value in ticks prepended with 0' and PartitionKey le 'to date/time value in ticks prepended with 0') and (EventId eq 4096) 

ich einen Blog-Post über es vor einiger Zeit geschrieben, die Sie nützlich finden können: http://gauravmantri.com/2012/02/17/effective-way-of-fetching-diagnostics-data-from-windows-azure-diagnostics-table-hint-use-partitionkey/

Verwandte Themen