So messen Sie Key Lookups pro Sekunde in SQL Server

7

Ich arbeite daran, die Anzahl der Transaktionen zu reduzieren, die Schlüsselsuchen auf unseren SQL-Servern durchführen.

Zuerst möchte ich eine Basislinie für die normale oder tolerierbare Anzahl für diese Metrik definieren und da wir ständig Releases in der Produktion haben, möchte ich darauf basierend eine Automatisierung erstellen, die mich benachrichtigt, wenn es nach Süden geht.

Das Problem, das ich habe, besteht darin, entweder auf perfmon oder einer SQL-DMV den richtigen Zähler zu finden, von dem die Daten abgerufen werden können.

Ich habe mir das offensichtliche Objekt SQL Server, Access Methods Object , angesehen und konnte noch kein bestimmtes finden. Ich habe auch andere Zähler oder SQL-Ansichten ausprobiert, konnte sie jedoch nicht finden.

Anregungen wäre sehr dankbar!

Salvador L.
quelle

Antworten:

7

Ich kenne keinen vollständig genauen und zuverlässigen Weg, um dies zu verfolgen.

Eine Möglichkeit, zumindest etwas potenziell Nützliches zu erhalten, besteht darin, Snapshots von sys.dm_db_index_usage_stats zu speichern , insbesondere die user_lookupsSpalte für index_id 0 (RID-Suche) und 1 (Schlüsselsuche). Diese DMV kann aus vielen Gründen zurückgesetzt werden, einschließlich Datenbank- oder Instanzneustarts. Durch das Neuerstellen (aber nicht das Reorganisieren) und den Index wird auch der zugehörige DMV-Eintrag in SQL Server 2012 und höher gelöscht, was die Arbeit erschweren kann. Sie müssen Informationen ziemlich regelmäßig erfassen und anhand einer Heuristik entscheiden, ob die DMV zwischen den Erfassungen zurückgesetzt wird.

Die Indexverwendungsstatistik DMV gibt auch nur an, wie oft ein Plan mit einer Suche ausgeführt wird. Ein Plan, der eine einzelne Schlüsselsuche enthält, erhöht den Zähler um 1, unabhängig von der Anzahl der tatsächlich durchgeführten Suchvorgänge. Es wird auch erhöht, selbst wenn die Suche überhaupt nicht ausgeführt wird.

Die DMV sys.dm_db_index_operational_stats zeichnet die Anzahl der tatsächlich durchgeführten Singleton-Suchvorgänge auf, unterscheidet jedoch nicht zwischen Singleton-Suchvorgängen im Index und solchen, die aus einem Schlüssel- oder RID-Suchvorgang resultieren. Daher ist sie für Ihren Zweck nicht nützlich.

Singleton-Suchvorgänge sind ein anderer Name für Test-Scans, der vom Access Methods-Objekt gemeldet wird. Es gibt keine Möglichkeit, zwischen einer "normalen" Singleton-Suche in einem eindeutigen Index und einer Singleton-Suche zu unterscheiden, die sich aus einer Suche ergibt. Dies bedeutet, dass der Zähler für Zugriffsmethoden-Testscans für Sie nicht nützlich ist. Die AM-Zähler sind sowieso sehr verrauscht, und es gibt keine Möglichkeit, die Zähler mit einem bestimmten Index zu korrelieren.

Paul White 9
quelle
0

Eine gute Zusammenfassung von Michael J. Swart scheint darauf hinzudeuten, dass eine Schlüsselsuche Probe Scans/secunter den Access-Methoden für den Zähler zählt:

Schlüsselsuche ( Showplan Operator Documentation )

Dieser Operator wird auch als Lesezeichen-Suchoperator bezeichnet. Es zählt immer zum Leistungsindikator für Sondenscans / Sek. Es ist interessant, dass dieser Operator oft als Symptom für eine schlechte Leistung angesehen wird, obwohl er jeweils nur einen Datensatz erhält. Das liegt daran, dass die Anzahl der Hinrichtungen groß werden kann. Viele Ausführungen können die Leistung der Abfrage beeinträchtigen. Wenn Sie sich auf die Leistungsindikatoren konzentrieren, werden Sie feststellen, dass jede dieser Ausführungen für den Leistungsindikator von Probe Scans angerechnet wird.

Obwohl die Verwendung des Leistungsindikators nur eine Nummer ergibt. Sie müssten immer noch in den Plan-Cache graben, um die spezifischen Abfragen zu finden, die die Schlüsselsuche haben. Welches ist möglich .

Hinweis : Der Link oben zum Showplan-Operator ist der Link zu Michael, aber ich habe zufällig die aktuelle Dokumentation in MSDN gefunden, die etwas aktuellere Informationen enthält: Showplan Logical and Physical Operators Reference


quelle
2
Leider werden Nicht-Lookup-Singleton-Suchvorgänge in einem eindeutigen Clustered-Index auch als Probe-Scans gemeldet. Daher kann dies nicht verwendet werden, um einen Key / RID-Lookup von einem Gleichheits-Suchvorgang in einem eindeutigen Clustered-Index zu unterscheiden.
Paul White 9