Datenbanken - von Christian Hartmann am Sonntag, September 23, 2007 17:45 - 0 Kommentare
Native Kompilierung von PL/SQL-Routinen in Oracle 10g
PL/SQL Erweiterungen und Verbesserungen in Oracle 10g
Teil 1: Native Kompilierung von PL/SQL Routinen
Viele Java / J2EE Systeme werden für ein Systemumfeld geschrieben, in welchem Oracle Datenbanken zum Einsatz kommen. Daher wollen wir uns in dieser Serie anschauen, wie man die Oracle Datenbank noch effektiver einsetzen kann. Derzeit ist es primär die Oracle 10g Datenbank, die zum Einsatz kommt und Oracle hat mit diesem Release diverse Erweiterungen für PL/SQL veröffentlicht.
Wer noch nicht weiß, was PL/SQL ist kann sich in der Wikipedia aufschlauen.
Nativer C-Code in PL/SQL Routinen
PL/SQL kann ab der Version 9i in nativen Maschinencode kompiliert werden. Bisher mussten dafür immer diverse Kompilierparameter in der init
Um eine PL/SQL-Stored Procedure oder Stored Function in nativen Code zu kompilieren wird vor der Kompilierung einfach
- ALTER SESSION SET PLSQL_CODE_TYPE = NATIVE;
oder
- ALTER SESSION SET PLSQL_CODE_TYPE = NATIVE;
gesetzt. Unter kompilieren wird in diesem Zusammenhang das Erzeugen eines PL/SQL Packages oder einer einzelnen PL/SQL Routine verstanden:
- CREATE OR REPLACE FUNCTION ...
- CREATE OR REPLACE PROCEDURE ...
- CREATE OR REPLACE PACKAGE ...
Beispiel:
- CREATE OR REPLACE PROCEDURE servertest AS
- a NUMBER := 0;
- BEGIN
- FOR c IN 1..1000000
- LOOP
- a := a + 1;
- END LOOP;
- END;
- /
Mit Hilfe der Data Dictionary View kann abgefragt werden, ob eine PL/SQL Routine nativ kompiliert wurde:
- SELECT PLSQL_CODE_TYPE FROM DBA_PLSQL_OBJECT_SETTINGS WHERE UPPER(NAME) =’SERVERTEST’;
Um wieder mit interpretierten Code arbeiten zu können wird der Datenbank dies entweder mittels
- ALTER PROCEDURE servertest COMPILE PLSQL_CODE_TYPE = INTERPRETED;
oder
- ALTER SESSION SET PLSQL_CODE_TYPE = INTERPRETED;
- ALTER PROCEDURE servertest COMPILE;
wie auch
- ALTER SYSTEM SET PLSQL_CODE_TYPE = INTERPRETED;
- ALTER PROCEDURE servertest COMPILE;
und nachfolgender Kompilierung mitgeteilt.
Zum Anpassen aller bisherigen PL/SQL Routinen in der Instanz in einem Rutsch hält Oracle das Paket dbmsupgnv.sql bereit, welches in die Instanz eingelesen werden kann.
Ebenfalls können in nativen Code kompilierte Routinen wieder in „normalen“ zu interpretieren Code übersetzt werden. Hierfür gibt es das Paket dbmsupgin.sql, welches ebenfalls einfach in die Instanz eingelesen werden kann.
Beispiel des Vorteils von nativen Code:
Folgendes Beispiel verdeutlicht die Schnelligkeit von nativen Code gegenüber herkömmlichen PL/SQL Code:
- SQL> alter session set PLSQL_CODE_TYPE = INTERPRETED;
- SQL> CREATE OR REPLACE PROCEDURE servertest AS
- a NUMBER := 0;
- BEGIN
- FOR c IN 1.. 100000000
- LOOP
- a := a + 1;
- END LOOP;
- END;
- /
- SQL> SET TIMING ON;
- SQL> exec servertest;
- PL/SQL-Prozedur erfolgreich abgeschlossen
- Abgelaufen: 00:00:08.82
- SQL> alter session set PLSQL_CODE_TYPE = NATIVE;
- SQL> CREATE OR REPLACE PROCEDURE servertest AS
- a NUMBER := 0;
- BEGIN
- FOR c IN 1..100000000
- LOOP
- a := a + 1;
- END LOOP;
- END;
- /
- SQL> SET TIMING ON;
- SQL> EXEC nativetest
- PL/SQL-Prozedur erfolgreich abgeschlossen.
- Abgelaufen: 00:00:06.04
Es sei hier erwähnt, dass die PL/SQL Routinen ihren größten Gewinn aus der nativen Kompilierung bei prozessorintensiven Berechnungen erzielen. Werden in den Routinen lediglich einfache Datenbankzugriffe abgebildet, so ist hier kaum mit einer Geschwindigkeitserhöhung zu rechnen.
Im nächsten Teil dieser Serie werden wir uns den durch Oracle 10g bereitgestellte WebService Funktionalitäten für Stored Procedures und Stored Functions widmen.
Weiterführende Literatur
Die meiner Meinung nach beste Einführung in Oracle und in die Entwicklung von Oracle-Anwendungen nennt sich „Beginning Oracle Programming„. Einer der drei Autoren ist Tom Kyte, von http://asktom.oracle.com, dem Experten unter den Oracle-Experten. Hervorzuheben bei diesem Buch sind die zahlreichen und sehr gut verständlichen Beispiele, sowie die lockere Schreibe.
Wenn es in die Oracle-Architektur gehen soll ist „Expert Oracle Database Architecture„, auch von Tom Kyte, zu empfehlen. Er geht in diesem Buch auf die Versionen 9i und 10g ein und auch hier finden sich zahlreiche Beispiele anhand dieser die Erklärungen veranschaulicht werden.
Für alle, die auf Informationen zur Entwicklung von effektiven und hochperformanten Oracle-Anwendungen aus sind empfiehlt sich „Effective Oracle By Design“ von, wie sollte es anders sein, Tom Kyte. Die Benutzung von SQL*Plus, TKPROF und dem STATSPACK sind genauso Bestandteil des Buches wie auch eine gute Einführung in die Nutzung des Cost-Based-Optimizers (CBO) und wie performanter PL/SQL-Code zu schreiben ist.
Weitere Empfehlungen:
Java - Jul 19, 2011 20:30 - 0 Kommentare
Eine (wirklich gute) Einführung in Maven
Mehr Artikel der Kategorie Softwarearchitekturen
- Decorator Pattern in Java
- Cloud Computing mit Google App Engine und Java
- JMS mit Oracle Advanced Queueing
- Buchempfehlung: Service-orientierte Architekturen mit Web Services. Konzepte – Standards – Praxis
- Einführung in SOA – Serviceorientierte Architekturen
Datenbanken, Internet Technologien - Nov 19, 2009 9:24 - 0 Kommentare
Oracle WebServices im praktischen Einsatz
More In Datenbanken
- JMS mit Oracle Advanced Queueing
- Eine kurze Einführung in db4o
- Native Kompilierung von PL/SQL-Routinen in Oracle 10g
Kommentieren