Sonntag, Januar 13, 2013

Row Chaining und Session-Statistiken

Jonathan Lewis hat in seiner neuesten Quiz Night nach der Anzahl der Sätze in einer Tabelle gefragt, für die in den Session-Statistiken für table scan rows gotten ein Wert von 329922 erschien und außerdem 645 table fetch continued row aufgetreten sind. Tatsächlich enthielt die Tabelle nur 10000 rows, aber für den Zugriff auf das zweite row piece werden im Fall von row chaining - und unabhängig davon, ob es Block-Grenzen überschreitet - deutlich höhere Werte für table scan rows gotten angegeben, als man erwarten würde. Wenn man das Beispiel mit wenigen Datensätzen nachvollzieht, dann ergibt sich zunächst ein Muster für die Berechnung der table scan rows gotten, das folgendermaßen aussieht:

table scan rows gotten
rows       piece1          piece2
----       ------          ------
   1            2               4
   2            4              12
   3            6              24
   4            8              40
   5           10              60
...
  10           20             220

Bis dahin sieht's für die Angabe für piece 2 nach folgender Formel aus:
rows * ((rows * 2) +2)
Allerdings ändert sich das Muster relativ bald, wenn man höhere Satzanzahlen erreicht. Ich hatte vor kurzem mal ein paar Beobachtungen zum row chaining notiert, aber da mein Beispiel nur einen einzigen Satz enthielt, war mir das seltsame Verhalten der table scan rows gotten-Angabe nicht aufgefallen.

Nachtrag 16.01.2013: In einem ziemlich ausführlichen Kommentar falsifiziert der Herr Lewis meine Hypothese, dass die Statistik table fetch continued row etwas über die Anzahl der block-übergreifenden chainings aussagt. Ich habe dann auch noch einen übersichtlichen Test mit einer Tabelle mit 300 Spalten und 100 rows durchgeführt, bei dem ich im block dump 10 block-überschreitende Verkettungen beobachtete, aber für table fetch continued row beim Zugriff auf eins Spalte des zweiten pieces den Wert 24 erhalte (während die Statistik für Zugriffe auf Spalten des ersten pieces immer 0 liefert). Anscheinend hat die Angabe weder zur Anzahl der betroffenen Blocks (im Test 5) noch zum block-übergreifenden chaining einen direkten Bezug. Mein Test unterstützte immerhin eine weitere Annahme, nämlich die, dass die table scan rows gotten für den Zugriff auf das erste piece der Gesamtzahl der vorhandenen pieces entspricht, denn bei 100 rows und 10 block-überschreitenden Verkettungen kam ich für die Statistik auf den Wert 210.

Keine Kommentare:

Kommentar veröffentlichen