27 Stimmen

sql statistics io scan count erklärung

Eine einfache Frage, aber ich habe bei Google keine gute Erklärung gefunden. Wenn ich "Set Statistics IO ON" verwende, werden die logischen Lesevorgänge und die Anzahl der Scans im Nachrichtenfenster von Management Studio angezeigt. Wenn ich habe:

tblBeispiel, Anzahl der Scans 5, logische Lesungen 20

Was bedeutet die Anzahl der Scans?

0 Stimmen

Die Dokumentationen sind etwas verwirrend, aber gut beschrieben: docs.microsoft.com/de-us/sql/t-sql/statements/

24voto

Jeff Atwood Punkte 62123

Was ist ein "Tisch-Scan"? bedeutet Das Beste, was ich finden konnte, ist dies:

Die Anzahl der Suchvorgänge gibt einfach an, wie oft während der Abfrage auf die Tabelle oder den Index zugegriffen wurde. Dabei kann es sich um einen vollständigen Scan, einen Teilscan oder einen einfachen Suchlauf handeln.

Mit anderen Worten, die Anzahl der Scans allein ist nicht genügend Informationen um fortzufahren. Sie müssen wissen, welche Scans genau durchgeführt wurden - daher müssen Sie sich den tatsächlichen Ausführungsplan ansehen, um mehr Details zu erfahren. Unterm Strich ist dies keine sehr nützliche Metrik!

Zusätzlich:

http://www.eggheadcafe.com/software/aspnet/32171165/set-statistics-io-scan-count-explanation.aspx

Leider, Scan Count ist heutzutage nicht mehr sehr informativ . Hm, nun ja, Wenn Sie eine Zahl wie 19223 sehen, wurde auf die Tabelle wahrscheinlich durch eine verschachtelte Schleifenverbindung zugegriffen.

Es gab eine Zeit, in der "Anzahl der Scans" einfach "mal Tabelle zugegriffen" bedeutete, aber das ist schon lange her, vielleicht in SQL 6.5. Das einzige Mal, dass Sie einen einen Scan Count mit dieser Definition von 0 erhält, ist mit einer Abfrage wie ...

select *
from TestA1
where CompanyID = 1
and CompanyID = 2

... wo SQL Server in der Lage sein könnte, zu schließen, dass die Abfrage keine Zeilen zurückgeben wird keine Zeilen zurückgibt, ohne auf die Tabelle zuzugreifen.

18voto

SQLMenace Punkte 128184

Von Books On Line

Anzahl der Scans: Anzahl der durchgeführten Index- oder Tabellenscans.

logisch liest: Anzahl der aus dem Daten-Cache gelesenen Seiten.

physisch liest: Anzahl der von der Festplatte gelesenen Seiten.

Vorausschauendes Lesen: Anzahl der Seiten, die für die Abfrage in den Cache gestellt wurden.

Siehe auch hier: http://technet.microsoft.com/en-us/library/ms184361.aspx

17voto

Wenn Sie weiterhin msdn-Zitate sammeln möchten. Dann [1], die in [2] wiederholt wird:

  • " Logische Lesungen
    Dieser Wert gibt die Gesamtzahl der Seitenaufrufe an, die zur Bearbeitung der Abfrage erforderlich sind. Jede Seite aus dem Daten-Cache gelesen wird, unabhängig davon, ob es notwendig war, diese Seite für einen bestimmten Lesevorgang von der Festplatte in den Cache zu holen oder nicht . Dieser Wert ist immer mindestens so groß und in der Regel größer als der Wert für physische Lesevorgänge. Dieselbe Seite kann viele Male gelesen werden (z. B. wenn eine Abfrage von einem Index gesteuert wird), so dass die Anzahl der logischen Lesevorgänge für eine Tabelle größer sein kann als die Anzahl der Seiten in einer Tabelle.

  • Physikalische Lesungen
    Dieser Wert gibt die Anzahl der Seiten an, die von der Festplatte gelesen wurden; er ist immer kleiner oder gleich dem Wert der Logical Reads. Der Wert der Buffer Cache Hit Ratio, wie er von Performance Monitor angezeigt wird, wird aus den Werten für Logical Reads und Physical Reads wie folgt berechnet:

  • Vorausschauend lesen
    Der Wert Read Ahead Reads gibt die Anzahl der Seiten an, die während der Verarbeitung der Abfrage mit Hilfe des Read-Ahead-Mechanismus in den Cache eingelesen wurden. Diese Seiten werden nicht unbedingt von der Abfrage verwendet. Wenn eine Seite letztendlich benötigt wird, wird ein logischer Lesevorgang gezählt, ein physischer Lesevorgang jedoch nicht. Ein hoher Wert bedeutet, dass der Wert für Physical Reads wahrscheinlich niedriger ist und die Cache-Hit-Ratio wahrscheinlich höher ist als... [truncated by vgv8]

  • Anzahl der Scans
    Der Wert Scan Count gibt an, wie oft auf die entsprechende Tabelle zugegriffen wurde. Äußere Tabellen einer geschachtelten Schleifenverknüpfung haben einen Scan Count von 1. Für innere Tabellen kann der Scan Count die Anzahl der Zugriffe "durch die Schleife" auf die Tabelle sein. Die Anzahl der logischen Lesevorgänge ergibt sich aus der Summe des Scan Count mal der Anzahl der Seiten, auf die bei jedem Scan zugegriffen wurde. Aber auch bei geschachtelten Schleifen-Joins kann der Scan Count für die innere Tabelle als 1 angezeigt werden. SQL Server kann die benötigten Zeilen aus der inneren Tabelle in eine Arbeitstabelle im Cache kopieren und diese Arbeitstabelle für den Zugriff auf die eigentlichen Datenzeilen verwenden. Wenn dieser Schritt im Plan verwendet wird, gibt es oft keinen Hinweis darauf in der STATISTICS IO-Ausgabe. Sie müssen die Ausgabe von STATISTIC TIME sowie Informationen über den tatsächlich verwendeten Verarbeitungsplan verwenden, um den tatsächlichen Arbeitsaufwand für die Ausführung einer Abfrage zu ermitteln. Hash-Joins und Merge-Joins zeigen in der Regel den Scan Count als 1 für beide an der Verknüpfung beteiligten Tabellen an, aber diese Arten von Joins können wesentlich mehr Speicher beanspruchen. Sie können den memusage-Wert in sysprocesses einsehen, während die Abfrage ausgeführt wird, aber im Gegensatz zum physical_io-Wert ist dies kein kumulativer Zähler und gilt nur für die aktuell laufende Abfrage. Sobald eine Abfrage beendet ist, gibt es keine Möglichkeit zu sehen, wie viel Speicher sie verbraucht hat."

[1]
Kapitel 4. Fehlerbehebung bei der Abfrageleistung. Überwachung der Abfrageleistung
Einblick in Microsoft® SQL Server™ 2005 : Abfrageabstimmung und -optimierung
von Kalen Delaney


Herausgeber: Microsoft Press
Erscheinungsdatum: September 26, 2007
Druck ISBN-10: 0-7356-2196-9
Gedruckt ISBN-13: 978-0-7356-2196-1
Seiten: 448

[2]
Überwachung der Abfrageleistung
Optimierung der Abfrageleistung
Von Ron Soukup, Kalen Delaney
Kapitel 14 aus Inside Microsoft SQL Server 7.0, veröffentlicht von Microsoft Press
http://technet.microsoft.com/en-us/library/cc917719.aspx#ECAA

10voto

Martin Smith Punkte 417623

-1voto

Irawan Soetomo Punkte 1307

Ignorieren Sie den Scan Count, er ist nicht wichtig. Konzentrieren Sie sich darauf, wie Sie die logischen Lesevorgänge verringern können. Basierend auf http://www.practicalsqldba.com/2013/07/sql-server-performance-tuning.html .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X