はじめに
Oracle Analytics Cloud Classic:OACで、メタデータ・リポジトリまたはセマンティック・モデルを利用する場合、物理レイヤーで接続プールを利用し、データベースへアクセスします。
接続プールにはBI Serverとデータベース間の接続設定を記述します。どのサーバーのどのデータベースに何のDBユーザーでアクセスするかや、接続プールの最大数、接続プーリングのオン/オフ、オン時のタイムアウトなどです。
接続プールの動きについて見てみました。
前提
本記事では、動作確認の便宜上、Oracle Analytics Serverの環境を利用しています。
利用したバージョン:Oracle Analytics Server ver6.4
事前準備
SQLの実行時間をコントロールするためにADWにdbms_session.sleepを利用した関数を用意する
データベースアクションや、SQLDeveloper、sqlplusを用いscottユーザーで以下、関数を作成します。
create or replace function f_sessleep(v_time in number) return varchar2
as
p_starttime varchar2(20);
p_endtime varchar2(20);
p_sid number(10);
begin
select sys_context ('USERENV','SID') into p_sid FROM dual;
select to_char(sysdate,'HH24:MI:SS') into p_starttime FROM dual;
dbms_session.sleep(v_time);
select to_char(sysdate,'HH24:MI:SS') into p_endtime FROM dual;
return('SID:'||to_char(p_sid)||' = Start:'||p_starttime||' - End:'||p_endtime);
exception
when others then
return sqlerrm;
end;
/
メタデータ・リポジトリの構築、Answersの分析の作成
物理レイヤーで、以下、表タイプの"Select"の物理テーブルを作成し、論理レイヤー、プレゼンテーションレイヤーを作成しています。
データベースのdbms_session.sleep関数を利用し、10,30,60,120秒間sleepする4パターンのSelect文を元にした物理テーブルを作成しています。"キャッシュ可能"はチェックを外し、キャッシュを利用しない設定です。
Answersの分析を4つ作成します。4パターンの物理テーブルを利用するそれぞれ実行時間 10秒、30秒、60秒、120秒間の分析です。
SIDは、データベースのセッションID、Start、EndがDBでSELECT処理が開始された時間と終了した時間です。
Answersの分析 実行時の動き その1
実行時の動きを見てみます。
何もしていない状態では、セッションはありません。
※SQL Developerのツール - セッションのモニターでみています。
セッションが1つでます。実行中のstatusはActiveです。
60秒間実行するAnswersの分析を実行終了します。セッションIDは45です。
終了後もセッションが1つあります。statusはinactiveです。
タイムアウト時間を経過後しばらくすると、セッションは閉じられたのか表示から消えます。
Answersの分析 実行時の動き その2
実行時の動きを見てみます。
10秒間実行のAnswersの分析を実行します。
inactiveだった、セッションIDを再利用して、実行されています。
タイムアウト時間を経過後しばらくすると、セッションは閉じられたのか表示から消えます。
Answersの分析 実行時の動き その3
実行時の動きを見てみます。
10秒間実行のAnswersの分析と30秒間実行のAnswersの分析を同じタイミングで実行します。
inactiveのセッションがない場合、セッションが増えて2つのセッションでそれぞれ実行されました。
タイムアウト時間を経過後しばらくすると、セッションは閉じられたのか表示から消えます。
Answersの分析 実行時の動き inactiveのDBセッションが複数ある場合どこ使う?
コネクションプールでinactiveのDBセッションが複数ある場合どこ使う?かについて見てみます。
60秒間実行のAnswersの分析を実行。
10秒後に、30秒間実行のAnswersの分析を実行。
さらに10秒後に、10秒間実行のAnswersの分析を実行。
全てのAnswersの分析が実行終了した後、30秒間実行したブラウザで、10秒間実行のAnswersの分析を実行するときの動きを見てみます。
#1は15:05:49から15:06:49まで実行で、セッションIDが274でした。
#2は15:06:01から15:06:31まで実行で、セッションIDが40でした。
#3は15:06:11から15:06:21まで実行で、セッションIDが279でした。
#2で、10秒間実行のAnswersの分析を実行してみます。
そうすると、#1が使っていたセッションIDが274のセッションが利用されています。
#2で、10秒間実行のAnswersの分析を実行後の結果をみてみると、#1,#2,#3で一番最後に終了した#1のDBセッションを再利用していました。
もっとも後に実行が終了したDBセッションを再利用する動きでした。
以上