Oracleで暗号化に関する検証 その6
<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を見ていこうと思います。
いつもより富士山がくっきり見える茅ヶ崎にて!