MV-Refresh mit out_of_place Parameter in 12c

Und wieder verweise ich auf Jonathan Lewis, der diesmal eine interessante neue (12c) Refresh-Option für Materialized Views vorstellt, die durch den Parameter out_of_place aufgerufen wird. Die Idee dabei ist sehr einfach: im Rahmen des Refreshs wird eine zusätzliche Hilfstabelle erzeugt und gefüllt, die dann am Ende der Operation gegen das bisher zur MV gehörende Segment ausgetauscht wird (über eine interne Folge von Rename-Operationen). Das Verfahren entspricht grundsätzlich einem Workaround, den der Herr Lewis in (more...)

Frequenz des ASH/AWR Samplings

Noch einmal Jonathan Lewis, diesmal mit einer Erläuterung des ASH- und AWR-Samplings von Session-Informationen:
  • einmal in jeder Sekunde werden die Informationen zu aktiven Sessions (state = 'ACTIVE') aus v$session nach v$active_session_history kopiert.
  • diese Snapshots werden als Sample bezeichnet.
  • ein Zehntel dieser Datensätze wird in der entsprechenden AWR-Tabelle dba_hist_active_sess_history persistiert.
  • Es handelt sich aber nicht um jeden zehnten Datensatz, sondern um die Datensätze der zehnten Sekunde. Im Ergebnis sieht die enthält die AWR-Tabelle also einen (more...)

ANSI Join Syntax und das 1000-Spalten-Limit

Mein Titel klingt mal wieder wie der Name einer eher lieblos fortgeschriebenen Krimi-Serie, aber wahrscheinlich gelingt es mir eher, den Eintrag über eine solche Überschrift wiederzufinden, als anhand des Titels ANSI expansion, den Jonathan Lewis seinem Artikel gegeben hat, den ich hier abkürzend nacherzähle. Worum es geht ist Folgendes: im OTN-Forum wurde ein gut beschriebener Testfall vorgelegt, in dem ein ANSI-Join (mit recht breiten Views) in 12c (aber nicht in 11g) einen Fehler "ORA-01792: (more...)

Function Based Index mit Trunc-Funktion für Date-Spalten

Franck Pachot erwähnt eine interessante Verbesserung in der Behandlung von Indizes in jüngeren Oracle-Versionen: seit 11.2.0.2 können funktionsbasierte Indizes, die die Trunc-Funktion für ein Datum beinhalten, auch verwendet werden, um eine Query zu unterstützen, in der auf das Datum ohne die Funktion eingeschränkt wird (also z.B. über einen Datums-Range). Das ist in der Beschreibung einmal mehr unhandlich, sollte aber durch ein kleines Beispiel leicht zu verdeutlichen sein:

drop table t;

create (more...)

Hybrid Hash Distribution für Parallele Operationen in 12c

Randolf Geist hat in jüngerer Vergangenheit einige Artikel zu den in 12c eingeführten Features mit Bezug zur Parallel Execution geschrieben. Darunter findet man:

Komprimierung in Oracle Versionen und Varianten

Noch mal Franck Pachot - diesmal mit einer schönen Darstellung der Verfügbarkeit unterschiedlicher Komprimierungs-Features in den Oracle-Releases und Editionen:
  • NOCOMPRESS: die einzige Option in der Standard-Edition.
  • BASIC COMPRESSION for bulk load: gibt es in der Enterprise Edition seit 9i und erfordert nicht die Lizenzierung zusätzlicher Optionen. In 12c lautet die offizielle Syntax zur Verwendung: ROW STORE COMPRESS BASIC; das schlichte Schlüsselwort COMPRESS funktioniert aber auch noch.
  • ADVANCED COMPRESSION for OLTP: seit 11g verfügbar; seit 12c ist (more...)

Optimierung mit mehreren Unbekannten

Franck Pachot hat im dbi Blog eine kleine Serie von Artikeln begonnen, in denen er eines der klassischen Anti-Pattern der SQL Entwicklung untersucht - generische Queries mit mehreren AND-verknüpften Bedingungen der Form:
column_value = NVL(:bindewert, column_value)
Diese Konstrukte dienen dazu, dem Anwender die Möglichkeit zu geben, eine Ergebnismenge durch eine Eingabe einzuschränken, wobei der Verzicht auf eine Eingabe keine Einschränkung nach sich ziehen soll. Von der Anwendungslogik her ist das durchaus plausibel, aber der Optimizer (more...)

Datensätze generieren

Das Thema ist nicht neu, aber bei der Gestaltung komplexerer SQL-Logik immer wieder von Interesse: wie generiere ich effizient eine größere Menge von Datensätzen mit einer eindeutigen id? Dazu hat Natalka Roshak eine kleine Serie gestartet, die bislang zwei Artikel umfasst, und in der zunächst vier verschiedene Verfahren vorgestellt werden:

-- rekursive Variante mit connect by level
select level id
from dual
-- rekursive Variante mit subquery factoring
connect by level <= 10;

with
(more...)

NVL und Count Stopkey

Ein kleiner - aber wichtiger - Hinweis vom Dom Brooks: für Queries mit einer rownum-Einschränkung ist normalerweise die COUNT STOPKEY Optimierung im Spiel, die die Ausführung der Operation abbricht, wenn die gewünschte Satzanzahl erreicht ist. Wenn man allerdings eine solche Einschränkung mit einer NVL-Funktion kombiniert, also etwa:
where  rownum <= nvl(:rn,rownum)
dann wird die Optimierung deaktiviert und die Ausführung bis zum bitteren Ende fortgesetzt.

Limit für die Verwendung von “colored SQL” im AWR

Das Automatic Workload Repository (AWR) gehört meiner Meinung nach zu den großartigsten Errungenschaften der jüngeren (oder auch nicht mehr ganz so jüngeren) Oracle-Geschichte, da es eine Historie von Abfragen und ihrer Performance bereitstellt. Allerdings ist diese Historie nicht vollständig, da sie auf Sampling basiert - es kann also vorkommen, dass interessante Queries nicht erfasst werden. Um dieses Problem zu lösen, wurde in 11g die Routine dbms_workload_repository.add_colored_sql eingeführt, die es ermöglicht Abfragen "einzufärben", was nichts anderes (more...)

Row Pieces in Tabellen mit mehr als 255 Spalten

Jonathan Lewis listet einige der Gründe, die gegen die Verwendung von Tabellen mit mehr als 255 Spalten sprechen - bekanntlich führt diese Spaltenanzahl zur Aufteilung einer row in mehrere row pieces, und damit zu inter- oder intra-row-chaining und sonstigem Ärger. Zu den unerfreulichen Effekten gehören:
  • in 10g führt die Statistikerfassung bereits bei weniger als 255 Spalten - nämlich bei etwa 165 Spalten - dazu, dass mehrere FTS erforderlich werden, um die Daten einzulesen.
  • das (more...)

“In-Memory” Postgres?

Vor einigen Tagen hat sich Josh Berkus mit der kontroversen Aussage "In-memory" is not a feature, it's a bug zu Wort gemeldet. Darin definiert er In-Memory Datenbanken als solche, denen die Möglichkeit fehlt, Daten auf die Festplatte zu schreiben, was folglich ihre Wiederherstellbarkeit einschränkt: "So an 'in-memory' database is a database with a major limitation." Das klingt erst mal polemisch und ist sicher auch so gemeint; möglicherweise trifft es auch nicht ganz die Grundidee (more...)

Neue Features für Parallel Execution in 12c

Parallele Ausführungspläne lassen mich in der Regel sehr vorsichtig werden, weil ich dabei gerne entscheidende Details übersehe - aber damit bin ich vermutlich kein Einzelfall. "It’s easy to make mistakes, or overlook defects, when constructing parallel queries", schreibt Jonathan Lewis in seinem jüngsten Artikel Parallel Rownum, in dem er einen Fall vorstellt, in dem ein parallelisiertes Select - mit ergänzter Rownum-Spalte - auf eine Tabelle sowie ein im Rahmen der gleichen Query mit einem (more...)

Material zu XPLAN_ASH

Randolf Geist hat vor kurzem eine neue Version (4.21) seines nützlichen XPLAN_ASH Tools veröffentlicht und dazu noch erläuterndes Material - insbesondere Video-Tutorials - geliefert:

SQLcl

Neues von SDSQL. Die Änderung, die als erstes auffällt, ist der neue Name SQLcl, der für sql command line steht. Keine ganz schlechte Idee, finde ich, denn SDSQL kam mir eher sperrig vor.

Aber auch inhaltlich gibt es mit der neusten Version des Tools wichtige Ergänzungen, über die Jeff Smith und Kris Rice informieren:
  • info Funktion: ein erweitertes DESC, das nicht nur die Spaltendefinitionen, sondern auch Informationen zu den Indizes und Constraints einer Tabelle liefert. (more...)

SQL Features in unterschiedlichen RDBMS

Eine sehr interessante Präsentation hat Markus Winand offenbar gerade auf der FOSDEM-Konferenz gehalten. Dafür spricht jedenfalls der Foliensatz dazu, den man auf seiner Webseite findet. Darin zeigt er, was seit SQL-92 alles an interessanten Features für SQL verfügbar wurde und liefert vor allem auch Informationen dazu, wann diese Möglichkeiten in den verbreitetsten RDBMS eingeführt wurden. Unter den vorgestellten Features sind:
  • Lateral Join
  • With clause (aka "subquery factoring" aka "common table expression (CTE)"; in postgres wird (more...)

Einzelne Query aus dem Shared Pool löschen

Eigentlich war ich mir ziemlich sicher, dass ich hier irgendwo einen Link auf Kerry Osbornes Erläuterungen zum Löschen einer einzelnen Query aus dem Shared Pool untergebracht hätte - aber anscheinend ist das nicht der Fall. Daher hole ich zunächst dieses Versäumnis nach:

In-Memory Performance

Gerade habe ich noch mal überprüft, dass es Fälle gibt, in denen ich Artikel aus dem Oracle Scratchpad von Jonathan Lewis hier nicht verlinke. Das geschieht aber selten und gewöhnlich nur aus Gründen der Trägheit. Allerdings ist in der Tat nicht jeder Artikel von gleicher Bedeutung, manchmal sind die Themen auch relativ abgelegen und betreffen seltene Ausnahmefälle. Der aktuelle Artikel In-memory DB jedoch befasst sich mit einer recht grundsätzlichen Frage: wieso ist eine (column-store) In-Memory (more...)

Oracle Sample Schemas auf GitHub

Wieder nur eine kurze Notiz, aber eine mit einem aus meiner Sicht recht bedeutsamen Inhalt: wie man von Christopher Jones erfährt gibt es Oracles Beispiel-Schemata seit kurzem als Repository auf GitHub:
This repository contains a copy of the Oracle Database sample schemas that are installed with Oracle Database Enterprise Edition 12c. These schemas are used in Oracle documentation to show SQL language concepts. The schemas themselves are documented in Oracle Database Sample Schemas, 12c Release (more...)

Größe des Initial Extents für Partitionierte Tabellen

Dom Brooks weist in seinem Blog auf zwei Punkte hin, von denen mir (wie ihm) der erste komplett entgangen war:
  • die Default-Größe des Initial Extents für partitionierte Tabelle ist seit 11.2.0.2 auf 8MB erhöht worden, davor betrug sie 64KB. Das kann im Fall geringfügig gefüllter Partitionen zur Verschwendung von Speicherplatz führen, wobei solche Partitionen natürlich unter Umständen auch ein Anlass sein könnten, über die Partitionierungsstrategie nachzudenken.
  • der zweite Punkt war mir klar: (more...)