Oracleで暗号化に関する検証 その6

投稿日: 2006年1月18日

<Oracleで暗号化に関する検証 その6>
ペンネーム:ウィーット

前回紹介したInsert処理において、暗号化項目があるとかかった処理時間の
裏側でどのような事が行われているのでしょうか?
SQL_TRACEを用いて調べてみましょう。

検証環境は以下の通りです。
OS : Asianux 3
Oracle : Oracle10gR2
CPU : Athlon 777MHz
メモリ : 512MB

テストするテーブルの構造は前回作成したものと同じ以下の3つとします。

(1) EMPNOに主キーがある表(emp)
(2) EMPNOに主キーが、SALが暗号化されている表(emp_encrypt_no_index)
(3) EMPNOに主キーが、SALが暗号化され・SALにインデックスがある表
(emp_crypt)

データを取得する前に、共有プールとバッファ・キャッシュをクリアします。

/*共有プールをクリア*/
alter system flush shared_pool;

/*バッファ・キャッシュをクリア*/
alter system flush buffer_cache;

SQLトレースの取得・解除の設定は以下を実施します。

/* TIMED_STATISTICSをTRUEにセットする */
alter session set timed_statistics = true ;

/*詳細なSQLトレースの取得の設定(ON)*/
alter session set events='10046 trace name context forever, level 12';

/*詳細なSQLトレースの取得の設定(OFF)*/
alter session set events='10046 trace name context off';

下記のSQLでinsert処理を行います。

-------------------------------------------------------------------
insert into 各テーブル名 (
    EMPNO,  ENAME,  JOB,  MGR,  HIREDATE,  SAL,  COMM,  DEPTNO)
values (
    1000002,  'SMITH',  'CLERK',  '7902',  '80-12-17',  1000002,
    300,  20)
/
commit;
-------------------------------------------------------------------

それぞれの処理でのSQL_TRACEの結果です。

(1) EMPNOに主キーがある表(emp)

call     count     cpu    elapsed    disk    query    current     rows
------- ------ ------- ---------- ------- -------- ---------- --------
Parse        1    0.02       0.02       0        0          0        0
Execute      1    0.01       0.00       9        1          8        1
Fetch        0    0.00       0.00       0        0          0        0
------- ------ ------- ---------- ------- -------- ---------- --------
total        2    0.03       0.03       9        1          8        1

Elapsed times include waiting on following events:
Event waited on                  Times Waited  Max. Wait  Total Waited
-------------------------------  ------------  ---------  ------------
db file sequential read                     9       0.00          0.00
SQL*Net message to client                   1       0.00          0.00
SQL*Net message from client                 1       0.00          0.00

(2) EMPNOに主キーが、SALが暗号化されている表(emp_encrypt_no_index)

call     count     cpu    elapsed    disk    query    current     rows
------- ------ ------- ---------- ------- -------- ---------- --------
Parse        1    0.02       0.02       0        0          0        0
Execute      1    0.01       0.01       9        1          8        1
Fetch        0    0.00       0.00       0        0          0        0
------- ------ ------- ---------- ------- -------- ---------- --------
total        2    0.03       0.04       9        1          8        1

Elapsed times include waiting on following events:
Event waited on                  Times Waited  Max. Wait  Total Waited
-------------------------------  ------------  ---------  ------------
db file sequential read                    9        0.00          0.00
SQL*Net message to client                  1        0.00          0.00
SQL*Net message from client                1        0.00          0.00

(3) EMPNOに主キーが、SALが暗号化され・SALにインデックスがある表

(emp_crypt)
call     count     cpu    elapsed    disk    query    current     rows
------- ------ ------- ---------- ------- -------- ---------- --------
Parse        1    0.03       0.03       0        0          0        0
Execute      1    0.01       0.01      12        1         11        1
Fetch        0    0.00       0.00       0        0          0        0
------- ------ ------- ---------- ------- -------- ---------- --------
total        2    0.03       0.05      12        1         11        1

Elapsed times include waiting on following events:
Event waited on                  Times Waited  Max. Wait  Total Waited
-------------------------------  ------------  ---------  ------------
db file sequential read                    12       0.00          0.00
SQL*Net message to client                   1       0.00          0.00
SQL*Net message from client                 1       0.00          0.00

elapsed から処理時間が分かります。

(1)と(2)とでは約1.3倍、(1)と(3)とでは約1.7倍の処理時間がかかっています。
(1)と(2)では、「elapsed」のExecuteの実行時間が処理時間の違いとなってい
ます。
(2)と(3)では、暗号化項目に対してのインデックスの有無によって約1.3倍の
処理時間の差が生じています。

上記のような単純なSQL文でも、これだけの違いが出てきました。
暗号化の項目に対してインデックスを作成するのは、DBサーバーのスペックを
考慮し適用することが必要となります。

今週のまとめ。
●SQL_TRACEからも、暗号化項目を設定すると約1.3~1.7倍の処理時間が必要
となる事が分かる。

今回は単純にInsert文における処理時間を見てみましたが、次回はもう少し
詳しくSQL_TRACEを見ていこうと思います。

いつもより富士山がくっきり見える茅ヶ崎にて!