Dienstag, Mai 12, 2015

Degenerierte Indizes

Seit ich begonnen habe, mich mit Datenbanken zu beschäftigen, lautet eine der populärsten Fragen in Oracle-Foren: mit welcher Häufigkeit soll ich meine B*Tree-Indizes neu aufbauen lassen? Zu behaupten darüber hätten Kriege stattgefunden, wäre vielleicht ein wenig übertrieben - aber heftige Auseinandersetzungen waren es allemal. Inzwischen ist dieser Konflikt weitgehend zur Ruhe gekommen, was vermutlich damit zusammen hängt, dass die Antwort eigentlich unstrittig ist: Oracles Implementierung von Indizes macht Rebuilds weitgehend unnötig - sie sind nur für seltene Fälle mit besonderen Bedingungen für die zugehörigen DML-Operationen relevant. Richard Foote hat sich schon vor mehr als zehn Jahren in Oracle B-Tree Index Internals: Rebuilding The Truth mit den Aussagen der Befürworter von regelmäßigen Rebuild-Operationen auseinander gesetzt und diese widerlegt. Trotzdem findet man den Vorschlag solcher Rebuilds auch noch in jüngeren Publikationen, wobei die Formulierungen allmählich den Bereich unfreiwilliger Komik erreichen, was David Aldridge auf Richards Footes Webseite kommentierte:
Interesting quote from Page 728 of that book: “Even if index rebuilding were to be proven as [sic] a useless activity, the Placebo effect on the end users is enough to justify the task.”. It opens up a whole new class of performance tuning … perhaps it could be called “Faith-based Tuning”.
Jonathan Lewis schrieb dazu: "If the only effect is a placebo effect couldn’t you just tell the users that you had rebuilt the indexes rather than actually doing it?"

So viel zur Geschichte - wobei es sich aus meiner Sicht um Ausschnitte aus dem Kapitel zur Auseinandersetzung zwischen wissenschaftlicher und mythischer Welterklärung handelt. Aber der eigentliche Anlass für diesen Eintrag war ein anderer: Mohamed Houri hat gerade einen Artikel zu seiner Verwendung des Scripts Index Sizing von Jonathan Lewis veröffentlicht, mit dessen Hilfe er einen jener seltenen degenerierten Indizes identifizieren konnte, die tatsächlich von einem Rebuild profitieren - also deutlich komprimiert werden können. Letztlich leistet das Skript dabei nicht mehr (und nicht weniger), als die tatsächliche Größe eines Index mit der angesichts des Datenvolumens erwartbaren Minimalgröße zu vergleichen. Mohamed ergänzt dieses Ergebnis in seinem Artikel um eine Visualisierung der durch die Funktion sys_op_lbid ermittelten Anzahlen von Index-Einträgen pro Leaf-Block und diese Darstellung zeigt, dass es neben einer großen Zahl gut gefüllter Blocks (mit 422 Einträgen) eine noch größere Anzahl relativ schwach gefüllter Blöcke (mit 113 Einträgen) gibt. In seinem Kommentar zum Artikel erinnert Jonathan Lewis wiederum daran, dass hier womöglich das bekannte Problem der Vervielfältigung von ITL Einträgen im Spiel ist, das in solchen Fällen regelmäßig aufzutreten pflegt.

Vielleicht hätte ich mir (und meinen vorgestellten Lesern) den historischen Einstieg auch ersparen können, aber offenbar habe ich inzwischen das Alter erreicht, in dem man beginnt, von den alten Zeiten zu schwadronieren, in denen alles besser/schlechter/anders gewesen ist.

Kommentare:

  1. Hallo Martin,

    ich wollte mich nur mal für Deinen Blog bedanken - der Kommentar geht hier hin, da Du von "vorgestellten Lesern" sprichst. Nun, ich besuche Dein Blog regelmäßig und bin immer sehr dankbar für die Zusammenfassungen und Beiträge, da ich immer wieder auf Sachen stoße, die ich selber so nicht gefunden hätte, insofern sind es nicht nur "vorgestellte Leser" :-)

    Natürlich freue ich mich auch immer über Zusammenfassungen meiner eigenen Beiträge, da es mir auch hilft zu sehen, ob ich denn ein Thema so dargestellt habe, dass es andere auch gut nachvollziehen können, oder eben weniger gut. Auch dafür ein Dank.

    Und das mit den "vorgestellten Lesern": Ich habe auf meinem Blog auch kaum Kommentare, insofern aus der Perspektive auch eher das Gefühl, es interessiert niemanden groß, was ich da schreibe, insbesondere da ich ja vom fachlichen her tatsächlich eher für einen kleinen Kreis schreibe - ohne entsprechendes Vorwissen und Interesse kann man mit meinen Artikeln nur wenig anfangen.

    Allerdings weiss ich durch Feedback über andere Kanäle, dass es durchaus einige Leute interessiert, und es auch regelmäßige Leser gibt, und ich denke, bei Deinem Blog verhält es sich ziemlich ähnlich.

    Randolf

    AntwortenLöschen
    Antworten
    1. Hallo Randolf,
      herzlichen Dank für das freundliche Feedback: ich suche gerade nach einer Übersetzung für "You have made my day", lasse englische Begriffe hier aber bekanntlich auch gerne mal stehen, wenn mir nichts Passenderes einfällt.

      Über die Zahl meiner Leser will ich mich gar nicht ernsthaft beklagen: der eigentliche Sinn dieses Blogs war für mich eigentlich immer, mein mäßig zuverlässiges Gedächtnis dadurch zu unterstützen, dass ich nicht nur die Links zu interessanten Artikeln notiere, sondern auch eine kurze Zusammenfassung der aus meiner Sicht zentralen Punkte ergänze - dass das manchmal auch für andere Leser interessant ist, finde ich großartig. Den Fall Deines Blogs sehe ich da doch ein wenig anders: da stehen immer wieder Dinge drin, die, so weit ich sehe, außerhalb der zuständigen Oracle-Entwicklungsteams unbekannt sind (und wahrscheinlich auch oft genug innerhalb dieser Teams) - ich denke schon, dass da ein Kreis ausgesprochen kompetenter Fachleute mitliest; und da ist die Anzahl dann wohl nicht das entscheidende Kriterium.

      Noch mal Danke,

      Martin

      Löschen