DOAG Datenbank Kolumne: Kleines Feature mit wenig Aufwand bringt ordentlichen Performance-Boost

  • Erstellt von Jürgen Vitek
  • Datenbank Kolumne, Oracle, Datenbank

Alles begann mit einer geplanten Migration von Oracle 12c nach Oracle 19c beim Kunden.

Wie das so ist, hält man sich lange zurück, es läuft ja alles und man braucht auch nicht wirklich neue Features, dann lassen wir es halt. Aber eines Tages war dann auch die Hardware am Ende des Lifecycles angekommen, also muss man die Sache doch mal in Angriff nehmen.

Die ersten Testinstallationen und Migrationen wurden in Angriff genommen und die DB wurde auf Oracle 19c migriert und die Tests konnten beginnen.

... und wie das so ist, mit dem Essen kommt der Appetit und man (der Kunde) hat sich etwas mehr mit den Möglichkeiten von Oracle 19c auseinandergesetzt und ist auf den Oracle InMemory Column Store gestoßen. 

Wie ist das jetzt mit Lizenzen, da war doch was? Aber diese Fragen konnten sehr schnell aus der Welt geschafft werden, mit der eingesetzten Version von Oracle 19.18 war das Feature schon lange mit drin. Also gesagt getan und der Kunde hat damit losgelegt.

Es hat auch gar nicht lange gedauert bis ein ordentliches Ergebnis zu bestaunen war, die Abfragen konnten um ca. Faktor 10 beschleunigt werden.

Was musste gemacht werden:

Einrichten des InMemory Column Store: Hier wurden die entsprechenden Parameter in der DB gesetzt:

----------------------------------------------------------------------------------------------------

-- In Memory Column Store

----------------------------------------------------------------------------------------------------

SELECT * FROM v$parameter where NAME='compatible';   -- 19.0.0 ok

SELECT * FROM v$parameter where NAME='inmemory_size'; -- CDB=16 inherited PDB=16

SELECT * FROM v$parameter where NAME='inmemory_force'; -- on CDB and inherited on PDB; value=BASE_LEVEL means 16GB max

 

Danach müssen die gewünschten Tabellen im InMemory Column Store registriert werden:

ALTER TABLE my_table_1 INMEMORY PRIORITY CRITICAL;

ALTER TABLE my_table_2 INMEMORY PRIORITY LOW;

ALTER TABLE my_table_1 NO INMEMORY; -- deregister from inmemory storte

Checken lässt sich das dann ganz einfach:

SELECT t.table_name, t.inmemory, t.inmemory_compression FROM Dba_Tables t WHERE t.inmemory='ENABLED';

SELECT ROUND(s.bytes/1028/1028/1028,1) GB, s.* FROM v$im_segments s;

Hier noch einige Informationen zum Projekt (Schweizerisches Landesforstinventar LFI www.lfi.ch) von Rolf Meile (Datenbank- und GIS-Spezialist Eidg. Forschungsanstalt WSL):

"Wir haben das Feature für einige 'Datawarehouse'-Tabellen implementiert. Gemeint sind vier bis fünf Ableitungstabellen mit je 300 bis 800 Columns und etwa 12GB Daten. Das Limit für unsere Lizenz für den Column Store liegt bei 16GB. Einige Zehntausend im Voraus hergestellte Parametersets werden in der Folge – um statistische Resultattabellen zu produzieren – mit einer Phython-Applikation und viel dynamischem SQL auf die rund 2000 Columns (mit den abgeleiteten Daten) losgeschickt. Die erwähnten Ableitungstabellen werden via Primary Key (auch mit weiteren Business-Tabellen) gejoined.

Klassischerweise müsste man sich intensiv mit dem Setzen von Indices auseinandersetzen, da sämtliche Columns in verschiedenster Kombination in den WHERE-Clauses zum Einsatz kommen. Durch den Einsatz des Column Stores bezieht nun die parallellaufende Python-Applikation die Daten zur Statistikberechnung in etwa um Faktor 10 schneller als ohne das Feature."

Kunde: Eidg. Forschungsanstalt für Wald, Schnee und Landschaft WSL (www.wsl.ch)

Dank an Rolf Meile für die Unterstützung

 

Jürgen Vitek

stv. Themenverantwortlicher Hochverfügbarkeit und Open Source

 

 

 

 

 

 

© Silke