Oracle Analytics Cloud Classic：接続プールの動きを見てみる。

はじめに
---
Oracle Analytics Cloud Classic：OACで、メタデータ・リポジトリまたはセマンティック・モデルを利用する場合、物理レイヤーで接続プールを利用し、データベースへアクセスします。
接続プールにはBI Serverとデータベース間の接続設定を記述します。どのサーバーのどのデータベースに何のDBユーザーでアクセスするかや、接続プールの最大数、接続プーリングのオン/オフ、オン時のタイムアウトなどです。
接続プールの動きについて見てみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/3d82cf49-1f13-7234-66f8-9978870e2de1.png)

接続プール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/5adcaa48-8b4c-b30f-2918-71f1d51d542c.png)

前提
---
本記事では、動作確認の便宜上、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文を元にした物理テーブルを作成しています。"キャッシュ可能"はチェックを外し、キャッシュを利用しない設定です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/3a70d104-6c9b-00de-9f78-9cd6f8b6e782.png)

Answersの分析を４つ作成します。4パターンの物理テーブルを利用するそれぞれ実行時間 10秒、30秒、60秒、120秒間の分析です。
SIDは、データベースのセッションID、Start、EndがDBでSELECT処理が開始された時間と終了した時間です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/d5f45a2a-df05-e4b0-986a-4c78237044e3.png)

Answersの分析　実行時の動き　その1
---
実行時の動きを見てみます。
何もしていない状態では、セッションはありません。
※SQL Developerのツール - セッションのモニターでみています。
![{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/56b1526e-6110-ef2b-c81a-2542f8ed1ffd.png)

60秒間実行するAnswersの分析を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/5e96b384-dbb0-56c8-e4de-f67addce2b71.png)

セッションが１つでます。実行中のstatusはActiveです。
![{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/0c058387-c33d-8cff-252c-f05563486abb.png)

60秒間実行するAnswersの分析を実行終了します。セッションIDは45です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/a572ccfe-1471-36b9-118c-eefc6034d090.png)

終了後もセッションが１つあります。statusはinactiveです。
![{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/0037bab6-6b95-639b-4aa3-97b4cfa55c37.png)

タイムアウト時間を経過後しばらくすると、セッションは閉じられたのか表示から消えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/49e42337-e2cb-625f-5e7f-fb7749f9e772.png)

以下のような動きでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/f7d6674d-0c99-1f69-77b5-57fe310a6999.png)




Answersの分析　実行時の動き　その2
---
実行時の動きを見てみます。
10秒間実行のAnswersの分析を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/06c2d287-d05b-6726-26b0-2bd6a189c233.png)

実行後のセッションです。
![{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/73fb0c83-9559-5ea6-8716-d2befede0507.png)

60秒間実行のAnswersの分析を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/a2359381-6043-ddf4-9eba-be9561a8a691.png)

inactiveだった、セッションIDを再利用して、実行されています。
![{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/b1d72c5d-c79b-533c-c574-e8730fac3e8d.png)

実行終了後です。同じセッションIDです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/57602772-808d-80e3-6f07-7cb14a14b166.png)

タイムアウト時間を経過後しばらくすると、セッションは閉じられたのか表示から消えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/5cc30a4d-6efa-ddca-3cc1-542501e1e37d.png)

以下のような動きでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/386144c8-1fb3-dc7d-7a4f-568fc3198df0.png)

Answersの分析　実行時の動き　その3
---
実行時の動きを見てみます。
10秒間実行のAnswersの分析と30秒間実行のAnswersの分析を同じタイミングで実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/06c1af44-4014-ce71-8d9f-f0222a3a7f08.png)

セッションのを見てみます。
![{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/b877eab2-806e-d0f5-617e-c9777e245d5d.png)

inactiveのセッションがない場合、セッションが増えて２つのセッションでそれぞれ実行されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/10bdc518-3d65-82d0-d7ab-f44f23e288eb.png)

タイムアウト時間を経過後しばらくすると、セッションは閉じられたのか表示から消えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/f21f6da0-c5eb-1932-8963-f5cde1fdc6a9.png)

以下のような動きでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/209466fd-d601-6ac7-1c2e-e3fd17699a7c.png)


Answersの分析　実行時の動き　inactiveのDBセッションが複数ある場合どこ使う？
---
コネクションプールでinactiveのDBセッションが複数ある場合どこ使う？かについて見てみます。
60秒間実行のAnswersの分析を実行。
10秒後に、30秒間実行のAnswersの分析を実行。
さらに10秒後に、10秒間実行のAnswersの分析を実行。
全てのAnswersの分析が実行終了した後、30秒間実行したブラウザで、10秒間実行のAnswersの分析を実行するときの動きを見てみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/13af0e31-a943-1eae-e17d-538531297690.png)

#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でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/8b2e542a-a3c3-91bb-f0c3-99fa568107e4.png)

終了後、3セッションがinactiveの状態です。
![{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/1bc0540f-837e-2702-eaaa-ec03fbb97c66.png)

#2で、10秒間実行のAnswersの分析を実行してみます。
そうすると、#1が使っていたセッションIDが274のセッションが利用されています。
![{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/1b65c26d-3783-0c2d-0cba-fba923edc2c3.png)

#2で、10秒間実行のAnswersの分析を実行後の結果をみてみると、#1,#2,#3で一番最後に終了した#1のDBセッションを再利用していました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/471394ba-7adc-cbbd-d66d-c4a403fafd56.png)

もっとも後に実行が終了したDBセッションを再利用する動きでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/ce8e632e-efe5-42c2-93d0-00d48de3f96c.png)

以上