
Service-Hotline
![]()
Support-Hotline
![]()
max. 12 Cent/Min. aus dem Festnetz der Deutschen Telekom
Email
info@remote-dba.info
Aktuelle Downloads
Interessante Information als PDF.
Oracle Outsourcing als Alternative - ASPICON Business Whitepaper, kostenlos (PDF)Auszeichnung als innovativstes Produkt in der Kategorie Outsourcing beim Innovationspreis ITK 2007Aktuelle Meldungen
Java-Regexp-PL/SQL nahezu 6-mal schneller als PL/SQL-RegExp!
Datum 04.01.2012
Ein kleiner Eingriff mit großer Wirkung:
Für die Betreuung unserer zahlreichen zufriedenen Remote-DBA- Kunden setzen wir, die Firma ASPICON, seit einiger Zeit eine eigens angepasste System-Monitoring- und Management – Plattform ein.
Unseren Kunden bieten wir dabei immer einen optimalen Service. Um dies noch zu toppen, suchten wir eine Möglichkeit das automatische Einordnen (“Acknowledgement”) von Alarmen und den zu montierenden Ressourcen bei stetig steigenden Kundenzahlen zu beschleunigen.
Die große Herausforderung hierbei lag darin, dass am Ende sehr viele reguläre Ausdrücke für das Matching von Eigenschaften und Zusammenhängen angewendet werden müssen. Zu beachtende Faktoren hierbei waren z.B.: Alarme, Alarm-Setups, Kunden, Rechner, Datenbanken, Wartungszeiträume, bekannte/existierende Problemzustände, Zeit- und Datumsmuster oder auch verschieden priorisierte Einordnungsregeln (“Acknowledgement States”). Da sich die Systemzustände stetig ändern, müssen viele dieser Berechnungen in kurzen Zeitabständen aktualisiert werden. Damit wird verhindert, dass keine wichtigen Alarmzustände oder deren Aufhebung verpasst werden.
Konkret wurde nun eine zentrale PL/SQL-Funktion als Flaschenhals identifiziert, welche diese Regeln größtenteils kapselt und mit Hilfe der Oracle-eigenen Funktion regexp_like hauptsächlich abbildet.
Da Java mittlerweile in vielen Projekten sogar C-Code outperformt und auch sonst sehr viele Vorteile vorweisen kann, nutzten wir dieses zur Lösung.
Unsere alte Funktion (stark vereinfacht):
create function match_plsql( p_instr in varchar2, p_regex in varchar2 )
return integer deterministic is
begin
if (regexp_like( p_instr, p_regex ) = true) then
return 1;
else
return 0;
end if;
end;
...wandelten wir in diesen Java-Ersatz (stark vereinfacht) um:
public class Match {
public static boolean match(String in, String regexp) {
return in.matches(regexp);
}
}
create function match_java( p_in in varchar2, p_regex in varchar2 )
return boolean as language java
name 'Match.match(java.lang.String, java.lang.String) return java.lang.Boolean';
...und kamen damit zu dem Ergebnis,dass wir durch einen relativ simplen
Eingriff die gesamte Abfrage nun 80% schneller ausführen können:
SELECT ... match_plsql( ... ) ...
SELECT ... match_java( ... ) ...
(Autor: Andreas Dietrich, ASPICON GmbH)
DBA-Tipp des Monats







