はじめに
ここでは、Oracle AI Database 26ai で実装されたSecureFiles関連のパッケージを試します。
既存のSecureFile LOBに対して重複除外機能を有効にすることで節約できる記憶域を見積もり、重複除外率を戻すGET_LOB_DEDUPLICATION_RATIOファンクションを実際に試します。
重複除外率について、マニュアルには以下のような解説がされています。
重複除外率は、指定したLOB列の行数について見積もられます。たとえば、重複除外率が2.33であるとします。これは、重複除外機能を有効にすると、LOB列のサンプリングされた行について領域の約半分を節約できることを示します。
環境と手順について
環境は Oracle AI Database 26ai (23.26.1) for Linuxを使用しました。
CDB : orcl26 / PDB orcl26pdb1 を作成し、scott ユーザおよび検証用の表(表名:MANUAL)を作成します。
表の概要
CREATE TABLE "SCOTT"."MANUAL"
( "ID" VARCHAR2(20 BYTE),
"URL" VARCHAR2(128 BYTE),
"SENTENCE" CLOB
) SEGMENT CREATION DEFERRED
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
TABLESPACE "USERS"
LOB ("SENTENCE") STORE AS SECUREFILE (
TABLESPACE "USERS" ENABLE STORAGE IN ROW 4000 CHUNK 8192
NOCACHE LOGGING NOCOMPRESS KEEP_DUPLICATES ) ;
SELECT
OWNER,
TABLE_NAME,
COLUMN_NAME,
SECUREFILE
FROM
DBA_LOBS
Where OWNER='SCOTT'
ORDER BY
OWNER, TABLE_NAME;
上記のMANUAL表をひな型として MANUAL1 およびMANUAL2を作成し、MANUAL1 は重複データ無しで10件、MANUAL2 は10件中5件の重複でデータを挿入する。
MANUAL1
INSERT INTO "SCOTT"."MANUAL1" (ID, URL, SENTENCE) VALUES ('1', 'https://docs.oracle.com/cd/G47991_01/
', 'Oracle Advanced Cluster File System (Oracle ACFS)およびOracle ASM動的ボリューム・マネージャ(Oracle ADVM)では、ストレージ管理の重要なコンポーネントを提供します。')
INSERT INTO "SCOTT"."MANUAL1" (ID, URL, SENTENCE) VALUES ('2', 'https://docs.oracle.com/cd/G47991_01/', 'この章では、Oracle Advanced Cluster File System (Oracle ACFS)のコンポーネントとOracle ASM Dynamic Volume Manager (Oracle ADVM)について説明します。')
INSERT INTO "SCOTT"."MANUAL1" (ID, URL, SENTENCE) VALUES ('3', 'https://docs.oracle.com/cd/G47991_01/', 'この章では、Oracle ACFSおよびOracle ADVMの機能の概念および概要について説明します。内容は次のとおりです。')
INSERT INTO "SCOTT"."MANUAL1" (ID, URL, SENTENCE) VALUES ('4', 'https://docs.oracle.com/cd/G47991_01/', 'ここでは、Oracle AI Database 26aiでのOracle Advanced Cluster File System (Oracle ACFS)とOracle ASM動的ボリューム・マネージャ(Oracle ADVM)に関する変更点を説明します。')
INSERT INTO "SCOTT"."MANUAL1" (ID, URL, SENTENCE) VALUES ('5', 'https://docs.oracle.com/cd/G47991_01/', 'Oracle ACFS暗号化により、OCI Vaultとの統合が可能になりました。OCI Vaultマスター暗号化キーを使用して、暗号化されたACFSファイル・システムのボリューム暗号化キーを暗号化できます。これにより、ACFS暗号化キー階層にレベルが追加され、OCI内にキー管理機能が導入されます。')
INSERT INTO "SCOTT"."MANUAL1" (ID, URL, SENTENCE) VALUES ('6', 'https://docs.oracle.com/cd/G47991_01/', 'ACFS暗号化で、ユーザーがOCRからOKVに移行できるようになりました。ACFSユーザーは、Oracle Key Vaultを使用したキー管理を一元的な場所で行えるようになりました。')
INSERT INTO "SCOTT"."MANUAL1" (ID, URL, SENTENCE) VALUES ('7', 'https://docs.oracle.com/cd/G47991_01/', '新しいコマンドacfsutil repl switchoverでは、調整されたフェイルオーバー・サービスが提供されます。')
INSERT INTO "SCOTT"."MANUAL1" (ID, URL, SENTENCE) VALUES ('8', 'https://docs.oracle.com/cd/G47991_01/', 'ACFSレプリケーションのSSHキー管理を構成するための新しいツールが提供されています。')
INSERT INTO "SCOTT"."MANUAL1" (ID, URL, SENTENCE) VALUES ('9', 'https://docs.oracle.com/cd/G47991_01/', 'ACFSで、ACFSレプリケーションの代替転送方式の選択がサポートされるようになりました。これにより、SSH関連のホスト・キーおよびユーザー・キーをメンテナンスする必要がなくなります。')
INSERT INTO "SCOTT"."MANUAL1" (ID, URL, SENTENCE) VALUES ('10', 'https://docs.oracle.com/cd/G47991_01/', 'ACFS上のPDBスナップショット・カルーセルでは、ACFSのファイル・ベースのスナップショットを使用してスパース・コピーが作成されます。')
MANUAL2
INSERT INTO "SCOTT"."MANUAL2" (ID, URL, SENTENCE) VALUES ('1', 'https://www.oracle.com/jp/middleware/', 'Oracle GoldenGate (OGG)製品ファミリは、リアルタイムの信頼できる情報を提供します。Oracle GoldenGateは、データ・ファブリックおよびデータ・メッシュ機能の信頼できるプロバイダであり、データ製品思考、分散型アーキテクチャ、イベントドリブンのパイプライン、ポリグロット・データ・ペイロードおよびトポロジに基づいて構築されています。')
INSERT INTO "SCOTT"."MANUAL2" (ID, URL, SENTENCE) VALUES ('2', 'https://www.oracle.com/jp/middleware/', 'Oracle GoldenGate (OGG)製品ファミリは、リアルタイムの信頼できる情報を提供します。Oracle GoldenGateは、データ・ファブリックおよびデータ・メッシュ機能の信頼できるプロバイダであり、データ製品思考、分散型アーキテクチャ、イベントドリブンのパイプライン、ポリグロット・データ・ペイロードおよびトポロジに基づいて構築されています。')
INSERT INTO "SCOTT"."MANUAL2" (ID, URL, SENTENCE) VALUES ('3', 'https://www.oracle.com/jp/middleware/', 'Oracle GoldenGate (OGG)製品ファミリは、リアルタイムの信頼できる情報を提供します。Oracle GoldenGateは、データ・ファブリックおよびデータ・メッシュ機能の信頼できるプロバイダであり、データ製品思考、分散型アーキテクチャ、イベントドリブンのパイプライン、ポリグロット・データ・ペイロードおよびトポロジに基づいて構築されています。')
INSERT INTO "SCOTT"."MANUAL2" (ID, URL, SENTENCE) VALUES ('4', 'https://www.oracle.com/jp/middleware/', 'Oracle GoldenGate (OGG)製品ファミリは、リアルタイムの信頼できる情報を提供します。Oracle GoldenGateは、データ・ファブリックおよびデータ・メッシュ機能の信頼できるプロバイダであり、データ製品思考、分散型アーキテクチャ、イベントドリブンのパイプライン、ポリグロット・データ・ペイロードおよびトポロジに基づいて構築されています。')
INSERT INTO "SCOTT"."MANUAL2" (ID, URL, SENTENCE) VALUES ('5', 'https://www.oracle.com/jp/middleware/', 'Oracle GoldenGate (OGG)製品ファミリは、リアルタイムの信頼できる情報を提供します。Oracle GoldenGateは、データ・ファブリックおよびデータ・メッシュ機能の信頼できるプロバイダであり、データ製品思考、分散型アーキテクチャ、イベントドリブンのパイプライン、ポリグロット・データ・ペイロードおよびトポロジに基づいて構築されています。')
INSERT INTO "SCOTT"."MANUAL2" (ID, URL, SENTENCE) VALUES ('6', 'https://www.oracle.com/jp/middleware/', 'Oracle GoldenGate 23aiでは、検索拡張生成(RAG)やリアルタイムAI埋込みの有効化など、人工知能のユースケースにトランザクション・データベース・レプリケーションを活用できるようになりました。Oracle GoldenGateプラットフォームは、チェンジ・データ・キャプチャ(CDC)、トランザクション・データのレプリケーション、データの取込み、継続的な変換とロード(CTL)のためのデータ・パイプライン、およびストリーミング・データに関する様々な分析に優れています。Oracle GoldenGateは、データベース・トランザクション・ログとやり取りして、ソース・データベースへの影響を最小限に抑えながら、変更されたデータ(DMLとDDLの両方)を継続的に取得します。このため、Oracle GoldenGateのログベース・レプリケーションは、バッチ・データ取得または定期的にスケジュールされたデータ取得よりも優先されます。このような信頼できるデータをリアルタイムで活用することによってのみ、組織はより適切で迅速なビジネス上の意思決定とアクションを行うことができます。')
INSERT INTO "SCOTT"."MANUAL2" (ID, URL, SENTENCE) VALUES ('7', 'https://www.oracle.com/jp/middleware/', 'Oracle GoldenGateは、データ統合処理のための多数のスタイルを介してソースとターゲットを接続および統合する、リアルタイムでハイブリッドの異種データ・ファブリックをサポートしています:')
INSERT INTO "SCOTT"."MANUAL2" (ID, URL, SENTENCE) VALUES ('8', 'https://www.oracle.com/jp/middleware/', '企業のデータは一般的に企業内で異種データベースに分散されています。様々なデータ・ソースからデータを取得するために、Oracle GoldenGateを使用します。社内のトランザクションのロード、分散およびフィルタリングをリアルタイムで行うことができ、停止時間をほとんど発生させずに異なるデータベース間での移行が可能になります。')
INSERT INTO "SCOTT"."MANUAL2" (ID, URL, SENTENCE) VALUES ('9', 'https://www.oracle.com/jp/middleware/', 'これを実現するためには、リアルタイムでシステムからシステムに停止時間なしでデータを効率よく移す手段が必要です。Oracle GoldenGateは、データをレプリケートして統合するためのオラクル社のソリューションです。')
INSERT INTO "SCOTT"."MANUAL2" (ID, URL, SENTENCE) VALUES ('10', 'https://www.oracle.com/jp/middleware/', 'Oracle GoldenGateのモジュラ・アーキテクチャにより、異種システム間でデータを抽出、変換およびレプリケートする方法の柔軟性が提供されます。このアーキテクチャにより、Extract、Replicat、Collectorプロセスなどの様々なコンポーネントおよび証跡ファイルを構成して、特定のニーズにあわせてデータの移動を調整できます。このモジュール性により、異なるプラットフォームやトポロジ間でトランザクション・レベルでデータを効率的に処理できます。')
MANUAL1 および MANUAL2 について重複効果を確認するプロシージャ(GET_LOB_DEDUPLICATION_RATIO)を試す
SQL> SET SERVEROUTPUT ON
SQL> SET SERVEROUTPUT ON SIZE UNLIMITED
DECLARE
dedup_ratio number;
l_table_name varchar2(128) := 'MANUAL1';
l_column_name varchar2(3000) := 'SENTENCE';
l_tablespace_name varchar2(128) := 'USERS';
l_owner varchar2(128) := 'SCOTT';
BEGIN
dedup_ratio := dbms_lob.GET_LOB_DEDUPLICATION_RATIO(
l_tablespace_name,
l_owner,
l_table_name,
l_column_name,
'',
dedup_ratio,
-1);
dbms_output.put_line('Deduplication ratio: ' || dedup_ratio);
END;
/
Deduplication ratio: 1
DECLARE
dedup_ratio number;
l_table_name varchar2(128) := 'MANUAL2';
l_column_name varchar2(3000) := 'SENTENCE';
l_tablespace_name varchar2(128) := 'USERS';
l_owner varchar2(128) := 'SCOTT';
BEGIN
dedup_ratio := dbms_lob.GET_LOB_DEDUPLICATION_RATIO(
l_tablespace_name,
l_owner,
l_table_name,
l_column_name,
'',
dedup_ratio,
-1);
dbms_output.put_line('Deduplication ratio: ' || dedup_ratio);
END;
/
Deduplication ratio: 1.56695379796397807361002349256068911511
約1.5倍程度の重複が存在すると確認できている
最後に
GET_LOB_DEDUPLICATION_RATIO について試してみましたが、概ねのLOBデータに対する重複除外効果が確認できる事が確認されました。AI Ready Data としての源泉ともなる LOBデータの管理は重要ですが、既存データの重複や圧縮効果を事前に確認する事は重要な事に思えます。26aiの機能で確認出来る事は有益に感じられます。

