Formatter-Einstellung für SQLcl

Dass die Häufigkeit meiner Beiträge zuletzt weiter abgenommen hat, mag dem regelmäßigen Leser aufgefallen sein und dafür gibt es - wie in solchen Fällen üblich - berufliche und private Ursachen (im weitesten Sinne steht Arbeit im Weg). Um aber nicht völlig zu verstummen hier mal wieder ein Link: Jeff Smith erläutert in seinem Blog, wie man eine SQL-Query in SQLcl mit dem Befehl "format buffer" automatisch formatieren lassen kann. Zusätzlich zeigt er, dass man die (more...)

Serielle und parallele Update-Verarbeitung

Jonathan Lewis hat gestern in seinem Scratchpad danach gefragt, wie es dazu kommen kann, dass ein anscheinend parallelisierbares Update seriell verarbeitet wird, und stellt dazu ein umfangreiches Beispiel zur Verfügung. Die richtige - oder zumindest eine weitgehend richtige - Antwort auf die Quizfrage hat offenbar Franck Pachot geliefert, der darauf hinweist, dass ein paralleles Update in 12.1 für Tabellen mit SecureFile LOBs nur möglich ist, wenn die Tabelle partitioniert ist. Der Herr Lewis bestätigte (more...)

Oracle 12.2 VM

Dass Oracle 12.2 (endlich) zum download verfügbar ist, konnte man dieser Tage bereits in jedem Oracle-Blog lesen. Nett finde ich aber insbesondere, dass es dazu gleich auch eine Virtual Box Appliance gibt - worauf Jeff Smith hinweist. Da ich die Installation auf Dauer nicht so sagenhaft spannend finde, bin ich dafür durchaus dankbar.

Online Statistics Gathering in 12c

Maria Colgan hat in den letzten Wochen zwei Artikel zum Thema der Erfassung von Optimizer Statistiken bei der Objektanlage veröffentlicht:
  • Online Statistics Gathering: seit Oracle 9 werden die Statistiken für Indizes im Rahmen der Anlage eines Index automatisch erfasst: da in diesem Zusammenhang ohnehin ein Full Scan der Daten und Sortierungen erforderlich sind, kann man die zusätzliche Erfassung der Statistiken problemlos in die Operation integrieren. Mit Oracle 12c wird diese Technik jetzt auch für (more...)

Intra-block und inter-block chaining

Sayan Malakshinov erläutert in seinem Blog, wie intra-block chaining bei reinen insert Operationen zustande kommt und liefert dazu zunächst die Definitions-Grundlagen:
  • laut Doku gilt, dass Datensätze einer Tabelle mit mehr als 255 Spalten, in denen Spalten jenseits Nr. 255 Werte ungleich NULL enthalten "are likely to be chained within the same block. This is called intra-block chaining."
  •  intra-block chaining sollte keine Auswirkung auf die I/O performance haben (ist aber in den Session-Statistiken sichtbar).
  • Oracle (more...)

Interval-Reference Partitionierung in 12c

Früher einmal habe ich meine Blog-Beiträge selbst erdacht und geschrieben - inzwischen gebe ich sie gerne in Auftrag oder lasse sie in Auftrag geben. So auch hier: in der letzten Woche war Markus Flechtner von Trivadis bei uns im Haus und hat uns in die dunklen Geheimnisse von Oracle 12 eingeweiht. Viele Fragen blieben nicht offen, aber einer meiner Kollegen hatte ein paar Detailfragen zum Thema Interval-Reference-Partitionierung und row movement. Ich hätte es wahrscheinlich bei (more...)

Nicht deterministische JDBC-Anmeldeprobleme mit Oracle 11.2.0.3

Im Lauf der Woche bin ich einem Problem beim Zugriff auf eine Oracle-Datenbank via JDBC begegnet, das eine umfangreichere Schilderung verdient hätte - wenn Uwe Küchler diese Schilderung nicht schon vor einigen Jahren in seinem Blog unter Berücksichtigung aller relevanten Details durchgeführt hätte. Das Problem lag darin, dass Anmeldungen in manchen Fällen problemlos erfolgten, dann aber wieder in Timeouts liefen, ohne dass sich dafür auf Netzwerkebene eine Erklärung finden ließ. Verantwortlich ist die Verwendung von (more...)

Zur Semantik des USE_NL Hints

Ich erinnere mich, dass Jonathan Lewis diesen Punkt schon häufiger erwähnt hat, aber offenbar hatte er tatsächlich noch keinen Artikel dazu geschrieben, und dies jetzt nachgeholt: häufig sieht man in Oracle SQL-Queries Hints der folgenden Form:
use_nl(t1 t2)
Und es gibt wohl in der Tat viele Verwender, die davon ausgehen, dass man den Optimizer damit anweist, einen NESTED LOOPS Join zu verwenden, bei dem t1 via NL Join mit t2 verknüpft wird, wobei t1 die (more...)

Redundante Prädikate zur SQL Optimierung im SQL Server

Da ich nicht so oft lobende Erwähnungen auf anderen Webseiten erhalte, will ich nicht darauf verzichten, diese hier zu verlinken: mein alter Freund und ehemaliger Kollege Andrej Kuklin hat im SDX Blog einen Artikel veröffentlicht, der sich damit beschäftigt, wie man Queries im SQL Server durch die Ergänzung eigentlich redundanter Prädikate optimieren kann. In seinem Beispiel läuft eine Query mit einem Inner Join schnell, so lange über eine gegebene Variable auf ein bestimmtes Datum eingeschränkt (more...)

Maria Colgan antwortet bei AskTom

Ein vielversprechender Start ins Jahr 2017: Maria Colgan gehört jetzt neben Chris Saxon und Connor McDonald zum Team bei AskTom. Außerdem hat sie damit angefangen, in ihrem eigenen Blog zu schreiben. Da es vermutlich kaum jemanden gibt, der mehr über den Optimizer (oder ind In-Memory-Optionen) weiß als Frau Colgan, ist das eine günstige Entwicklung.

Neue Index-Features in 12.2

Richard Foote hat angekündigt, einige Artikel zu Index-Features, die in 12.2 ergänzt wurden, zu veröffentlichen. Ich werde versuchen, diese Artikel hier zusammenzufassen:

Attribut-Clustering und ein Jubiläum

Vor kurzem hat Connor McDonald eine Artikelserie zum Attribut-Clustering in 12c veröffentlicht, die im dritten Teil ein ziemlich seltsames Verhalten demonstriert. Ein Kommando:
alter table source_data add clustering by linear order(object_id);
führt zu einem erfolgreichen Clustering, während das Kommando:
alter table source_data clustering by linear order(object_id);
erfolgreich abläuft, aber anscheinend keinerlei Wirkung hat: das "add" hat also die entscheidende Wirkung. Randolf Geist hat in seinem Kommentar zum Artikel die naheliegende Frage nach dem Sinn der (more...)

Datenarchivierungs-Strategien in Oracle (Delete/Insert)

Jonathan Lewis hat vor kurzem zwei interessante Artikel zur Archivierung von Daten veröffentlicht, wobei die Anforderung so definiert ist, dass Daten via delete aus einer Tabelle gelöscht und die gleichen Datensätze per insert in eine zweite Tabelle eingefügt werden:
  • Delete/Insert: erläutert das grundsätzliche Problem: wie kann sichergestellt werden, dass die gleichen Daten, die aus der ersten Tabelle (t1) gelöscht wurden auch in der zweiten Tabelle (t2) eingefügt werden. Relativ einfach ist diese Anforderung mit (more...)

Bestimmung der Verwendung von Indizes in 12.2

Bis Oracle 12.2 zum Download verfügbar ist, werde ich mich damit wohl nur theoretisch beschäftigen - also durch die Lektüre von Artikeln zum Thema. Eine der besten Quellen solcher Artikel ist derzeit der Blog von dbi Services - insbesondere, wenn der zugehörige Autor Franck Pachot heißt. Einer dieser Artikel behandelt das in 12.2 eingeführte erweiterte Monitoring zur Index-Verwendung und liefert unter anderem folgende Informationen:
  • die View dba_index_usage liefert kumulierte Nutzungsstatistiken für jeden Index.
  • (more...)

Änderung der endpoint value Berechnung für Histogramme seit Oracle 11.2.0.4

Jonathan Lewis und vor ihm bereits Franck Pachot haben zuletzt darauf hingewiesen, dass in 11.2.0.4 eine Änderung der Berechnung der endpoint values für Histogramme von char und nchar (nicht aber varchar2 und nvarchar2) Spalten eingeführt wurde, die eine Neuerzeugung entsprechender Histogramme nach einem Upgrade von einer früheren Version erforderlich macht, da sich sonst recht bizarre costing-Effekte ergeben.

In Francks Test existiert eine Spalte mit den beiden Werten 'Y' und 'N', die massive (more...)

Granularität der SCN

Ich mache es mir immer leichter mit meinen Blog-Einträgen: diesmal beschränke ich mich auf einen Link zu einem Artikel von Frits Hoogland und zitiere dann einfach die dort gelieferte Zusammenfassung:
Changes in the database are synchronised by system change numbers, also known as SCNs. SCNs are the way Oracle serialises changes to data. However, this post shows that the Oracle engine tries to maximise the number of changes inside a SCN, and as such a (more...)

dbms_redefinition und deterministische Funktionen

Vor längerer Zeit war ich hier zum Ergebnis gekommen, dass rdbms_redefinition für komplexere Umbaumaßnahmen nicht verwendbar ist, weil man im Mapping keine komplexere Join-Logik oder Subselects unterbringen kann. Jetzt habe ich bei Connor McDonald gesehen, wie man es richtig macht: statt eines Joins  kann man im col_mapping eine deterministische Funktion unterbringen - und damit wird das Package noch mal deutlich interessanter.

Delta-Bestimmung mit Oracle

Dani Schnider hat vor einigen Wochen einen schönen Artikel veröffentlicht, in dem er verschiedene Möglichkeiten zur Bestimmung von Datenänderungen zwischen Quellsystem und Data Warehouse erläutert. Grundsätzlich kann in solchen Fällen ein Full (oder Left) Outer Join verwendet werden, der die Daten aus Quelle und Ziel miteinander abgleicht, und dabei gibt es drei relevante Fälle:
  • ein Datensatz existiert nur in der Quelle und nicht im Ziel: demnach wurde er neu erzeugt und muss im Ziel ergänzt (more...)

Cost Based Optimizer-Grundlagen

Randolf Geist, dessen englischsprachige Artikel ich hier gerne exzerpiere, hat für die Zeitschrift "Informatik Aktuell" einen Beitrag Cost Based Optimizer: Grundlagen – mit Update für Oracle 12c geschrieben. Dem aufmerksamen Leser ist jetzt vielleicht schon aufgefallen, dass Zeitschrift und Artikel offenbar deutschsprachig sind. Das einziges, was ich dazu ergänzen möchte, ist, dass ich den Artikel für eine der besten einführenden Zusammenfassungen zum Thema halte, die ich bisher gelesen habe - und mir fällt nichts Vergleichbares (more...)

Angemessene Indexgröße

Für All Things Oracle hat Jonathan Lewis vor einigen Wochen einen Artikel geschrieben, in dem er erläutert, wie man die angemessene Größe eines B*Tree Index bestimmen kann. Darin geht er davon aus, dass ein stabiler B*Tree Index in der Regel etwa 70% des verfügbaren Speichers in den Leaf-Blocks auslastet, während etwa 30% freier Speicher in den Leaf-Blocks verfügbar bleibt. Unter dieser Voraussetzung ist es möglich eine grobe Abschätzung zu geben, wie groß ein Index in (more...)