ヘッダーをスキップ
Oracle® Fusion Middlewareパフォーマンスおよびチューニング・ガイド
11gリリース1 (11.1.1.9.0)
B61006-12
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

20 Oracle B2Bのパフォーマンス・チューニング

この章では、Oracle B2Bのパフォーマンスをチューニングする方法について説明します。内容は次のとおりです。

20.1 Oracle B2Bについて

Oracle B2B (Business to Business)は、企業と取引パートナ間におけるセキュアで信頼性の高いビジネス・ドキュメントの交信を可能にするE-Commerceゲートウェイです。Oracle B2Bは、Business-to-Businessのドキュメント標準、セキュリティ、トランスポート、メッセージング・サービス、および取引パートナ管理をサポートしています。Oracle B2BをOracle SOA Suiteコンポジット・アプリケーション内でバインディング・コンポーネントとして使用すると、エンドツーエンドのビジネス・プロセスを実装できます。

Oracle SOA Suiteの詳細は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』を参照してください。

20.2 チューニングに関する基本的な考慮事項

次の項では、チューニング中にも考慮する必要がある、基本的なチューニング構成について説明します。

20.2.1 B2B用のデータ・ストレージ構成のチューニング

B2B_DATA_STORAGE表属性をチューニングすると、一部のデプロイメントでパフォーマンスを向上できます。ユースケース・シナリオを確認し、パフォーマンスを向上させるために次のことを検討します。

  • B2B_DATA_STORAGE表のロギング属性がNOLOGGINGに設定されている場合は、LOGGINGへの変更を検討してください。

    NOLOGGINGオプションを使用するDML操作の実行中に、制御ファイルに回復不可能なシステム変更番号(SCN)が記録され、データの負荷が高い場合に制御ファイルの競合が発生する場合があります。

  • B2B_DATA_STORAGE表のLOB列をSecureFilesに移行させることを検討してください。

  • 128パーティションのHASH(ID)を使用してB2B_DATA_STORAGE表をパーティション化します。

  • 64パーティションのグローバルHASH(ID)を使用してPK索引をパーティション化します。

20.2.2 MDSキャッシュ・サイズのチューニング

メタデータ・サービス(MDS)インスタンスのキャッシュ・サイズの値を変更すると、パフォーマンスを改善できます。xmx-to-mdsCache値の比率として5:1をお薦めします。たとえば、xmxサイズが1024の場合、mdsCacheに200MBを維持します。

Oracle Enterprise Manager Fusion Middleware Controlを使用して、これらの設定を変更できます。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のOracle B2Bの構成に関する項を参照してください。

20.2.3 スレッド数のチューニング

B2Bはマルチスレッド化されたメッセージ処理エンジンで、インバウンド処理およびアウトバウンド処理の機能が明確に分離されています。

b2b.inboundThreadCountおよびb2b.outboundThreadCountの値を変更すると、Oracle B2Bメッセージ処理を向上できます。推奨値は、使用しているシステムによって異なります。たとえば、2GBのコンピュータの場合、3から5の間の設定をお薦めします。b2b.inboundThreadSleepTimeおよびb2b.outboundThreadSleepTimeプロパティは、メッセージ処理後にスレッドをスリープします。10から1000(ミリ秒)の間の設定をお薦めします。

Oracle Enterprise Manager Fusion Middleware Controlを使用して、これらの設定を変更できます。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のOracle B2Bの構成に関する項を参照してください。

20.2.4 JMSの複数のアウト・キュー設定のチューニング

JMSアウト・キュー・コンポーネントは、B2BでJMSキューからデータを受け取れるようにする要素です。パフォーマンスを最大化するには、複数のJMSOUTQUEUESを有効にすることを検討し、対応するリスニング・チャネルをB2Bに作成してください。

20.3 チューニングに関する高度な考慮事項

Oracle HTTP Server (OHS)またはデータベースをチューニングすることで、B2Bのパフォーマンスを向上できます。この項では、次の内容について説明します。

20.3.1 B2B用のOracle HTTP Serverのチューニング

Oracle HTTP Server (OHS)は、Oracle Fusion MiddlewareのWebサーバー・コンポーネントです。Oracle WebLogic Serverのリスナーを提供し、WebLogic Serverを通じて管理される様々なB2Bインスタンスに渡るHTTPのロード・バランシングに使用されます。このコンポーネントの詳細は、第6章「Oracle HTTP Serverのパフォーマンス・チューニング」を参照してください。

この項では、B2Bパフォーマンスを向上できるOHS構成をいくつか説明します。

20.3.1.1 mod_wl_oh.confに一致式を追加

構成ファイルmod_wl_oh.confは、エンド・ユーザーが受信リクエスト・パターンを構成するのに役立ちます。ロード・バランシングの一環として、受信リクエストはクラスタで指定されたサーバーにリダイレクトされます。

一致式は、「b2b/httpReceiver」の形式で受信HTTPリクエストを識別します。次に、リクエストは構成されたWebLogicクラスタで使用できる任意のサーバーに転送されます。

この構成スニペットは、次に示すようなものになります。

mod_wl_ohs.conf
<IfModule weblogic_module>
# WebLogicHost <WEBLOGIC_HOST>
# WebLogicPort <WEBLOGIC_PORT>
# Debug ON
# WLLogFile /tmp/weblogic.log
# MatchExpression *.jsp
WeblogicCluster host.your.site:8000
MatchExpression /b2b/httpReceiver
</IfModule>

20.3.1.2 httpd.confを使用してOHSリスニング・ポートを構成

httpd.conf構成ファイルには、同時に処理可能なHTTPリクエストの最大数、ロギング詳細、特定の制限およびタイムアウトが指定されています。ORACLE_INSTANCE/config/OHSComponent/<ohsname>/httpd.confにあります。

OHSリスニング・ポートを構成するには、httpd.confに次の変更を加えます。

  1. OHSリッスン・ポートをリッスン7777に設定します。

  2. 次の接続プロパティを、示している値に設定します。

    • Timeout 600

    • MaxKeepAliveRequests 1000

    • KeepAliveTimeout 5

20.3.1.3 Worker Multi-Processing Moduleの使用

Worker Multi-Processing Module(MPM)は、マルチプロセス-マルチスレッド・モデルを採用しており、Microsoft Windowsプラットフォームを除くすべてのプラットフォームのデフォルトMPMです。マルチスレッド・サポートは少ないシステム・リソースの使用量で高いスケーラビリティを実現し、一方マルチプロセス・サポートは高い安定性を実現します。

次のWorker MPMパラメータのチューニングを検討してください。

20.3.1.3.1 StartServers

このパラメータは、起動時に作成される子サーバー・プロセスの数を指定します。再起動後に急激な負荷が予想される場合は、必要な子サーバーの数に基づいてこの値を設定してください。デフォルト値は12です。

20.3.1.3.2 MaxClients

このパラメータは稼働するサーバーの総数を制限、つまり同時に接続可能なクライアントの数を制限します。クライアントの接続数がこの制限に到達すると、後続のリクエストはキューに入れられます。デフォルト値は1500です。

20.3.1.3.3 MinSpareThreads/ MaxSpareThreads

これら2つのパラメータは、サーバー・プール・サイズを制御します。サーバーはリクエストを待っているサーバー・スレッドの数を定期的にチェックします。それがMinSpareThreadsより少ない場合は、サーバーは新しい予備のスレッドを作成します。MaxSpareThreadsより多い場合は、予備のスレッドの一部を削除します。デフォルトのMinSpareThreads値は25で、デフォルトのMaxSpareThreads値は100です。

20.3.1.3.4 ThreadsPerChild

このパラメータは、起動時に各サーバー(子)・プロセスで作成されるスレッドの数を設定します。デフォルト値は30です。

20.3.1.3.5 MaxRequestsPerChild

このパラメータは、各子プロセスが処理可能なリクエストの数を指定します。デフォルト値は0です。

20.3.2 データベースのチューニング

この項では、特定の問題を解決するために検討できるいくつかのチューニング構成を説明します。

20.3.2.1 スケーリングを向上するためにブロック・スペースを拡大

20メッセージ/秒を超えるスケーリングの問題がある場合、B2B_DATA_STORAGEに別の表領域を作成することおよびブロック・サイズを16Kに変更することを検討してください。

この解決策は、次の例に示すようなものになります。

CREATE TABLE "PS121_SOAINFRA"."B2B_DATA_STORAGE"
(       "VALUE_SELECTOR" VARCHAR2(256),
        "CLOB_VALUE" CLOB,
        "BLOB_VALUE" BLOB,
        "DATA_SIZE" NUMBER(10,0),
        "ATTRIBUTE1" VARCHAR2(256),
        "ATTRIBUTE2" VARCHAR2(256),
        "LABEL" VARCHAR2(256),
        "DOCUMENT_ID" VARCHAR2(200),
        "JOB_ID" VARCHAR2(128),
        "ID" VARCHAR2(256) NOT NULL ENABLE,
CONSTRAINT "B2B_DATA_STORAGE_PK" PRIMARY KEY ("ID")
USING INDEX PCTFREE 50 INITRANS 85 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
STORAGE(INITIAL 81920 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "B2B_DATA_STORAGE_TABLE" ENABLE,
        CONSTRAINT "B2B_DS_DOC_ID_FK" FOREIGN KEY ("DOCUMENT_ID")
        REFERENCES "PS121_SOAINFRA"."XML_DOCUMENT" ("DOCUMENT_ID") ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 75 MAXTRANS 255 NOCOMPRESS NOLOGGING
STORAGE(INITIAL 81920 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "B2B_DATA_STORAGE_TABLE"
LOB ("CLOB_VALUE") STORE AS BASICFILE (
TABLESPACE "B2B_DATA_STORAGE_TABLE" ENABLE STORAGE IN ROW CHUNK 16384
NOCACHE NOLOGGING
STORAGE(INITIAL 81920 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT))
LOB ("BLOB_VALUE") STORE AS BASICFILE "BASICFILE1"(
TABLESPACE "B2B_DATA_STORAGE_TABLE" ENABLE STORAGE IN ROW CHUNK 16384
NOCACHE NOLOGGING
STORAGE(INITIAL 81920 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT))
REM END PS121_SOAINFRA B2B_DATA_STORAGE
REM START PS121_SOAINFRA B2B_IDX_DS_DOC
CREATE INDEX "PS121_SOAINFRA"."B2B_IDX_DS_DOC" ON "PS121_SOAINFRA"."B2B_DATA_STORAGE" ("DOCUMENT_ID")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "PS121_SOAINFRA"
REM END PS121_SOAINFRA B2B_IDX_DS_DOC

20.3.2.2 スループットを向上し、CPU使用量を減少させるために統計を収集

CPU使用を効率よくして1秒当たりのメッセージの最大スループットを増やすために、統計を収集することができます。これを実現するには、次の手順を実行する必要があります。

  1. すべての重要な表の自動統計を有効にします。

  2. すべての重要な表の表統計をロック解除します。

  3. 変更したすべての表の表統計を収集します。

  4. すべての重要な表の表統計をロックします。

  5. 自動統計を無効にします。

次にコードの例を示します。

自動統計の有効化

EXEC DBMS_SCHEDULER.ENABLE('SYS.BSLN_MAINTAIN_STATS_JOB');

自動統計のロック解除

exec DBMS_STATS.UNLOCK_Table_Stats(ownname=>'PS121_SOAINFRA',tabname=>'B2B_BUSINESS_MESSAGE');
exec DBMS_STATS.UNLOCK_Table_Stats(ownname=>'PS121_SOAINFRA',tabname=>'B2B_EXT_BUSINESS_MESSAGE');
exec DBMS_STATS.UNLOCK_Table_Stats(ownname=>'PS121_SOAINFRA',tabname=>'B2B_WIRE_MESSAGE');
exec DBMS_STATS.UNLOCK_Table_Stats(ownname=>'PS121_SOAINFRA',tabname=>'B2B_DATA_STORAGE');
exec DBMS_STATS.UNLOCK_Table_Stats(ownname=>'PS121_SOAINFRA',tabname=>'B2B_APP_MESSAGE');
exec DBMS_STATS.UNLOCK_Table_Stats(ownname=>'PS121_SOAINFRA',tabname=>'B2B_BUSINESS_MESSAGE_RETRY');
exec DBMS_STATS.UNLOCK_Table_Stats(ownname=>'PS121_SOAINFRA',tabname=>'B2B_HA_REGISTRY');
exec DBMS_STATS.UNLOCK_Table_Stats(ownname=>'PS121_SOAINFRA',tabname=>'B2B_LIFECYCLE');

すべての重要な表からの統計の収集

exec DBMS_STATS.Gather_Table_Stats(ownname=>'PS121_SOAINFRA', tabname => 'B2B_BUSINESS_MESSAGE', estimate_percent=>100, cascade=>TRUE, method_opt=>'FOR ALL COLUMNS SIZE 254', degree =>DBMS_STATS.AUTO_DEGREE);
exec DBMS_STATS.Gather_Table_Stats(ownname=>'PS121_SOAINFRA', tabname => 'B2B_EXT_BUSINESS_MESSAGE', estimate_percent=>100, cascade=>TRUE, method_opt=>'FOR ALL COLUMNS SIZE 254', degree =>DBMS_STATS.AUTO_DEGREE);
exec DBMS_STATS.Gather_Table_Stats(ownname=>'PS121_SOAINFRA', tabname => 'B2B_WIRE_MESSAGE', estimate_percent=>100, cascade=>TRUE, method_opt=>'FOR ALL COLUMNS SIZE 254', degree =>DBMS_STATS.AUTO_DEGREE);
exec DBMS_STATS.Gather_Table_Stats(ownname=>'PS121_SOAINFRA', tabname => 'B2B_DATA_STORAGE', estimate_percent=>100, cascade=>TRUE, method_opt=>'FOR ALL COLUMNS SIZE 254', degree =>DBMS_STATS.AUTO_DEGREE);
exec DBMS_STATS.Gather_Table_Stats(ownname=>'PS121_SOAINFRA', tabname => 'B2B_APP_MESSAGE', estimate_percent=>100, cascade=>TRUE, method_opt=>'FOR ALL COLUMNS SIZE 254', degree =>DBMS_STATS.AUTO_DEGREE);
exec DBMS_STATS.Gather_Table_Stats(ownname=>'PS121_SOAINFRA', tabname => 'B2B_BUSINESS_MESSAGE_RETRY', estimate_percent=>100, cascade=>TRUE, method_opt=>'FOR ALL COLUMNS SIZE 254', degree =>DBMS_STATS.AUTO_DEGREE);
exec DBMS_STATS.Gather_Table_Stats(ownname=>'PS121_SOAINFRA', tabname => 'B2B_HA_REGISTRY', estimate_percent=>100, cascade=>TRUE, method_opt=>'FOR ALL COLUMNS SIZE 254', degree =>DBMS_STATS.AUTO_DEGREE);
exec DBMS_STATS.Gather_Table_Stats(ownname=>'PS121_SOAINFRA', tabname => 'B2B_LIFECYCLE', estimate_percent=>100, cascade=>TRUE, method_opt=>'FOR ALL COLUMNS SIZE 254', degree =>DBMS_STATS.AUTO_DEGREE);

表のロック

exec DBMS_STATS.Lock_Table_Stats(ownname=>'PS121_SOAINFRA',tabname=>'B2B_BUSINESS_MESSAGE');
exec DBMS_STATS.Lock_Table_Stats(ownname=>'PS121_SOAINFRA',tabname=>'B2B_EXT_BUSINESS_MESSAGE');
exec DBMS_STATS.Lock_Table_Stats(ownname=>'PS121_SOAINFRA',tabname=>'B2B_WIRE_MESSAGE');
exec DBMS_STATS.Lock_Table_Stats(ownname=>'PS121_SOAINFRA',tabname=>'B2B_DATA_STORAGE');
exec DBMS_STATS.Lock_Table_Stats(ownname=>'PS121_SOAINFRA',tabname=>'B2B_APP_MESSAGE');
exec DBMS_STATS.Lock_Table_Stats(ownname=>'PS121_SOAINFRA',tabname=>'B2B_BUSINESS_MESSAGE_RETRY');
exec DBMS_STATS.Lock_Table_Stats(ownname=>'PS121_SOAINFRA',tabname=>'B2B_HA_REGISTRY');
exec DBMS_STATS.Lock_Table_Stats(ownname=>'PS121_SOAINFRA',tabname=>'B2B_LIFECYCLE');

自動統計の無効化

EXEC DBMS_SCHEDULER.DISABLE('SYS.BSLN_MAINTAIN_STATS_JOB');

20.3.2.3 表領域のパーティション化

挿入の数が多いためにI/O競合が発生した場合、表領域をパーティション化してください。

次に示すように、表を作成する必要があります。

DROP TABLE B2B_DATA_STORAGE;
CREATE TABLE B2B_DATA_STORAGE
( "VALUE_SELECTOR" VARCHAR2(256),
"CLOB_VALUE" CLOB,
BLOB_VALUE BLOB,
DATA_SIZE NUMBER(10,0),
ATTRIBUTE1 VARCHAR2(256),
ATTRIBUTE2 VARCHAR2(256),
LABEL VARCHAR2(256),
DOCUMENT_ID VARCHAR2(200),
JOB_ID VARCHAR2(128),
"CPST_INST_CREATED_TIME" TIMESTAMP (6) DEFAULT systimestamp-30,
ID VARCHAR2(256) NOT NULL
)
TABLESPACE B2B_DATA_STORAGE_TABLE
LOB (CLOB_VALUE) STORE AS SECUREFILE (TABLESPACE B2B_DATA_STORAGE_TABLE)
LOB (BLOB_VALUE) STORE AS SECUREFILE BASICFILE1(TABLESPACE B2B_DATA_STORAGE_TABLE)
partition by hash(id) partitions 100 store in(B2B_DATA_STORAGE_TABLE);
ALTER TABLE B2B_DATA_STORAGE ADD CONSTRAINT
B2B_DATA_STORAGE_PK PRIMARY KEY (ID)
USING INDEX (CREATE UNIQUE INDEX B2B_DATA_STORAGE_PK ON B2B_DATA_STORAGE (ID) TABLESPACE B2B_DATA_STORAGE_TABLE REVERSE);
CREATE INDEX B2B_IDX_DS_DOC ON B2B_DATA_STORAGE (DOCUMENT_ID) TABLESPACE B2B_DATA_STORAGE_TABLE;
ALTER TABLE B2B_DATA_STORAGE ADD CONSTRAINT B2B_DS_DOC_ID_FK FOREIGN KEY (DOCUMENT_ID) REFERENCES XML_DOCUMENT (DOCUMENT_ID);

次に、表に次のような制約を追加する必要があります。

ALTER TABLE B2B_WIRE_MESSAGE ADD CONSTRAINT B2B_WM_DS_FK FOREIGN KEY(PACKED_MESSAGE) REFERENCES B2B_DATA_STORAGE (ID) ON DELETE CASCADE ENABLE;
ALTER TABLE B2B_WIRE_MESSAGE ADD CONSTRAINT B2B_WM_PS_FK FOREIGN KEY(PAYLOAD_STORAGE) REFERENCES B2B_DATA_STORAGE (ID) ON DELETE CASCADE ENABLE;
ALTER TABLE B2B_BUSINESS_MESSAGE ADD CONSTRAINT B2B_BM_NDS_FK FOREIGN KEY (NATIVE_DATA_STORAGE) REFERENCES B2B_DATA_STORAGE (ID) ON DELETE CASCADE ENABLE;
ALTER TABLE B2B_BUSINESS_MESSAGE ADD CONSTRAINT B2B_BM_TDS_FK FOREIGN KEY (TRANSLATED_DATA_STORAGE) REFERENCES B2B_DATA_STORAGE (ID) ON DELETE CASCADE ENABLE;
ALTER TABLE B2B_BUSINESS_MESSAGE ADD CONSTRAINT B2B_BM_AS_FK FOREIGN KEY (ATTACHMENT_STORAGE) REFERENCES B2B_DATA_STORAGE (ID) ON DELETE CASCADE ENABLE;
ALTER TABLE B2B_BUSINESS_MESSAGE ADD CONSTRAINT B2B_BM_PS_FK FOREIGN KEY (PAYLOAD_STORAGE) REFERENCES B2B_DATA_STORAGE (ID) ON DELETE CASCADE ENABLE;
ALTER TABLE B2B_APP_MESSAGE ADD CONSTRAINT B2B_AM_PAYLOAD_FK FOREIGN KEY (PAYLOAD) REFERENCES B2B_DATA_STORAGE (ID) ON DELETE CASCADE ENABLE;
ALTER TABLE B2B_APP_MESSAGE ADD CONSTRAINT B2B_AM_AS_FK FOREIGN KEY (ATTACHMENT_STORAGE) REFERENCES B2B_DATA_STORAGE (ID) ON DELETE CASCADE ENABLE;