概要
Cognos Analytics 12.0.2からExcelやCSV等のアップロードデータファイルをDb2データベースに保管可能となりました。
アップロードデータ参照時にCognosノードにかかっていた負荷が、DBノードに任せれる
事になるのがメリットです。
実際に色々と触って検証してみて、いくつか知っておくべきポイントがわかりましたので共有します。
参考情報
Db2 を使用して、アップロードされたファイルおよびデータ・セットにデータを保管する
https://www.ibm.com/docs/en/cognos-analytics/12.0.0?topic=administration-using-db2-store-data-in-uploaded-files-data-sets
セットアップ手順
LinuxノードでDB作成
保管するDb2ノードはWindows OSはサポートされていません。アップロード時に以下のようなエラーとなります。
UnixかLinuxノードをご選択ください。
今回はRedhatノードで試してみました。
DBはContent Storeと共用はNGで、カラムナー型のDBを使用する必要があります。
https://www.ibm.com/docs/en/db2/11.5?topic=to-creating-setting-up-your-database-configuration-analytic-workloads
https://www.ibm.com/docs/en/db2/11.5?topic=organization-enabling-parallel-processing-column-organized-tables
db2 "CREATE DATABASE DB2COL ON /mnt/db2path USING CODESET UTF-8 TERRITORY JP COLLATE USING IDENTITY PAGESIZE 32 K"
インスタンス構成パラメーター変更
db2 update dbm cfg using INTRA_PARALLEL YES
db2stop
db2start
データベース構成パラメーター変更
db2 update db cfg using dft_table_org COLUMN
db2 update db cfg using dft_degree ANY
db2 update db cfg using dft_extent_sz 4
db2 update db cfg using sheapthres_shr 32768
db2 update db cfg using sortheap 1638
db2 update db cfg using auto_reorg ON
db2 ALTER THRESHOLD SYSDEFAULTCONCURRENT ENABLE
サインオンを追加し接続のテスト
この時、接続に使用するユーザーは(Create tables (CREATEIN), Drop tables (DROPIN), INSERT (INSERTIN) and query (SELECTIN) )という強い権限が必要です。
基本はこのような動作になります。
ポイント
Db2にデータ保管した場圧縮されるものの、ファイルとしてCognosサーバー上に保管するこれまでのやり方(Parquet)よりやや圧縮効率が良くないようなので、Db2側にはそれも考慮して表スペース領域用意しましょう。
Export/Importで持ち運べるか実験
ケース1:データアップロードエントリーのあるフォルダのみExport/Import
Export。該当のフォルダだけをエクスポート。「アップロードしたデータを含める」をチェック。
※ポータルでアップロードデータのエントリー消すと、後からクリーナースレッドが発動してDB上のテーブルを削除してくれる。
デフォルト15分間隔だが、Query Serviceの詳細設定の以下のパラメーターで変更可能
qs.dbdatasets.orphanedTablesCleanupInterval
DBごと再作成
db2 drop db DB2COL
db2 "CREATE DATABASE DB2COL ON /mnt/db2path USING CODESET UTF-8 TERRITORY JP COLLATE USING IDENTITY PAGESIZE 32 K"
以下、前述の手順と同じ。
ケース2:データ・サーバー接続も含めてExport/Import
同様にExport操作
StoreDataフォルダを削除
DBごと再作成
ケース3:Content Store全体のExport/Import
ExportでContent Store全体
StoreDataフォルダを削除
データサーバー接続削除
DB再作成
テーブルも自動作成
DB側での処理について
サポートされるDB製品は以下4つ
ORACLE
Db2 LUW ※Db2 Z、Db2 I、Big SQLは接続エラーとなる
SQL Server
Informix
Compute Serviceを使ってクエリーが発行される。
それによりワークロードはCognosサーバーの負荷は小さくなり、DBノードに任せる事ができるのがメリット。
https://www.ibm.com/docs/en/cognos-analytics/12.0.0?topic=sets-configuring-compute-service
Content Managerのデフォルトサイズ制限(2GB)は適用されなくなり、DB製品側のサイズ制限が適用される事となる。
BLOBタイプ列に保管される。
https://www.ibm.com/docs/en/cognos-analytics/12.0.0?topic=SSEP7J_12.0.0/com.ibm.swg.ba.cognos.ca_new.doc/c_ca_nf_11_2_4_default_max_size.htm
Row size(列の合計長)32Kリミットに注意。
https://www.ibm.com/docs/en/db2/11.5?topic=sql-xml-limits
レポート上でフィルターした場合、フィルターがかかったSQLがDBに投げられるのか検証
FMパッケージとCSVを結合したデータモジュールを作成
CSVの製品ラインにフィルターをかけたレポートを実行。
保管DB側にwhere句の効いたSQLが投げられているので、全量とって来てしまうという事は無さそう。
バックアップ運用について
Export/Importで移行可能なのは便利だが、逆に言うとExport/Importが長時間化するので、バックアップはContent Storeと保管DBのDBバックアップ取得が良いのだろうかと考え検証してみた。
Content Storeと保管DBのリストアで回復可能だろうか
保管DBバックアップ
$ db2 backup db db2col to .
テーブルが削除されていることを確認。15分くらい待つと自動削除された。
保管DBリストア
$ db2 restore db DB2COL from .
SQL2539W The specified name of the backup image to restore is the same as the name of the target database. Restoring to an existing database that is the same as the backup image database will cause the current database to be overwritten by the backup version.
Do you want to continue ? (y/n) y
DB20000I The RESTORE DATABASE command completed successfully.
レポートも実行可能
DBのバックアップを取得しておけば、復旧できる事が確認できた。
その他知っておくべき事
保管DBを複数使用した場合は、実行時に選択する事は不可でエラーになるので、各ユーザーがデータ・サーバーエントリー1個だけの権限を持つように権限設定をする。
データサーバーのプロパティーから権限設定。
データが保管DBにあるか、ファイルとして保存されているかは、プロパティからわかる
「データの場所」がファイルだと「Content Manager」になる。
結論
データアップロードのDBへの保管は、レポート上のフィルターのSQLのWhere句への付与もありパフォーマンス面での懸念なく、Cognosサーバー上からDBサーバーに負荷をオフロードできるメリットがある。
データの列長の合計など、DB側の制限を超えるアップロードデータを使用しないのであれば、DB側への保管機能は使用するのが良いかと思います。