大規模データを使ってAutonomous Databaseのデータインサイトは使えるか検証

# はじめに
1億行を超えるサンプルデータを作成し、Database Actionsのデータインサイトの機能が使えるか検証してみました。

# 本記事の前提条件 

* ADBインスタンスが構成済みであること
* 下記リンクから**Movie Sales 2020.csv**(売上実績のサンプルデータ)をダウンロードし、対象のスキーマにロードしてあること(本記事ではQTEAM)
    「[OCIチュートリアル, Oracle Database編, 217: Database Actions を使ってみよう](https://oracle-japan.github.io/ocitutorials/database/adb217-use-database-actions/#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)」

# 作業の大まかな流れ
* 上記サンプルデータを使って、1億行を超えるデータを複製する。
* Database Actionsにログインし、分析ビューを作成する。
* データインサイトを作成する。

# 実際に検証してみた

### 大規模データの作成
1. TeraTermを起動し、Autonomous databaseに接続します。
1. 新しい表(sampledata)を作成し、Movie Sales 2020表の中身を複製します。
    ```
    CREATE TABLE sampledata AS SELECT * FROM Movie Sales 2020;
    ```
1. この時点て、sampledata表の中身は52万行程あるので、以下のINSERT文を複数回行って、1億行を超えるサンプルデータを作成します。
    ```
    INSERT INTO sampledata
    SELECT * 
    FROM   sampledata;
    ```
1.  最後にコミットします。
    ```
    commit;
    ```
これでサンプルデータができました。


### 分析ビューの作成

1. サンプルデータが入ったスキーマ(今回はQTEAM)でDatabase Actionsに接続し、Data Studio>データ分析を開きます。
1. 分析ビュー作成画面から、階層およびメジャーの作成ボタンを押してしばらく待ち、完了したら、分析ビューの作成ボタンを押します。
    ![大規模データのデータインサイト_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/458c96eb-368b-df0e-2275-536021f1d5c7.png)

    ![大規模データのデータインサイト_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/1da1c698-8e49-1551-98b1-337966e1087a.png)


### データインサイトの作成

1. Database Actionsの起動パッドから、Data Studio>データインサイトを開きます。
1. スキーマ、対象の分析ビュー、列を指定したら検索を押します。
1. ADBを1OCPUで作成して実行した場合、タイムアウトでエラーとなりました。
    ![大規模データのデータインサイト_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/697a403e-b5b4-be6d-45cb-d57037023a69.png)


1. Autonomous Databaseの詳細画面にある「パフォーマンス・ハブ」のレポートから、AWRレポートを取得して詳しく見てみます。
    ![大規模データのデータインサイト_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/db1bc0a6-58b0-e4bf-54d0-ca49c26b9b0c.png)

1. AWRレポートのTime Model Staticticsを参照すると、sql execute elapsed timeが上位に来ており、実行時間が長いSQLがあることが分かります。
    ![大規模データのデータインサイト_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/46b5ec76-e18a-307e-15f1-786f6d2c2c64.png)

1. AWRレポートのSQL ordered by Elapsed Time を参照すると、に処理に時間がかかっているSQLがあることが分かります。
    ![大規模データのデータインサイト_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/85159d4b-4de0-d814-0689-c6c23ea7e98d.png)
→SQL ID: dq9v46bqxckuv
SQL IDの中身は以下のようになっていました。

    ```
    DECLARE job BINARY_INTEGER := :job;  next_date TIMESTAMP WITH TIME ZONE := :mydate;  broken BOOLEAN := FALSE;  job_name VARCHAR2(128) := :job_name;  job_subname VARCHAR2(128) := :job_subname;  job_owner VARCHAR2(128) := :job_owner;  job_start TIMESTAMP WITH TIME ZONE := :job_start;  job_scheduled_start TIMESTAMP WITH TIME ZONE := :job_scheduled_start;  window_start TIMESTAMP WITH TIME ZONE := :window_start;  window_end TIMESTAMP WITH TIME ZONE := :window_end;  chain_id VARCHAR2(14) :=  :chainid;  credential_owner VARCHAR2(128) := :credown;  credential_name  VARCHAR2(128) := :crednam;  destination_owner VARCHAR2(128) := :destown;  destination_name VARCHAR2(128) := :destnam;  job_dest_id varchar2(14) := :jdestid;  log_id number := :log_id;  BEGIN  DECLARE
                                settings clob;   
                            BEGIN
    settings := '{"EXTRACTION":{"selectionRule":{"value":"MAX_DIFFERENCE"}, "fittedShareConvergence":{"value":"LAX"}, "maxNumExtractionDims":{"value":10000}, "insightValueType":{"value":"MEMBER"}, "excludeZero":{"value":"YES"}, "minXAxisCount":{"value":2}}, "sessionId":null, "applicationName":"INSIGHTS", "insightTypes":["FITTED_SHARE_COMPARISON"]}';
      dbms_insight.generate_insights('REQUEST_INSIGHT_26',  settings, 'REQUEST_INSIGHT_26', 'QTEAM');
    END;  :mydate := next_date; IF broken THEN :b := 1; ELSE :b := 0; END IF; END; 
    ```
データインサイトの処理に長い時間かかっているということが考察できます。

1. 一方、OCPU数を1→3に上げて自動スケーリングをオンにして同じことを再度実行してみました。すると、タイムアウトとならず、データインサイトの検索に成功しました。
    ![大規模データのデータインサイト_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/cc5e9c7d-ea4a-a919-1825-498fd5264740.png)


# まとめ
本記事では1億行を超えるデータを使って、Database Actionsにあるデータインサイトができるかを検証しました。

<br>

# 参考資料
* [OCIチュートリアル, Oracle Database編, 217: Database Actions を使ってみよう](https://oracle-japan.github.io/ocitutorials/database/adb217-use-database-actions/#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)