2011/04/19

バースティング性能(Performance of the bursting function)

BI PublisherのPDF出力性能を検証します。

【検証環境】
検証は手元のデスクトップPC上にVMを2つ起動した環境で行います。

ホストマシン:
CPU: Intel Core i7 920 (2.6GHz) w/HT
メモリ: 12GB
OS: Windows7 Ult. 64bit
VMM: VirtualBox 3.2.12

ゲストマシン1(DBサーバ):
CPU: 1コア
メモリ: 2GB
OS: Windows 2003 Server, 32bit
DB: Oracle DB 11g R2
ストレージ: VMイメージはHDD上に配置

ゲストマシン2(BIサーバ):
CPU: 6コア
メモリ: 4GB
OS: Windows 2003 Server, 32bit
BIEE: Oracle BIEE 11g
ストレージ: VMイメージはSSD上に配置


【検証に使用するデータ】
scott.emp表を基に、10,000ページ分のデータを生成します。1ページあたり12件、12万件のデータを準備します。スクリプトは以下の通りです。
-- ----------------------
-- create table
-- ----------------------

create table emp2 (
  empno     number(4),
  ename     varchar2(10),
  job       varchar2(9),
  mgr       number(4),
  hiredate  date,
  sal       number(7,2),
  comm      number(7,2),
  deptno    number(2),
  pageno    number(10,0),    -- page number 1..10000
  dummycol  number(10,0)     -- always 1
);


-- ----------------------
-- insert data
-- ----------------------

declare
  cursor c is select * from emp order by deptno, empno;
  i pls_integer;
begin
  for i in 1..10000 loop
    for r in c loop
      insert into emp2 values (r.empno, r.ename, r.job, r.mgr, r.hiredate, r.sal, r.comm, r.deptno, i, 1);
    end loop;
  end loop;
  commit;
end;
/


-- ----------------------
-- add index
-- ----------------------

create index ix_emp2_1 on emp2 (pageno, deptno, empno);




【出力イメージ】
出力されるPDFは以下の通りです。1ページあたりのレコードは12レコード。10,000ページを1つのファイルに出力します。各ページのヘッダには6KBのロゴ画像を含めました。
Figure 1: Output PDF





【バースティング定義】
上記のデータを、ローカルにファイル形式でバースティングします。
バースティングの定義は以下の通りです。
select distinct
       1                                        as key,
       'Layout1'                                as template,
       'ja-JP'                                  as locale,
       'RTF'                                    as template_format,
       'PDF'                                    as output_format,
       'FILE'                                   as del_channel,
       'false'                                  as save_output,
       'c:\workspace\'                          as parameter1,
       'rp_00001.pdf'                           as parameter2
  from dual



【検証結果】
結果は以下の通りです。検証は3回実施しました。

所要時間(秒)
秒間出力ページ数
1回目
123.5
81.0
2回目
119.9
83.4
3回目
127.3
78.5
平均
123.6
81.0

平均で秒間約81ページの出力性能となりました。



【検証時のOSの挙動】
BIサーバ(ゲストマシン2)の挙動を確認します。確認は、平均時間に近い1回目の実行時の統計情報をサンプルとします。
※DBサーバ(ゲストマシン1)は凪であったため割愛します。


CPU:
1つのコアが振り切れています。グラフは割愛しますが、CPU待ち(キュー)は発生していません。シングルスレッドのプログラムがコアを占有している様子が確認できます。
Figure 2: CPU statistics



メモリ:
余裕のある状態です。以下に状況を示します。
Figure 3: Memory statistics


ディスク:
処理の初めにディスク書き込みの負荷が高まっていますが、その後の負荷は低い状態で推移しています。
Figure 4: Physical disk statistics

Figure 5: Physical disk queue statistics



今回の検証結果から、1ファイルへの出力性能はCPUの処理性能(クロック数)に依存する傾向がより高いと考えられます。



[Summary]
You may want to see the result of BI Publisher performance test.




[Environment]
Two virtual machines on the ordinary desktop PC


Host Machine:
CPU: Intel Core i7 920 (2.6GHz) w/HT
Memory: 12GB
OS: Windows7 Ult. 64bit
VMM: VirtualBox 3.2.12


Guest Machine #1(DB server):
CPU: 1 core
Memory: 2GB
OS: Windows 2003 Server, 32bit
DB: Oracle DB 11g, 11.2.0.1
Storage: the VM image is on ordinary HDD


Guest Machine #2(BI server):
CPU: 6 cores
Memory: 4GB
OS: Windows 2003 Server, 32bit
BIEE: Oracle BIEE 11g, 11.1.1.3
Storage: the VM image is on SSD





[Data]
The following script duplicates the records in scott.emp 10,000 times.  i.e. 120,.000 records in total.
-- ----------------------


-- create table
-- ----------------------
create table emp2 (
  empno     number(4),
  ename     varchar2(10),
  job       varchar2(9),
  mgr       number(4),
  hiredate  date,
  sal       number(7,2),
  comm      number(7,2),
  deptno    number(2),
  pageno    number(10,0),    -- page number 1..10000
  dummycol  number(10,0)     -- always 1
);

-- ----------------------
-- insert data
-- ----------------------
declare
  cursor c is select * from emp order by deptno, empno;
  i pls_integer;
begin
  for i in 1..10000 loop
    for r in c loop
      insert into emp2 values (r.empno, r.ename, r.job, r.mgr, r.hiredate, r.sal, r.comm, r.deptno, i, 1);
    end loop;
  end loop;
  commit;
end;
/


-- ----------------------
-- add index
-- ----------------------
create index ix_emp2_1 on emp2 (pageno, deptno, empno);



[Output PDF]
The output PDF is shown in figure 1.  Whole data is in one PDF file that consists of 10,000 pages.  Each page has 12 records.
The logo image (adobe PDF image) in each page is 6KB.



[Bursting definition]
Set dummycol for Split by and Deliver by.  The Bursting definition is as follow: 
select distinct
       1                                        as key,
       'Layout1'                                as template,
       'ja-JP'                                  as locale,
       'RTF'                                    as template_format,
       'PDF'                                    as output_format,
       'FILE'                                   as del_channel,
       'false'                                  as save_output,
       'c:\workspace\'                          as parameter1,
       'rp_00001.pdf'                           as parameter2
  from dual



[Result]
I executed three times.  The results are:

Elapsed Time(sec)
pages / sec
1st
123.5
81.0
2nd
119.9
83.4
3rd
127.3
78.5
Average
123.6
81.0



[OS statistics]
The OS statistics are shown in Figure 2 to Figure 5.  They are the statistics of Guest Machine #2 in the first shot.  The statistics interval is 2 seconds.
(*) DB server (Guest Machine #1) had been very calm.

CPU:
You can see one core (Processor(2), Processor(0)) is occupied 100% by a single thread program.
There was no processor queue waiting (graph omitted).


Memory:
No problem.


Physical Disk:
write/sec spikes in the beginning though, not a big problem.





[Conclusion]
When you burst data into a single file, the performance of BI server depends on CPU power, rather than memory or disk.


0 件のコメント:

コメントを投稿