Verschwundener Hint

Ich betrachte Hints als ein Instrument, das man mit Bedacht einsetzen und in Produktivsystemen nach Möglichkeit vermeiden sollte, habe sie aber auch dort schon eingesetzt, wenn ich mir anders nicht zu helfen wusste. Darüber hinaus denke ich, dass sie zu Diagnosezwecken ausgesprochen nützlich sind. Hints weisen den Optimizer dazu an, im Falle bestimmter Entscheidungen einer Vorgabe zu folgen (und sind somit keine Empfehlungen, sondern Direktiven), wodurch sich Fehler des Optimizers korrigieren lassen, aber unter Umständen (more...)

Session-spezifische Statistiken für GTT in 12c

Stefan Koehler, der im SAP on Oracle Blog mit schöner Regelmäßigkeit hochinteressante und ausgesprochen fundierte Artikel veröffentlicht, weist darauf hin, dass es in 12c möglich ist, Session-spezifische Statistiken für Global Temporary Tables (GTT) zu erzeugen. Vor 12c überschrieb der letzte dbms_stats-Aufruf die GTT-Statistiken jeweils, was für die erzeugende Session günstig war, für alle anderen Sessions aber eher nicht. Mit 12c werden die Statistiken pro Session gehalten und bei der Optimierung korrekt ausgewertet. In der (more...)

SYS_OP_MAP_NONNULL in 12c dokumentiert

Ein interessanter Hinweis von Sayan Malakshinov: die nützliche Funktion SYS_OP_MAP_NONNULL ist in 12c dokumentiert. Grundsätzlich ist die Funktion ein Hilfsmittel, um NULL mit NULL gleichsetzen zu können (was ohne dieses Hilfsmittel nicht true, sondern auch wieder NULL wäre). Ein paar Hinweise zu ihren Einsatzmöglichkeiten und Limitierungen hatte ich gelegentlich hier vermerkt.

Schwächen des Optimizers mit MINUS

Jonathan Lewis zeigt in seinem Blog, dass der Optimizer bei MINUS-Operationen nicht unbedingt immer das Offensichtliche erkennt: sein Beispiel selektiert aus einer Tabelle ohne Datensätze von der eine sehr große Menge über MINUS abgezogen wird. Angesichts der Tatsache, dass nach dem Scan der ersten Tabelle klar sein sollte, dass die Ergebnismenge leer bleiben wird, könnte man erwarten, dass der Optimizer auf den Scan der zweiten Tabelle verzichten kann - aber das tut er nicht. Der (more...)

DBMS_REDEFINITION und Massenupdates

Eine der von mir am häufigsten zitierten Antworten auf Oracle-Performance-Fragen ist Tom Kytes schöner Satz: "If I had to update millions of records I would probably opt to NOT update." Er bezieht sich darauf, dass Massenupdates eine sehr teure Operation darstellen, da sie Änderungen an jedem betroffenen Block und große Menge von redo und undo hervorrufen. Effizienter ist stattdessen der Neuaufbau der geänderten Datenmenge über CTAS in einer Hilfstabelle und die anschließende Umbenennung (more...)

Multiplikation von Wahrscheinlichkeiten mit Analytics

Mein langjähriger Kollege Christoph Jung hat in seinem Blog ein schönes Beispiel dafür veröffentlicht, wie man Lücken im verwendeten SQL-Dialekt durch Umstellungen des Ermittlungsverfahrens überbrücken kann. Im gegebenen Fall fehlt eine analytische Multiplikationsfunktion, aber Christoph, der die arkane Kunst der Mathematik deutlich tiefer durchdrungen hat als ich, erinnert daran, dass man eine Multiplikation von Werten in die Addition ihrer Logarithmen umwandeln kann, und liefert eine komplexe Query zur Multiplikation von Wahrscheinlichkeiten und Ermittlung von Konfidenz-Intervallen.

100K

Reichlich spät fällt mir auf, dass mein Blog die Marke von 100.000 Besuchen überschritten hat - ich sage bewusst Besuche, da es sich natürlich nicht um so viele Besucher handelt. Wenn ich davon ausgehe, dass davon ca. 75.000 durch meine eigenen Aufrufe begründet sind und 20.000 von Leuten stammen, die direkt wieder umgekehrt sind, als sie feststellten, dass nur die SQL-Kommandos als Englisch durchgehen mögen, bleiben doch ein paar tausend Klicks, die (more...)

Noch ein paar nette 12c Features

Julian Dontcheff nennt in seinem Blog zwölf neue Features, die mit 12c verfügbar geworden sind. Die meisten habe ich hier wahrscheinlich schon mal erwähnt, aber sehr interessant finde ich:
  • die Option DISABLE_ARCHIVE_LOGGING mit der man die Erzeugung von redo log Informationen beim Import massiv reduzieren kann (was nach dem Import natürlich ein neues Basis-Backup erforderlich macht).
  • die TRUNCATE CASCADE Option, die für alle über referentielle Constraints verbundenen Child-Tabellen ein Truncate ausführt, wenn die Parent-Tabelle truncated (more...)

Servicepacks für den SQL Server

Brent Ozar zeigt in seinem Blog eine interessante Auswertung: seit November 2012 hat Microsoft keine neuen Servicepacks mehr veröffentlicht - und er stellt die Frage:
what if Microsoft just stopped releasing SQL Server service packs altogether, and the only updates from here on out were hotfixes and cumulative updates? How would that affect your patching strategy? Most shops I know don’t apply cumulative updates that often, preferring to wait for service packs. There’s an impression (more...)

Optimierung durch Umformulierung

Mein Kollege Christian hat mir dieser Tage den Hinweis auf eine neue Webseite zum Thema SQL Optimierung geschickt, den High-Performance SQL Blog, dessen erster Artikel sich mit der Möglichkeit der Optimierung von Count Distinct Operationen durch Auslagerung in In-Line Views beschäftigt. Vorgeführt werden die Effekte am Beispiel Postgres und führen dort nach Aussage der Autoren zu einer 50 fachen Beschleunigung der Operation (was sich im etwas reißerischen Titel Use Subqueries to Count Distinct 50X (more...)

Online -Reorganisation für Partitionierte Tabellen mit 12c

Richard Foote schreibt in seinem Blog über die Möglichkeiten der Online Reorganisation von Tabellen in den Releases 11 und 12:
  • ALTER TABLE ... MOVE ONLINE ist keine gültige Option, da die ONLINE-Option nur für IOTs verfügbar ist.
  • ein ALTER TABLE ... MOVE kann nicht erfolgen, wenn andere Sessions offene Transaktionen mit DML auf die Tabelle durchführen ("ORA-00054: resource busy and acquire with NOWAIT (more...)

Probleme mit table functions und cardinality Hints

Matthias Rogel weist auf ein Problem hin, das sich bei der Kombination der nützlichen (allerdings auch undokumentierten) Hints cardinality (bzw. der entsprechenden aktuellen Variante opt_estimate - mit denen man dem Optimizer Informationen zur tatsächlichen Größe eines Zwischenergebnisses geben kann) und materialize (zur Materialisierung einer CTE) mit table functions ergibt (für die die Größenabschätzungen bekanntlich immer problematisch sind - Details zum Thema und zu den möglichen Lösungen findet man bei Adrian Billington): in einem solchen (more...)

Schnelle Datensatz-Generierung

Im OTN Forum hat sich dieser Tage ein Thread mit einer recht interessanten Diskussion zum Thema der schnellsten Möglichkeit zur Erzeugung einer großen Mengen von Test-Datensätzen ergeben. Ausgangspunkt war, dass der Fragesteller des Threads mit der Performance eines INSERT mit einer connect by level Generierung von 10 Millionen Datensätzen nicht zufrieden war und nach schnelleren Optionen suchte. David Berger schlug eine PL/SQL-Lösung mit Collections und Bulk Insert vor, die tatsächlich im System des OP zu (more...)

Informationen zu den X$-Tabellen

Tanel Poder hat dieser Tage offenbar eine Artikelserie zu den X$-Tabellen begonnen - so jedenfalls deute ich die Angabe Part 1 im Namen des ersten Artikels -, die den dynamischen Performance-Views (V$) zugrunde liegen:

Full Table Scan für sehr kleine Tabellen

Jonathan Lewis zeigt in seinem Blog, dass in einem ASSM-Tablespace auch für eine Tabelle, die nur eine geringe Zeilenanzahl enthält (im Beispiel genau einen Datensatz), abhängig von mehr oder minder zufälligen Faktoren (vor allem der process id) relativ viele consistent gets für den full table scan erforderlich sein können (im Beispiel 22 consistent gets and nicht die 3, die man vielleicht in einem MSSM-Tablespace erwarten würde). Ein derart unglücklich erzeugte Tabelle kann man durch ein (more...)

Intervallbildung mit Tabibitosan

Auf die vom japanischen Oracle ACE Aketi Jyuuzou vor einigen Jahren im OTN-Forum vorgestellte Tabibitosan-Technik zur Bildung von Intervallen und insbesondere zur Ermittlung von Intervall-Lücken, habe ich hier vor einiger Zeit schon einmal hingewiesen. Jetzt hat Rob van Wijk in seinem Blog ein deutlich umfassenderes Beispiel zu den Möglichkeiten dieses nützlichen Werkzeugs veröffentlicht, und dabei auch die Performance des Verfahrens untersucht.

Zugriff über Index-Kombinationen

Jonathan Lewis hat in den letzten Tagen zwei Artikel veröffentlicht, die sich mit den Möglichkeiten der Kombination von Indizes beim Zugriff beschäftigen. Üblicherweise entscheidet sich der Optimizer bekanntlich für einen der existierenden Indizes, der ihm am besten geeignet erscheint, um einen selektiven Zugriff zu gewährleisten und verwendet weitere Bedingungen als (more...)

SQL Server 2014: neuer Cardinality Estimator

Benjamin Nevarez weist auf den neuen cardinality estimator hin, der im SQL Server 2014 neben das alte Schätzungsverfahren tritt, dessen initiale Version mit dem SQL Server 7.0 im Dezember 1998 erstmals auftrat. Leider weist der Artikel auch gleich darauf hin, dass es nicht allzu wahrscheinlich ist, dass Microsoft detailliert (more...)

Parallel Full Segment Scans über den Buffer Cache

Tanel Poder weist in seinem Blog in zwei Artikeln darauf hin, dass Parallel Execution Slaves vor 11.2 bei der Durchführung von full segment scans (FTS, IFFS) immer direct path reads verwendeten (wobei allerdings zusätzliche single block und multi block Zugriffe aus dem Buffer Cache erfolgen konnten - etwa für (more...)

Plötzliche Änderung von Query-Laufzeiten

Jonathan Lewis hat eine interessante Liste veröffentlicht, die mögliche Gründe für eine plötzliche Verlangsamung einer Query, die vorher deutlich schneller ausgeführt wurde, aufführt - der umgekehrte Fall ist natürlich auch denkbar, führt aber seltener zu Beschwerden.