Oracle PL/SQL ネイティブコンパイルの方法 パフォーマンス向上

スポンサーリンク

ネイティブコンパイルについて

ストアド・サブプログラムをネイティブコンパイルする方法を説明します。

実際の方法の前に少し解説を、Oracleではソースコードだけでなく、コンパイルされたコードもデータベースに格納します。このとき格納されるコンパイルされたコードはデフォルト設定だと中間コードと言われるものになります。

実際にPL/SQLを実行する際には中間コードを機械(Oracle)が読める固有コードというものにコード変換を行い実行します。

格納されるコンパイルされたコードを中間コードではなく最初からシステム固有コードにして格納することによりパフォーマンス向上させるのが、ネイティブコンパイルです。

ネイティブコンパイルの方法

ネイティブコンパイルの方法は以下の手順で行います。

  1. ネイティブコンパイルを有効にする。
  2. PL/SQLをコンパイルする。
--ネイティブコンパイルを有効にする。
ALTER SESSION SET plsql_code_type = 'NATIVE';

--PL/SQLをコンパイルする。
CREATE OR REPLACE PROCEDURE
 TEST_PROCEDURE
IS
 var1 VARCHAR2(10) := 'HelloWorld';
BEGIN
 DBMS_OUTPUT.PUT_LINE( var1 ); 
END TEST_PROCEDURE;
/

--PL/SQLがネイティブコンパイルされているか確認する。
column name format a30
column type format a20
column plsql_code_type format a10
SELECT name, type, plsql_code_type
  FROM user_plsql_object_settings
 WHERE plsql_code_type = 'NATIVE';

まずはPL/SQLがネイティブコンパイルされているか確認しましょう。
まだネイティブコンパイルされていないことがわかりますね。

SQL> SELECT * FROM user_plsql_object_settings
  2   WHERE plsql_code_type = 'NATIVE';

レコードが選択されませんでした。

ネイティブコンパイルを有効にしてPL/SQLをネイティブコンパイルしましょう。

SQL> ALTER SESSION SET plsql_code_type = 'NATIVE';

セッションが変更されました。

SQL> CREATE OR REPLACE PROCEDURE
  2   TEST_PROCEDURE
  3  IS
  4   var1 VARCHAR2(10) := 'HelloWorld';
  5  BEGIN
  6   DBMS_OUTPUT.PUT_LINE( var1 );
  7  END TEST_PROCEDURE;
  8  /

プロシージャが作成されました。

再度ネイティブコンパイルされているか確認してみてください。

SQL> column name format a30
SQL> column type format a20
SQL> column plsql_code_type format a10
SQL> SELECT name, type, plsql_code_type
  2    FROM user_plsql_object_settings
  3   WHERE plsql_code_type = 'NATIVE';

NAME                           TYPE                 PLSQL_CODE
------------------------------ -------------------- ----------
TEST_PROCEDURE                 PROCEDURE            NATIVE

「PLSQL_CODE」が「NATIVE」のものがネイティブコンパイルされているものです。これでネイティブコンパイルされていることが分かりました\(^o^)/

コメント

タイトルとURLをコピーしました