SlideShare a Scribd company logo
JPOUG 15minute #9
Autonomous Database で
Oracle Database 19c 新機能 を 味わう。
柴田 歩
2
自己紹介(柴田 歩)
 日本オラクル株式会社
クラウド・テクノロジーコンサルティング事業本部
シニアプリンシパルコンサルタント
柴田 歩(しばた あゆむ)
 2007年4月に中途で日本オラクルに入社
 DBの製品コンサルとして、DB関連のプロジェクトを歴任
 やきうのお兄ちゃん な DBエンジニアとして暗躍中!彡(^)(^)
– ねら~ITエンジニア雑記
http://d.hatena.ne.jp/gonsuke777/
– Twitter @ora_gonsuke777
2
3
 Oracle Databaseを中心とした座談
会’19 – Oracle Code Tokyo 2019
開催報告(パネリスト)
 http://www.jpoug.org/2019/09/17/c
odetokyo19report
 Oracle Database or GoldenGate
Advent Calendar 2018
 https://adventar.org/calendars/3525
 デモとディスカッションで体験する
Oracle DBトラブル対応(2018年)
 https://www.slideshare.net/shibataay
umu/oracle-db-111087832
 - JPOUG Advent Calendar 2017
Day 15 - V$SQLとその周辺でER図
を描いてみよう!
 https://www.slideshare.net/shibataay
umu/vsqler
 DDD 2013 SQLチューニングに
必要な考え方と最新テクニック
 http://www.oracle.com/technetwo
rk/jp/ondemand/ddd-2013-
2051348-ja.html
コレ
 ブログ「ねら~ITエンジニア雑記」
 http://d.hatena.ne.jp/gonsuke777/
• DDD 2016 SQL性能を最大限に引き出す
DB 12cクエリー・オプティマイザ 新機
能活用と統計情報運用の戦略
• http://www.oracle.com/technetwork/jp/on
demand/ddd-2016-3373953-ja.html
コレ
過去コンテンツ
4
免責事項/注意事項/おことわり
 本資料において示されている見解は、私自身の
“独自研究”, ”独自検証”, ”独自解釈”
に基づいた、個人的な見解となります。
 従って本資料は Oracle Corporation 及び 日本オラクル
の公式見解を必ずしも反映したものではなく、
マニュアル・サポートサイト等で公開されている情報や
実際の製品仕様・動作と異なる可能性があります。
 この点は予めご了承ください。
 資料は(一部スライドを修正して)公開します。
5
目次
1. はじめに
2. Automatic Indexeing の Feedback
3. Hybrid Partition の Feedback
4. オプティマイザ統計系の新機能Feedback
5. まとめ
6
1. はじめに
7
Oracle Database 19c
新機能検証したろwww
Oracle Database 19c 出たての頃のワイ……
8
マニュアル(19c ライセンス情報)
9
ファッ!!!!?????
10
注目の新機能は軒並み Engineered System専用!
(MMRの有名なシーンを思い浮かべながら……)
キバヤシ「19cの注目新機能は、
軒並みExadat専用だ!」
MMRの面々「な…なんだってー!!!」
11
捨てる神あれば、
拾う神有り!
だがちょっと待って欲しい……
12
Oracle Cloud Always Free が登場!
13
Exadata で動作する Autonomous Database
Oracle
Database
Technology
Night資料
より
14
よっしゃ Always Free の
Autonomous Database で 19c検証したろ!
15
ファッ!!!!????? ※判り難いですがグレーアウトしてる
16
注目の新機能は軒並み Engineered System専用!
(進撃の巨人の「何の成果も!!!得られませんでした!!!」
を思い浮かべながら……)
キース団長「Always Freeだと!!!
19c Preview版が使えませんでし
た!!!」
17
今回は某所(有償)の 19c Preview環境で検証
 今回は某所で借りた(有償の)Autonomous Database
19c Preview環境で検証しています。
 近い将来 Always Free でも 19c が使えるようになると
思うので、それまで皆さん正座待機して下さいね彡(-)(-)
18
2. Automatic Indexing
の 検証結果Feedback
19
Swingbenchで負荷掛けして、
Automatic Indexing動作前後
の傾向を比較
※具体的な数字は提示するとアレなので
前後の比率を提示
Automatic Indexing の 検証方法
20
検証環境
 Compute(Oracle Linux 7.7), VM.Standard2.1(1oCPU)
 Autonomous Transaction Processing(ATP)
19c Preview, 2oCPU, Autoscaling有り
Compute
(Swingbench)
Tokyo Region(and AD1)
VCN
Autonomous
Database(ATP)
IGW
ssh JDBC Thin
Subnet
21
Swingbenchの設定
 Data Scale は 10(約10GB分) を指定
 Automatic Indexingの効果を見るために、PK以外の索引を削除
 Swingbench の 仮想ユーザー数は 6 で SOE V2 で負荷かけ
DROP INDEX SOE.WHS_LOCATION_IX;
DROP INDEX SOE.INV_PRODUCT_IX;
DROP INDEX SOE.INV_WAREHOUSE_IX;
DROP INDEX SOE.ADDRESS_CUST_IX;
DROP INDEX SOE.ITEM_ORDER_IX;
DROP INDEX SOE.ITEM_PRODUCT_IX;
DROP INDEX SOE.ORD_SALES_REP_IX;
DROP INDEX SOE.ORD_CUSTOMER_IX;
DROP INDEX SOE.ORD_ORDER_DATE_IX;
DROP INDEX SOE.ORD_WAREHOUSE_IX;
:
:
./charbench -c ../configs/SOE_Server_Side_V2.xml 
-cf /home/opc/work/Wallet_ATPAYSHIBAT02.zip 
-cs atpayshibat02_tp 
-u soe 
-p xxxxxxxxxx 
-uc 6 
-v users,tpm,tps,vresp,dml 
-rt 0:20
:
22
Automatic Indexing の 有効化
 DBMS_AUTO_INDEX.CONFIGUREプロシージャで有効化
 実行後の関連設定(DBA_AUTO_INDEX_CONFIGビュー)
EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','IMPLEMENT');
SELECT PARAMETER_NAME, PARAMETER_VALUE FROM DBA_AUTO_INDEX_CONFIG;
PARAMETER_NAME PARAMETER_VALUE
---------------------------------- -----------------
AUTO_INDEX_COMPRESSION ON
AUTO_INDEX_DEFAULT_TABLESPACE
AUTO_INDEX_MODE IMPLEMENT
AUTO_INDEX_REPORT_RETENTION 373
AUTO_INDEX_RETENTION_FOR_AUTO 373
AUTO_INDEX_RETENTION_FOR_MANUAL
AUTO_INDEX_SCHEMA
AUTO_INDEX_SPACE_BUDGET 100
23
Swingbenchスループット(TPM)の比較
 Automatic Indexing後のスループットが向上!
Automatic Indexing動作前 Automatic Indexing動作後
24
SQL実行回数(from AWR)の比較
 Automatic Indexing後のスループットが向上!
Automatic Indexing動作前 Automatic Indexing動作後
25
Top10待機イベント(from AWR)の比較
 どちらも DB CPU が待機イベントの中心
Automatic Indexing動作前 Automatic Indexing動作後
26
DBA_INDEXESディクショナリを参照
 幾つかの索引が自動で作成されている。無効(UNUSABLE)な索引や
有効(VALID)でもINVISIBLE(不可視)な索引もある。
SELECT INDEX_NAME, AUTO, STATUS, VISIBILITY, COMPRESSION FROM DBA_INDEXES
WHERE OWNER = 'SOE' ORDER BY INDEX_NAME;
INDEX_NAME AUT STATUS VISIBILIT COMPRESSION
------------------------------ --- -------- --------- -------------
ADDRESS_PK NO VALID VISIBLE DISABLED
CARD_DETAILS_PK NO VALID VISIBLE DISABLED
:
SYS_AI_20tjdcuwznyhx YES VALID INVISIBLE ADVANCED LOW ★コレ
SYS_AI_2s9jaak2smbq4 YES UNUSABLE INVISIBLE ADVANCED LOW ★コレ
SYS_AI_3z00frhp9vd91 YES VALID INVISIBLE ADVANCED LOW ★コレ
SYS_AI_4bz3nuupj3kt5 YES VALID VISIBLE ADVANCED LOW ★コレ
SYS_AI_5p2zapcmkj174 YES VALID VISIBLE ADVANCED LOW ★コレ
SYS_AI_b9k5zyq0mjwf5 YES UNUSABLE INVISIBLE ADVANCED LOW ★コレ
SYS_AI_dt4w4vr174j9m YES N/A VISIBLE ADVANCED LOW ★コレ
SYS_AI_gbwwy984mc1ft YES VALID VISIBLE ADVANCED LOW ★コレ
27
Automatic Indexing の レポート(1)
 DBMS_AUTO_INDEX.REPORT_ACTIVITYファンクションで
Automatic Indexing の レポートを出力
SET LONG 1000000;
SET LONGC 1000000;
SET LINESIZE 170;
SET PAGESIZE 1000;
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY/MM/DD HH24:MI:SS.FF';
SELECT DBMS_AUTO_INDEX.REPORT_ACTIVITY(
TO_TIMESTAMP('2019/11/23 00:00:00.00’),
TO_TIMESTAMP('2019/11/26 00:00:00.00’),
'TEXT', 'ALL', 'ALL’
) FROM DUAL;
28
Automatic Indexing の レポート(2)
 GENERAL INFORMATIONセクション と SUMMARYセクション
DBMS_AUTO_INDEX.REPORT_ACTIVITY(TO_TIMESTAMP('2019/11/2300:00:00.00’) …
----------------------------------------------------------------------
GENERAL INFORMATION
-------------------------------------------------------------------------------
Activity start : 23-11月-2019 00:00:00
Activity end : 26-11月-2019 00:00:00
Executions completed : 77
Executions interrupted : 0
Executions with fatal error : 0
-------------------------------------------------------------------------------
SUMMARY (AUTO INDEXES)
-------------------------------------------------------------------------------
Index candidates : 8
Indexes created (visible / invisible) : 6 (4 / 2)
Space used (visible / invisible) : 1.43 GB (1.18 GB / 251.72 MB)
Indexes dropped : 0
SQL statements verified : 14
SQL statements improved (improvement factor) : 5 (1639.7x)
SQL plan baselines created : 0
Overall improvement factor : 4.9x
-------------------------------------------------------------------------------
29
Automatic Indexing の レポート(3)
 MANUL INDEXESセクション と INDEX DETAILSセクション
SUMMARY (MANUAL INDEXES)
-------------------------------------------------------------------------------
Unused indexes : 0
Space used : 0 B
Unusable indexes : 0
-------------------------------------------------------------------------------
INDEX DETAILS
-------------------------------------------------------------------------------
1. The following indexes were created:
*: invisible
-------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
| Owner | Table | Index | Key | Type | Properties |
----------------------------------------------------------------------------------------------
| SOE | ADDRESSES | SYS_AI_4bz3nuupj3kt5 | CUSTOMER_ID | B-TREE | NONE |
| SOE | CARD_DETAILS | SYS_AI_dt4w4vr174j9m | CUSTOMER_ID | B-TREE | LOCAL |
| SOE | ORDERS | * SYS_AI_3z00frhp9vd91 | WAREHOUSE_ID | B-TREE | NONE |
| SOE | ORDERS | SYS_AI_5p2zapcmkj174 | CUSTOMER_ID | B-TREE | NONE |
| SOE | ORDERS | SYS_AI_gbwwy984mc1ft | SALES_REP_ID | B-TREE | NONE |
| SOE | PRODUCT_DESCRIPTIONS | * SYS_AI_20tjdcuwznyhx | PRODUCT_ID | B-TREE | NONE |
----------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------
30
Automatic Indexing の レポート(4)
 VERIFICATIONセクション(抜粋)
VERIFICATION DETAILS
-------------------------------------------------------------------------------
1. The performance of the following statements improved:
-------------------------------------------------------------------------------
Parsing Schema Name : SOE
SQL ID : 29qp10usqkqh0
SQL Text : SELECT TT.ORDER_TOTAL, TT.SALES_REP_ID, TT.ORDER_DATE,
CUSTOMERS.CUST_FIRST_NAME, CUSTOMERS.CUST_LAST_NAME FROM
(SELECT ORDERS.ORDER_TOTAL, ORDERS.SALES_REP_ID,
ORDERS.ORDER_DATE, ORDERS.CUSTOMER_ID, RANK() OVER (ORDER
BY ORDERS.ORDER_TOTAL DESC) SAL_RANK FROM ORDERS WHERE
ORDERS.SALES_REP_ID = :B1 ...
Improvement Factor : 683.4x
Execution Statistics:
-----------------------------
Original Plan Auto Index Plan
---------------------------- ----------------------------
Elapsed Time (s): 1235522012 13024
CPU Time (s): 1231284830 9898
Buffer Gets: 257075897 590
Optimizer Cost: 5174 1222
Disk Reads: 0 3
Direct Writes: 0 0
Rows Processed: 551468 12
Executions: 816 1
31
Automatic Indexing の レポート(5)
 PLANS SECTION(抜粋)
PLANS SECTION
----------------------------------------------------------------
- Original
-----------------------------
Plan Hash Value : 2280072513
----------------------------------------------------------------
| Id | Operation | Name |
----------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | HASH JOIN | |
| 2 | JOIN FILTER CREATE | :BF0001 |
| 3 | PART JOIN FILTER CREATE | :BF0000 |
| 4 | NESTED LOOPS | |
| 5 | NESTED LOOPS | |
| 6 | STATISTICS COLLECTOR | |
| 7 | VIEW | |
| 8 | WINDOW SORT PUSHED RANK | |
| 9 | PARTITION HASH ALL | |
| 10 | TABLE ACCESS STORAGE FULL | ORDERS |
| 11 | INDEX UNIQUE SCAN | CUSTOMERS_PK |
| 12 | TABLE ACCESS BY GLOBAL INDEX ROWID | CUSTOMERS |
| 13 | JOIN FILTER USE | :BF0001 |
| 14 | PARTITION HASH JOIN-FILTER | |
| 15 | TABLE ACCESS STORAGE FULL | CUSTOMERS |
----------------------------------------------------------------
- With Auto Indexes
-----------------------------
Plan Hash Value : 3608924074
---------------------------------------------------------------------------------
| Id | Operation | Name |
---------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | NESTED LOOPS | |
| 2 | NESTED LOOPS | |
| * 3 | VIEW | |
| * 4 | WINDOW SORT PUSHED RANK | |
| 5 | TABLE ACCESS BY GLOBAL INDEX ROWID BATCHED | ORDERS |
| * 6 | INDEX RANGE SCAN | SYS_AI_gbwwy984mc1ft |
| * 7 | INDEX UNIQUE SCAN | CUSTOMERS_PK |
| 8 | TABLE ACCESS BY GLOBAL INDEX ROWID | CUSTOMERS |
---------------------------------------------------------------------------------
32
動いてるぞ!!!(小並
良くなってるぞ!!!(小並2
Automatic Indexing の 検証結果
33
Automatic Indexing の 検証雑感
 まずは動いた事に一安心(新機能は色々アレなんで…
 15分~20分ごとにバックグラウンドで何かが
動いている模様?(マニュアル記述は15分)
 従来は人間が Try&Error で作成していた索引を、
RDBMS が自動計測して付与するのは画期的!
 自動作成された索引は手動では削除不可で、
詳細なログ等も無いので、Blackbox感は凄いwwwww
34
Automatic Indexing の 参考ドキュメント
 Oracle Database データベース管理者ガイド 19c
– 21.7 自動索引の管理
https://docs.oracle.com/cd/F19136_01/admin/managing-indexes.html#GUID-
D1285CD5-95C0-4E74-8F26-A02018EA7999
 Oracle Database PL/SQLパッケージおよびタイプ・リファレンス 19c
– 30 DBMS_AUTO_INDEX
– https://docs.oracle.com/cd/F19136_01/arpls/DBMS_AUTO_INDEX.html#GUID-
78C59A20-2F92-448F-96F7-6C4FBB355E42
35
3. Hybrid Partition の
Feedback
36
Hybrid Partition とは?
 パーティションの一部を外部表(EXTERNAL TABLE)
として定義することができる 19c の 新機能
Partition
P201901
Partition
P201902
Partition
P201903
Partition
P201904
File
(External Table) Database
Hybrid
Partition表
37
Autonomous Database の Hybrid Partition
 Object Storage の ファイル を Hybrid Partition の
外部表(EXTERNAL TABLE)として定義することが可能
Partition
P201901
Partition
P201902
Partition
P201903
Partition
P201904
Database
Hybrid
Partition表
Object
Storage
38
Object Storage
にファイル格納して、
Autonomous Databaseで
Hybrid Partition
を定義してみる。
Hybrid Partition の 検証方法
39
Hybrid Partition の 検証構成
 P100, P200 のデータを Object Storage に格納
 P300, P400 のデータは Autonomous Database に格納
Partition
P100
Partition
P200
Partition
P300
Partition
P400
Autonomous Database
Hybrid
Partition表
Object Storage
40
Object Storage に 格納したデータ
 数値, 文字列, 日付書式文字列の単純なデータ
 gzip圧縮して Object Storage にアップロード
"ID","HYBRID_STR","HYBRID_DATE"
1,"STR1",2019/12/01 00:00:01
2,"STR2",2019/12/01 00:00:02
3,"STR3",2019/12/01 00:00:03
4,"STR4",2019/12/01 00:00:04
5,"STR5",2019/12/01 00:00:05
6,"STR6",2019/12/01 00:00:06
7,"STR7",2019/12/01 00:00:07
8,"STR8",2019/12/01 00:00:08
9,"STR9",2019/12/01 00:00:09
:
:
41
Object Storage の Screenshot
 gzip圧縮したファイル を Object Storage にアップロード
42
OCI IAMユーザー の Authtoken を 生成
 おまじない・その1
43
Autonomous Database に IAMユーザーの
Authtoken を 登録(Credential作成)
 おまじない・その2
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'OCI_CLI_AYS_ATP', -- 任意の文字列
username => 'IAM_USER_AYSHIBAT02', -- IAMユーザー名
password => 'xxxxxxxxxxxxxxxxxxx' -- 生成したAuth Token
);
END;
/
44
Hybrid Partition表を作成(DBMS_CLOUD)
 DBMS_CLOUD.CREATE_HYBRID_PART_TABLEプロシージャで
Hybrid Partition表を作成
BEGIN
DBMS_CLOUD.CREATE_HYBRID_PART_TABLE(
table_name => 'EXT_HYBRID_TEST', --テーブル名
credential_name => 'OCI_CLI_AYS_ATP', --クレデンシャル名
format => json_object(
'characterset' VALUE 'AL32UTF8' -- 文字コードを指定
, 'recorddelimiter' VALUE '''n''' -- 行区切り文字
, 'type' VALUE 'csv' -- ファイルのタイプを指定
, 'skipheaders' VALUE 1 -- 読み飛ばすヘッダ行数を指定
, 'compression' VALUE 'gzip' -- 圧縮形式を指定
, 'dateformat' VALUE 'YYYY/MM/DD HH24:MI:SS' -- DATE型のフォーマットを指定
) ,
column_list => 'ID NUMBER, ' ||
'HYBRID_STR VARCHAR2(43), ' ||
'HYBRID_DATE DATE' ,
partitioning_clause => 'PARTITION BY RANGE (ID) (' ||
' PARTITION P100 VALUES LESS THAN (101) ' ||
' EXTERNAL LOCATION(''https://objectstorage.ap-tokyo-1…/hybrid_test_p100.csv.gz'') ' ||
' , PARTITION P200 VALUES LESS THAN (201) ' ||
' EXTERNAL LOCATION(''https://objectstorage.ap-tokyo-1…/hybrid_test_p200.csv.gz'') ' ||
' , PARTITION P300 VALUES LESS THAN (301)' ||
' , PARTITION P400 VALUES LESS THAN (401)' ||
')'
);
END;
/
45
Hybrid Partition表にデータをロード
 データベース格納部分(P300, P400)のデータをロード
INSERT INTO EXT_HYBRID_TEST
SELECT LEVEL+200 AS ID
, 'STR' || (LEVEL+200) AS HYBRID_STR
, TO_DATE('20191201', 'YYYYMMDD') + (LEVEL+200)/24/60/60 AS HYBRID_DATE
FROM DUAL
CONNECT BY LEVEL <= 200;
COMMIT;
46
Hybrid Partition表をGET_DDLしてみる。
 Hybrid Partition表をGET_DDLしてみると下記のようになってます。
SELECT DBMS_METADATA.GET_DDL('TABLE','EXT_HYBRID_TEST','AYSHIBAT') FROM DUAL;
CREATE TABLE "AYSHIBAT"."EXT_HYBRID_TEST"
( "ID" NUMBER,
"HYBRID_STR" VARCHAR2(43) COLLATE "USING_NLS_COMP",
"HYBRID_DATE" DATE
) DEFAULT COLLATION "USING_NLS_COMP" EXTERNAL PARTITION ATTRIBUTES
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY "DATA_PUMP_DIR"
ACCESS PARAMETERS
( RECORDS CHARACTERSET AL32UTF8 DELIMITED BY 'n' IGNORE_HEADER=1 COMPRESSION GZIP NOLOGFILE NOBADFILE NODISCARDFILE READSIZE=10000000
CREDENTIAL 'OCI_CLI_AYS_ATP' FIELDS CSV WITHOUT EMBEDDED DATE_FORMAT DATE MASK 'YYYY/MM/DD HH24:MI:SS' NOTRIM )
REJECT LIMIT 0
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
PARTITION BY RANGE ("ID")
(
PARTITION "P100" VALUES LESS THAN (101) EXTERNAL
LOCATION( 'https://objectstorage.ap-tokyo-1.oraclecloud.com/…/hybrid_test_p100.csv.gz'),
PARTITION "P200" VALUES LESS THAN (201) EXTERNAL
LOCATION( 'https://objectstorage.ap-tokyo-1.oraclecloud.com/…/hybrid_test_p200.csv.gz'),
PARTITION "P300" VALUES LESS THAN (301) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 8388608 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "DATA" ,
PARTITION "P400" VALUES LESS THAN (401) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 8388608 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "DATA"
) PARALLEL
47
Hybrid Partition
の実行計画を見てみる。
Hybrid Partition の 実行計画(1)
48
Hybrid Partition の 実行計画(2)
 外部表(ファイル)の Partiiton をプルーニングした場合の実行計画
SELECT COUNT(*) FROM EXT_HYBRID_TEST WHERE ID BETWEEN 1 AND 100;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR());
COUNT(*)
----------
100
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID dwj72nyfta1k4, child number 0
:
Plan hash value: 2802513750
-----------------------------------------------------------...----------------------------------------------
| Id | Operation | Name |...| Pstart| Pstop | TQ |IN-OUT| PQ Distrib |
-----------------------------------------------------------...----------------------------------------------
| 0 | SELECT STATEMENT | |...| | | | | |
| 1 | SORT AGGREGATE | |...| | | | | |
| 2 | PX COORDINATOR | |...| | | | | |
| 3 | PX SEND QC (RANDOM) | :TQ10000 |...| | | Q1,00 | P->S | QC (RAND) |
| 4 | SORT AGGREGATE | |...| | | Q1,00 | PCWP | |
| 5 | PX BLOCK ITERATOR | |...| 1 | 1 | Q1,00 | PCWC | |
|* 6 | EXTERNAL TABLE ACCESS FULL| EXT_HYBRID_TEST |...| 1 | 1 | Q1,00 | PCWP | |
-----------------------------------------------------------...----------------------------------------------
49
Hybrid Partition の 実行計画(3)
 データベースの Partition をプルーニングした場合の実行計画
SELECT COUNT(*) FROM EXT_HYBRID_TEST WHERE ID BETWEEN 201 AND 300;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR());
COUNT(*)
----------
100
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID a22rszz8wn2b3, child number 0
:
Plan hash value: 272980602
----------------------------------------------------------…----------------------------------------------
| Id | Operation | Name |…| Pstart| Pstop | TQ |IN-OUT| PQ Distrib |
----------------------------------------------------------…----------------------------------------------
| 0 | SELECT STATEMENT | |…| | | | | |
| 1 | SORT AGGREGATE | |…| | | | | |
| 2 | PX COORDINATOR | |…| | | | | |
| 3 | PX SEND QC (RANDOM) | :TQ10000 |…| | | Q1,00 | P->S | QC (RAND) |
| 4 | SORT AGGREGATE | |…| | | Q1,00 | PCWP | |
| 5 | PX BLOCK ITERATOR | |…| 3 | 3 | Q1,00 | PCWC | |
|* 6 | TABLE ACCESS STORAGE FULL| EXT_HYBRID_TEST |…| 3 | 3 | Q1,00 | PCWP | |
----------------------------------------------------------…----------------------------------------------
50
Hybrid Partition の 実行計画(4)
 外部表とデータベースを跨るプルーニングをした場合の実行計画
SELECT COUNT(*) FROM EXT_HYBRID_TEST WHERE ID BETWEEN 101 AND 300;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR());
COUNT(*)
----------
200
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID avhgg9pamtg34, child number 0
:
Plan hash value: 598631855
--------------------------------------------------------------...----------------------------------------------
| Id | Operation | Name |...| Pstart| Pstop | TQ |IN-OUT| PQ Distrib |
--------------------------------------------------------------...----------------------------------------------
| 0 | SELECT STATEMENT | |...| | | | | |
| 1 | SORT AGGREGATE | |...| | | | | |
| 2 | PX COORDINATOR | |...| | | | | |
| 3 | PX SEND QC (RANDOM) | :TQ10000 |...| | | Q1,00 | P->S | QC (RAND) |
| 4 | SORT AGGREGATE | |...| | | Q1,00 | PCWP | |
| 5 | PX BLOCK ITERATOR | |...| 2 | 3 | Q1,00 | PCWC | |
|* 6 | TABLE ACCESS HYBRID PART FULL| EXT_HYBRID_TEST |...| 2 | 3 | Q1,00 | PCWP | |
|* 7 | TABLE ACCESS STORAGE FULL | EXT_HYBRID_TEST |...| 2 | 3 | Q1,00 | PCWP | |
--------------------------------------------------------------...----------------------------------------------
51
動いてるぞ!!!(小並3
Hybrid Partition の 検証結果
52
Hybrid Partition on Autonomous DB の 検証雑感
 下記の図のようなData Lake構築に向いた機能
 過去の古いデータをObject Storageに、アクセス頻度の高いホット
なデータをAutonomous Databaseに…といった運用が可能
 ただ現時点(2019年11月)では既存パーティションの定義を変更して
Object Storageを参照させる…というAPIが無いため、今後に期待
53
Hybrid Partition の 参考ドキュメント
 Oracle Database VLDBおよびパーティショニング・ガイド 19c
– ハイブリッド・パーティション表の管理
https://docs.oracle.com/cd/F19136_01/vldbg/manage_hypt.html#GUID-
ACBDB3B2-0A16-4CFD-8FF1-A57C9B3D907F
 Oracle Cloud Using Oracle Autonomous Data Warehouse
– CREATE_HYBRID_PART_TABLE Procedure
https://docs.oracle.com/en/cloud/paas/autonomous-data-warehouse-
cloud/user/dbms-cloud.html#GUID-AF2965F5-354C-40E4-B2AA-
3C17D9FA507C
54
4. オプティマイザ統計系
の 新機能・検証Feedback
55
オプティマイザ統計系の新機能群
 SQLチューニング・ガイド 19c, 19.1での変更点, 新機能 より
56
「統計ベースの問合せ変換」
「リアルタイム統計」
を検証してみる。
オプティマイザ統計系の新機能を検証
57
統計ベースの問合せ変換 の 仕様(1)
 5.6 統計ベースの問合せ変換(マニュアル記述)
– https://docs.oracle.com/cd/F19136_01/tgsql/query-
transformations.html#GUID-4CB77742-41A2-49D3-A04F-5C79EE237A3A
– 場合によっては、表自体ではなく表統計を問い合せることで、Oracle
Databaseは問合せを満たすことができます。
– 統計ベースの変換の利点は、一般に表統計は表よりもはるかに小さいことで
す。メタデータ問合せのパフォーマンスは、表内の行数に依存しないため、
大規模な表の方がはるかに高速になります。
– (中略)
– 集計のタイプ…たとえば、集計はMIN、MAX、COUNTまたは
APPROXIMATE_COUNT_DISTINCTです。
– (後略)
58
統計ベースの問合せ変換 の 仕様(2)
 5.6 統計ベースの問合せ変換(マニュアル記述)
59
VW_SQT_~
を狙って行く
統計ベースの問合せ変換を動確するには…
60
統計ベースの問合せ変換・テストデータ
 簡単なテストデータを作成(1000万件)して統計採取
CREATE TABLE STATISTICS_TEST
AS SELECT LEVEL AS ID
, 'STR' || LEVEL AS STATISTICS_STR
, TO_DATE('20191201', 'YYYYMMDD') + LEVEL/24/60/60 AS STATISTICS_DATE
FROM DUAL
CONNECT BY LEVEL <= 10000000;
EXEC DBMS_STATS.GATHER_TABLE_STATS('AYSHIBAT', 'STATISTICS_TEST', METHOD_OPT =>
'FOR ALL COLUMNS SIZE AUTO FOR COLUMNS ID SIZE AUTO', NO_INVALIDATE => FALSE,
DEGREE => 6);
61
統計ベースの問合せ変換・SQL実行&PLAN確認
 COUNT(*)なSQLで実行計画を確認したが……
SET LINESIZE 300;
SET PAGESIZE 1000;
SELECT COUNT(*) FROM STATISTICS_TEST;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR());
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------
SQL_ID 9w2bk9yx44317, child number 0
-------------------------------------
SELECT COUNT(*) FROM STATISTICS_TEST
Plan hash value: 709000224
--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | 548 (100)| |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | TABLE ACCESS STORAGE FULL| STATISTICS_TEST | 10M| 548 (11)| 00:00:01 |
--------------------------------------------------------------------------------------
62
動いてませんね?
統計ベースの問合せ変換は……
63
統計ベースの問合せ変換・SQL実行&PLAN確認
 MIN や MAXなSQLでも実行計画を確認したけど……
SET LINESIZE 300;
SET PAGESIZE 1000;
SELECT MIN(ID), MAX(ID) FROM STATISTICS_TEST;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR());
PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------
SQL_ID 90gcva4ba5yut, child number 0
-------------------------------------
SELECT MIN(ID), MAX(ID) FROM STATISTICS_TEST
Plan hash value: 709000224
----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 548 (100)| |
| 1 | SORT AGGREGATE | | 1 | 6 | | |
| 2 | TABLE ACCESS STORAGE FULL| STATISTICS_TEST | 10M| 57M| 548 (11)| 00:00:01 |
----------------------------------------------------------------------------------------------
64
やっぱり
動きませんね???
MIN や MAX でも統計ベースの問合せ変換は……
65
次行ってみましょうか!
人間諦めが肝心なことも…
(スラムダンクの涙に暮れながらコートを去り行く
山王ナイン(5人)を思い浮かべながら……)
堂本監督「負けたことがある
というのが、
いつか大きな財産になる」
66
リアルタイム統計 の 仕様(1)
 10.3.3.3 リアルタイム統計(マニュアル記述)
– https://docs.oracle.com/cd/F19136_01/tgsql/optimizer-statistics-
concepts.html#GUID-769E609D-0312-43A7-9581-3F3EACF10BA9
– Oracle Database 19c以降、データベースでは従来型DML操作の
実行中にリアルタイム統計が自動的に収集されます。
– (中略)
– DML操作で表を変更している場合、Oracle Databaseによって
最も重要な統計の値が動的に計算されます
– (中略)
67
リアルタイム統計 の 仕様(2)
 10.3.3.3 リアルタイム統計(マニュアル記述)
68
DBA_TAB_COL_STATISTICS
や
DBA_TAB_STATISTICS
を追ってみる。
ディクショナリでリアルタイム統計を追跡
69
リアルタイム統計・テストデータ
 簡単なテストデータを作成(10000件)して統計採取
CREATE TABLE STATISTICS_TEST
AS SELECT LEVEL AS ID
, 'STR' || LEVEL AS STATISTICS_STR
, TO_DATE('20191201', 'YYYYMMDD') + LEVEL/24/60/60 AS STATISTICS_DATE
FROM DUAL
CONNECT BY LEVEL <= 10000;
EXEC DBMS_STATS.GATHER_TABLE_STATS('AYSHIBAT', 'STATISTICS_TEST', METHOD_OPT =>
'FOR ALL COLUMNS SIZE AUTO FOR COLUMNS ID SIZE AUTO', NO_INVALIDATE => FALSE,
DEGREE => 6);
70
リアルタイム統計(動作前)・テストデータの表統計
 リアルタイム統計動作前の
表統計(DBA_TAB_STATISTICS)は下記の通り
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS';
SELECT TABLE_NAME, NUM_ROWS, LAST_ANALYZED, NOTES
FROM DBA_TAB_STATISTICS
WHERE TABLE_NAME = 'STATISTICS_TEST'
AND OWNER = 'AYSHIBAT';
TABLE_NAME NUM_ROWS LAST_ANALYZED NOTES
------------------------------ ---------- ------------------- -------------------------
STATISTICS_TEST 10000 2019/12/03 07:56:18
71
リアルタイム統計(動作前)・テストデータの列統計
 リアルタイム統計動作前の
列統計(DBA_TAB_COL_STATISTICS)は下記の通り
SELECT COLUMN_NAME
, NUM_DISTINCT
, LOW_VALUE
, HIGH_VALUE
, NOTES
FROM DBA_TAB_COL_STATISTICS
WHERE TABLE_NAME = 'STATISTICS_TEST'
AND OWNER = 'AYSHIBAT';
COLUMN_NAME NUM_DISTINCT LOW_VALUE HIGH_VALUE NOTES
-------------------- ------------ ---------------------- ----------------------- --------------------------
ID 10000 C102 C302 HYPERLOGLOG
STATISTICS_STR 10000 53545231 53545239393939 HYPERLOGLOG
STATISTICS_DATE 10000 78770C01010102 78770C01032F29 HYPERLOGLOG
72
リアルタイム統計(動作前)・サンプルSQLと実行計画
 リアルタイム統計動作前のサンプルSQLと実行計画は以下の通り
SELECT COUNT(*) FROM STATISTICS_TEST;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR());
:
COUNT(*)
----------
10000
:
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------
SQL_ID 9w2bk9yx44317, child number 0
:
Plan hash value: 709000224
--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | 2 (100)| |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | TABLE ACCESS STORAGE FULL| STATISTICS_TEST | 10000 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------------------
73
リアルタイム統計・テストデータを追加投入
 テストデータを追加投入(100件)+おまじない
INSERT INTO STATISTICS_TEST
SELECT (LEVEL+10000) AS ID
, 'STR' || (LEVEL+10000) AS
STATISTICS_STR
, TO_DATE('20191201', 'YYYYMMDD') + (LEVEL+10000)/24/60/60 AS
STATISTICS_DATE
FROM DUAL
CONNECT BY LEVEL <= 100;
COMMIT;
EXEC DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;
74
リアルタイム統計(動作後)・テストデータの表統計
 リアルタイム統計動作後の表統計(DBA_TAB_STATISTICS)は
下記の通り、何か追加されてますね……。
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS';
SELECT TABLE_NAME, NUM_ROWS, LAST_ANALYZED, NOTES
FROM DBA_TAB_STATISTICS
WHERE TABLE_NAME = 'STATISTICS_TEST'
AND OWNER = 'AYSHIBAT';
TABLE_NAME NUM_ROWS LAST_ANALYZED NOTES
------------------------------ ---------- ------------------- -------------------------
STATISTICS_TEST 10000 2019/12/03 07:56:18
STATISTICS_TEST 10100 2019/12/03 07:59:20 STATS_ON_CONVENTIONAL_DML
75
リアルタイム統計(動作後)・テストデータの列統計
 リアルタイム統計動作後の列統計(DBA_TAB_COL_STATISTICS)は
下記の通り、こちらにも何か居ますね。。。
SELECT COLUMN_NAME
, NUM_DISTINCT
, LOW_VALUE
, HIGH_VALUE
, NOTES
FROM DBA_TAB_COL_STATISTICS
WHERE TABLE_NAME = 'STATISTICS_TEST'
AND OWNER = 'AYSHIBAT';
COLUMN_NAME NUM_DISTINCT LOW_VALUE HIGH_VALUE NOTES
-------------------- ------------ -------------------- -------------------- -------------------------
ID 10000 C102 C302 HYPERLOGLOG
STATISTICS_STR 10000 53545231 53545239393939 HYPERLOGLOG
STATISTICS_DATE 10000 78770C01010102 78770C01032F29 HYPERLOGLOG
ID C102 C30202 STATS_ON_CONVENTIONAL_DML
STATISTICS_STR 53545231 53545239393939 STATS_ON_CONVENTIONAL_DML
STATISTICS_DATE 78770C01010102 78770C01033115 STATS_ON_CONVENTIONAL_DML
76
リアルタイム統計(動作前)・サンプルSQLと実行計画
 リアルタイム統計動作前のサンプルSQLと実行計画は以下の通り、
それっぽいの居ますやね……!彡(゚)(゚)
SELECT /* AAA */ COUNT(*) FROM STATISTICS_TEST;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR());
:
COUNT(*)
----------
10100
:
Plan hash value: 709000224
--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | 2 (100)| |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | TABLE ACCESS STORAGE FULL| STATISTICS_TEST | 10100 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------------------
Note
-----
- dynamic statistics used: statistics for conventional DML
77
統計ベース問合せ変換 and リアルタイム統計の 検証雑感
 Oracle Database の Optimizer は実行計画の予測精度を上げると云う
方向性の改善を昔からやっていて、リアルタイム統計はその一環
 FLUSH_DATABASE_MONITORING_INFO実行のタイミングでリアル
タイム統計が動作していることから、統計の失効の処理にひと手間を
加えているんじゃないかと思う。
 統計ベースの問合せ変換は動作させることが出来なかった……
発動条件に到達してないと予測されるんですが、よく判らんかった。
彡(-)(-)
78
5. まとめ
79
まとめ
 一部機能を除き、動作することは確認できたZe! (`・ω・)Ъ
 期待の新機能が軒並み Exadata専用という事で、環境入手
のハードルは高かったんですが、Always Free の 登場で敷
居はグッと下がったはず。
 DDD 2016で語った「進化する統計」「進化する実行計
画」「進化するSQL性能」に「進化する索引」が追加され
て、今後もますます目が離せませんやね!!! 彡(^)(^)
 Autonomous Database と Oracle Database 19cに
皆さんも是非触れてみて下さいね。
80
進化したOptimizer で クソSQLを駆逐してやる!
(進撃の巨人で5年ぶりに超大型巨人と対峙する
エレンさんを思い浮かべながら……)
エレン「クソSQLだな……」
81
元ネタ
(c) 石垣ゆうき・講談社・
MMR マガジンミステリー調査班
(c) 諫山創・講談社・進撃の巨人
(c) 井上雄彦・集英社・スラムダンク
82
おわり
ご清聴ありがとうございました!

More Related Content

What's hot (20)

PDF
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
 
PDF
Dockerからcontainerdへの移行
Kohei Tokunaga
 
PPTX
Hadoop -NameNode HAの仕組み-
Yuki Gonda
 
PDF
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
Masayuki Ozawa
 
PDF
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
 
PPTX
Oracle Database (CDB) on Docker を動かしてみる
オラクルエンジニア通信
 
PDF
アサヒのデータ活用基盤を支えるデータ仮想化技術
Denodo
 
PPTX
Prometheus入門から運用まで徹底解説
貴仁 大和屋
 
PPTX
Azure Api Management 俺的マニュアル 2020年3月版
貴志 上坂
 
PDF
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
Amazon Web Services Japan
 
PDF
これからLDAPを始めるなら 「389-ds」を使ってみよう
Nobuyuki Sasaki
 
PDF
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Masahito Zembutsu
 
PPTX
分散システムについて語らせてくれ
Kumazaki Hiroki
 
PDF
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
Kuniyasu Suzaki
 
PDF
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
Amazon Web Services Japan
 
PPTX
Docker Tokyo
cyberblack28 Ichikawa
 
PDF
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
PPTX
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
JustSystems Corporation
 
PDF
AlmaLinux と Rocky Linux の誕生経緯&比較
beyond Co., Ltd.
 
PPTX
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
 
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
 
Dockerからcontainerdへの移行
Kohei Tokunaga
 
Hadoop -NameNode HAの仕組み-
Yuki Gonda
 
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
Masayuki Ozawa
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
 
Oracle Database (CDB) on Docker を動かしてみる
オラクルエンジニア通信
 
アサヒのデータ活用基盤を支えるデータ仮想化技術
Denodo
 
Prometheus入門から運用まで徹底解説
貴仁 大和屋
 
Azure Api Management 俺的マニュアル 2020年3月版
貴志 上坂
 
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
Amazon Web Services Japan
 
これからLDAPを始めるなら 「389-ds」を使ってみよう
Nobuyuki Sasaki
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Masahito Zembutsu
 
分散システムについて語らせてくれ
Kumazaki Hiroki
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
Kuniyasu Suzaki
 
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
Amazon Web Services Japan
 
Docker Tokyo
cyberblack28 Ichikawa
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
JustSystems Corporation
 
AlmaLinux と Rocky Linux の誕生経緯&比較
beyond Co., Ltd.
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
 

Similar to Autonomous Database で Oracle Database19c 新機能 を味わう。 (20)

PDF
Introduction of Oracle Database Architecture
Ryota Watabe
 
PDF
シンプルでシステマチックな Oracle Database, Exadata 性能分析
Yohei Azekatsu
 
PDF
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
歩 柴田
 
PPTX
Microsoft Ignite 2019 最新アップデート - Azure Big Data Services を俯瞰的に眺める
Daiyu Hatakeyama
 
PDF
D22 目覚めよDBエンジニア 〜世界最速カラムナーデータベースは本物だ!〜 by Koji Shinkubo
Insight Technology, Inc.
 
PDF
[Modern Cloud Day Tokyo 2019] 基調講演(Day2):次世代クラウドがもたらす日本のイノベーション
オラクルエンジニア通信
 
PPTX
そこそこ速くて安全なRDBの使い方
ShunsukeNakamura17
 
PDF
[Oracle Code Tokyo 2017] Live Challenge!! SQLパフォーマンスの高速化の限界を目指せ!
オラクルエンジニア通信
 
PDF
[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔
Insight Technology, Inc.
 
PDF
EDB Postgres Vision 2019
Noriyoshi Shinoda
 
PDF
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
Kohei KaiGai
 
PDF
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
Ryota Watabe
 
PDF
とっておきの方法! Oracle Databaseの自動アップグレードのお勧め手法 省力・最新化 概要編 (Oracle Cloudウェビナーシリーズ: ...
オラクルエンジニア通信
 
PDF
Introduction of Oracle Database Architecture(抜粋版) - JPOUG Oracle Database入学式 ...
Ryota Watabe
 
PDF
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-
歩 柴田
 
PDF
デモとディスカッションで体験するOracle DBトラブル対応
歩 柴田
 
PDF
20150630_データ分析に最適な基盤とは? -コスト/スピードでビジネスバリューを得るために- by 株式会社インサイトテクノロジー CTO 石川雅也
Insight Technology, Inc.
 
PDF
db tech showcase_2014_A14_Actian Vectorで得られる、BIにおける真のパフォーマンスとは
Koji Shinkubo
 
PDF
[CTO Night & Day 2019] AWS Database Overview -データベースの選択指針- #ctonight
Amazon Web Services Japan
 
PDF
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
Akira Shimosako
 
Introduction of Oracle Database Architecture
Ryota Watabe
 
シンプルでシステマチックな Oracle Database, Exadata 性能分析
Yohei Azekatsu
 
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
歩 柴田
 
Microsoft Ignite 2019 最新アップデート - Azure Big Data Services を俯瞰的に眺める
Daiyu Hatakeyama
 
D22 目覚めよDBエンジニア 〜世界最速カラムナーデータベースは本物だ!〜 by Koji Shinkubo
Insight Technology, Inc.
 
[Modern Cloud Day Tokyo 2019] 基調講演(Day2):次世代クラウドがもたらす日本のイノベーション
オラクルエンジニア通信
 
そこそこ速くて安全なRDBの使い方
ShunsukeNakamura17
 
[Oracle Code Tokyo 2017] Live Challenge!! SQLパフォーマンスの高速化の限界を目指せ!
オラクルエンジニア通信
 
[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔
Insight Technology, Inc.
 
EDB Postgres Vision 2019
Noriyoshi Shinoda
 
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
Kohei KaiGai
 
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
Ryota Watabe
 
とっておきの方法! Oracle Databaseの自動アップグレードのお勧め手法 省力・最新化 概要編 (Oracle Cloudウェビナーシリーズ: ...
オラクルエンジニア通信
 
Introduction of Oracle Database Architecture(抜粋版) - JPOUG Oracle Database入学式 ...
Ryota Watabe
 
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-
歩 柴田
 
デモとディスカッションで体験するOracle DBトラブル対応
歩 柴田
 
20150630_データ分析に最適な基盤とは? -コスト/スピードでビジネスバリューを得るために- by 株式会社インサイトテクノロジー CTO 石川雅也
Insight Technology, Inc.
 
db tech showcase_2014_A14_Actian Vectorで得られる、BIにおける真のパフォーマンスとは
Koji Shinkubo
 
[CTO Night & Day 2019] AWS Database Overview -データベースの選択指針- #ctonight
Amazon Web Services Japan
 
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
Akira Shimosako
 
Ad

Recently uploaded (10)

PDF
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
PDF
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
PPTX
新卒・中途採用者向け採用ピッチ資料2025年7月版(20250702).pptx
Official74
 
PDF
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
PDF
2023年版Web3技術の理想と現実
Syuhei Hiya
 
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
PPTX
オープンソース界隈の利用者や技術者から見たオープンソースEDAとは? What is open source EDA from the perspecti...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
PDF
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
PDF
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
PDF
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
新卒・中途採用者向け採用ピッチ資料2025年7月版(20250702).pptx
Official74
 
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
2023年版Web3技術の理想と現実
Syuhei Hiya
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
オープンソース界隈の利用者や技術者から見たオープンソースEDAとは? What is open source EDA from the perspecti...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
Ad

Autonomous Database で Oracle Database19c 新機能 を味わう。

  • 1. JPOUG 15minute #9 Autonomous Database で Oracle Database 19c 新機能 を 味わう。 柴田 歩
  • 2. 2 自己紹介(柴田 歩)  日本オラクル株式会社 クラウド・テクノロジーコンサルティング事業本部 シニアプリンシパルコンサルタント 柴田 歩(しばた あゆむ)  2007年4月に中途で日本オラクルに入社  DBの製品コンサルとして、DB関連のプロジェクトを歴任  やきうのお兄ちゃん な DBエンジニアとして暗躍中!彡(^)(^) – ねら~ITエンジニア雑記 http://d.hatena.ne.jp/gonsuke777/ – Twitter @ora_gonsuke777 2
  • 3. 3  Oracle Databaseを中心とした座談 会’19 – Oracle Code Tokyo 2019 開催報告(パネリスト)  http://www.jpoug.org/2019/09/17/c odetokyo19report  Oracle Database or GoldenGate Advent Calendar 2018  https://adventar.org/calendars/3525  デモとディスカッションで体験する Oracle DBトラブル対応(2018年)  https://www.slideshare.net/shibataay umu/oracle-db-111087832  - JPOUG Advent Calendar 2017 Day 15 - V$SQLとその周辺でER図 を描いてみよう!  https://www.slideshare.net/shibataay umu/vsqler  DDD 2013 SQLチューニングに 必要な考え方と最新テクニック  http://www.oracle.com/technetwo rk/jp/ondemand/ddd-2013- 2051348-ja.html コレ  ブログ「ねら~ITエンジニア雑記」  http://d.hatena.ne.jp/gonsuke777/ • DDD 2016 SQL性能を最大限に引き出す DB 12cクエリー・オプティマイザ 新機 能活用と統計情報運用の戦略 • http://www.oracle.com/technetwork/jp/on demand/ddd-2016-3373953-ja.html コレ 過去コンテンツ
  • 4. 4 免責事項/注意事項/おことわり  本資料において示されている見解は、私自身の “独自研究”, ”独自検証”, ”独自解釈” に基づいた、個人的な見解となります。  従って本資料は Oracle Corporation 及び 日本オラクル の公式見解を必ずしも反映したものではなく、 マニュアル・サポートサイト等で公開されている情報や 実際の製品仕様・動作と異なる可能性があります。  この点は予めご了承ください。  資料は(一部スライドを修正して)公開します。
  • 5. 5 目次 1. はじめに 2. Automatic Indexeing の Feedback 3. Hybrid Partition の Feedback 4. オプティマイザ統計系の新機能Feedback 5. まとめ
  • 7. 7 Oracle Database 19c 新機能検証したろwww Oracle Database 19c 出たての頃のワイ……
  • 12. 12 Oracle Cloud Always Free が登場!
  • 13. 13 Exadata で動作する Autonomous Database Oracle Database Technology Night資料 より
  • 14. 14 よっしゃ Always Free の Autonomous Database で 19c検証したろ!
  • 17. 17 今回は某所(有償)の 19c Preview環境で検証  今回は某所で借りた(有償の)Autonomous Database 19c Preview環境で検証しています。  近い将来 Always Free でも 19c が使えるようになると 思うので、それまで皆さん正座待機して下さいね彡(-)(-)
  • 18. 18 2. Automatic Indexing の 検証結果Feedback
  • 20. 20 検証環境  Compute(Oracle Linux 7.7), VM.Standard2.1(1oCPU)  Autonomous Transaction Processing(ATP) 19c Preview, 2oCPU, Autoscaling有り Compute (Swingbench) Tokyo Region(and AD1) VCN Autonomous Database(ATP) IGW ssh JDBC Thin Subnet
  • 21. 21 Swingbenchの設定  Data Scale は 10(約10GB分) を指定  Automatic Indexingの効果を見るために、PK以外の索引を削除  Swingbench の 仮想ユーザー数は 6 で SOE V2 で負荷かけ DROP INDEX SOE.WHS_LOCATION_IX; DROP INDEX SOE.INV_PRODUCT_IX; DROP INDEX SOE.INV_WAREHOUSE_IX; DROP INDEX SOE.ADDRESS_CUST_IX; DROP INDEX SOE.ITEM_ORDER_IX; DROP INDEX SOE.ITEM_PRODUCT_IX; DROP INDEX SOE.ORD_SALES_REP_IX; DROP INDEX SOE.ORD_CUSTOMER_IX; DROP INDEX SOE.ORD_ORDER_DATE_IX; DROP INDEX SOE.ORD_WAREHOUSE_IX; : : ./charbench -c ../configs/SOE_Server_Side_V2.xml -cf /home/opc/work/Wallet_ATPAYSHIBAT02.zip -cs atpayshibat02_tp -u soe -p xxxxxxxxxx -uc 6 -v users,tpm,tps,vresp,dml -rt 0:20 :
  • 22. 22 Automatic Indexing の 有効化  DBMS_AUTO_INDEX.CONFIGUREプロシージャで有効化  実行後の関連設定(DBA_AUTO_INDEX_CONFIGビュー) EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','IMPLEMENT'); SELECT PARAMETER_NAME, PARAMETER_VALUE FROM DBA_AUTO_INDEX_CONFIG; PARAMETER_NAME PARAMETER_VALUE ---------------------------------- ----------------- AUTO_INDEX_COMPRESSION ON AUTO_INDEX_DEFAULT_TABLESPACE AUTO_INDEX_MODE IMPLEMENT AUTO_INDEX_REPORT_RETENTION 373 AUTO_INDEX_RETENTION_FOR_AUTO 373 AUTO_INDEX_RETENTION_FOR_MANUAL AUTO_INDEX_SCHEMA AUTO_INDEX_SPACE_BUDGET 100
  • 24. 24 SQL実行回数(from AWR)の比較  Automatic Indexing後のスループットが向上! Automatic Indexing動作前 Automatic Indexing動作後
  • 25. 25 Top10待機イベント(from AWR)の比較  どちらも DB CPU が待機イベントの中心 Automatic Indexing動作前 Automatic Indexing動作後
  • 26. 26 DBA_INDEXESディクショナリを参照  幾つかの索引が自動で作成されている。無効(UNUSABLE)な索引や 有効(VALID)でもINVISIBLE(不可視)な索引もある。 SELECT INDEX_NAME, AUTO, STATUS, VISIBILITY, COMPRESSION FROM DBA_INDEXES WHERE OWNER = 'SOE' ORDER BY INDEX_NAME; INDEX_NAME AUT STATUS VISIBILIT COMPRESSION ------------------------------ --- -------- --------- ------------- ADDRESS_PK NO VALID VISIBLE DISABLED CARD_DETAILS_PK NO VALID VISIBLE DISABLED : SYS_AI_20tjdcuwznyhx YES VALID INVISIBLE ADVANCED LOW ★コレ SYS_AI_2s9jaak2smbq4 YES UNUSABLE INVISIBLE ADVANCED LOW ★コレ SYS_AI_3z00frhp9vd91 YES VALID INVISIBLE ADVANCED LOW ★コレ SYS_AI_4bz3nuupj3kt5 YES VALID VISIBLE ADVANCED LOW ★コレ SYS_AI_5p2zapcmkj174 YES VALID VISIBLE ADVANCED LOW ★コレ SYS_AI_b9k5zyq0mjwf5 YES UNUSABLE INVISIBLE ADVANCED LOW ★コレ SYS_AI_dt4w4vr174j9m YES N/A VISIBLE ADVANCED LOW ★コレ SYS_AI_gbwwy984mc1ft YES VALID VISIBLE ADVANCED LOW ★コレ
  • 27. 27 Automatic Indexing の レポート(1)  DBMS_AUTO_INDEX.REPORT_ACTIVITYファンクションで Automatic Indexing の レポートを出力 SET LONG 1000000; SET LONGC 1000000; SET LINESIZE 170; SET PAGESIZE 1000; ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY/MM/DD HH24:MI:SS.FF'; SELECT DBMS_AUTO_INDEX.REPORT_ACTIVITY( TO_TIMESTAMP('2019/11/23 00:00:00.00’), TO_TIMESTAMP('2019/11/26 00:00:00.00’), 'TEXT', 'ALL', 'ALL’ ) FROM DUAL;
  • 28. 28 Automatic Indexing の レポート(2)  GENERAL INFORMATIONセクション と SUMMARYセクション DBMS_AUTO_INDEX.REPORT_ACTIVITY(TO_TIMESTAMP('2019/11/2300:00:00.00’) … ---------------------------------------------------------------------- GENERAL INFORMATION ------------------------------------------------------------------------------- Activity start : 23-11月-2019 00:00:00 Activity end : 26-11月-2019 00:00:00 Executions completed : 77 Executions interrupted : 0 Executions with fatal error : 0 ------------------------------------------------------------------------------- SUMMARY (AUTO INDEXES) ------------------------------------------------------------------------------- Index candidates : 8 Indexes created (visible / invisible) : 6 (4 / 2) Space used (visible / invisible) : 1.43 GB (1.18 GB / 251.72 MB) Indexes dropped : 0 SQL statements verified : 14 SQL statements improved (improvement factor) : 5 (1639.7x) SQL plan baselines created : 0 Overall improvement factor : 4.9x -------------------------------------------------------------------------------
  • 29. 29 Automatic Indexing の レポート(3)  MANUL INDEXESセクション と INDEX DETAILSセクション SUMMARY (MANUAL INDEXES) ------------------------------------------------------------------------------- Unused indexes : 0 Space used : 0 B Unusable indexes : 0 ------------------------------------------------------------------------------- INDEX DETAILS ------------------------------------------------------------------------------- 1. The following indexes were created: *: invisible ------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------- | Owner | Table | Index | Key | Type | Properties | ---------------------------------------------------------------------------------------------- | SOE | ADDRESSES | SYS_AI_4bz3nuupj3kt5 | CUSTOMER_ID | B-TREE | NONE | | SOE | CARD_DETAILS | SYS_AI_dt4w4vr174j9m | CUSTOMER_ID | B-TREE | LOCAL | | SOE | ORDERS | * SYS_AI_3z00frhp9vd91 | WAREHOUSE_ID | B-TREE | NONE | | SOE | ORDERS | SYS_AI_5p2zapcmkj174 | CUSTOMER_ID | B-TREE | NONE | | SOE | ORDERS | SYS_AI_gbwwy984mc1ft | SALES_REP_ID | B-TREE | NONE | | SOE | PRODUCT_DESCRIPTIONS | * SYS_AI_20tjdcuwznyhx | PRODUCT_ID | B-TREE | NONE | ---------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------
  • 30. 30 Automatic Indexing の レポート(4)  VERIFICATIONセクション(抜粋) VERIFICATION DETAILS ------------------------------------------------------------------------------- 1. The performance of the following statements improved: ------------------------------------------------------------------------------- Parsing Schema Name : SOE SQL ID : 29qp10usqkqh0 SQL Text : SELECT TT.ORDER_TOTAL, TT.SALES_REP_ID, TT.ORDER_DATE, CUSTOMERS.CUST_FIRST_NAME, CUSTOMERS.CUST_LAST_NAME FROM (SELECT ORDERS.ORDER_TOTAL, ORDERS.SALES_REP_ID, ORDERS.ORDER_DATE, ORDERS.CUSTOMER_ID, RANK() OVER (ORDER BY ORDERS.ORDER_TOTAL DESC) SAL_RANK FROM ORDERS WHERE ORDERS.SALES_REP_ID = :B1 ... Improvement Factor : 683.4x Execution Statistics: ----------------------------- Original Plan Auto Index Plan ---------------------------- ---------------------------- Elapsed Time (s): 1235522012 13024 CPU Time (s): 1231284830 9898 Buffer Gets: 257075897 590 Optimizer Cost: 5174 1222 Disk Reads: 0 3 Direct Writes: 0 0 Rows Processed: 551468 12 Executions: 816 1
  • 31. 31 Automatic Indexing の レポート(5)  PLANS SECTION(抜粋) PLANS SECTION ---------------------------------------------------------------- - Original ----------------------------- Plan Hash Value : 2280072513 ---------------------------------------------------------------- | Id | Operation | Name | ---------------------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | HASH JOIN | | | 2 | JOIN FILTER CREATE | :BF0001 | | 3 | PART JOIN FILTER CREATE | :BF0000 | | 4 | NESTED LOOPS | | | 5 | NESTED LOOPS | | | 6 | STATISTICS COLLECTOR | | | 7 | VIEW | | | 8 | WINDOW SORT PUSHED RANK | | | 9 | PARTITION HASH ALL | | | 10 | TABLE ACCESS STORAGE FULL | ORDERS | | 11 | INDEX UNIQUE SCAN | CUSTOMERS_PK | | 12 | TABLE ACCESS BY GLOBAL INDEX ROWID | CUSTOMERS | | 13 | JOIN FILTER USE | :BF0001 | | 14 | PARTITION HASH JOIN-FILTER | | | 15 | TABLE ACCESS STORAGE FULL | CUSTOMERS | ---------------------------------------------------------------- - With Auto Indexes ----------------------------- Plan Hash Value : 3608924074 --------------------------------------------------------------------------------- | Id | Operation | Name | --------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | NESTED LOOPS | | | 2 | NESTED LOOPS | | | * 3 | VIEW | | | * 4 | WINDOW SORT PUSHED RANK | | | 5 | TABLE ACCESS BY GLOBAL INDEX ROWID BATCHED | ORDERS | | * 6 | INDEX RANGE SCAN | SYS_AI_gbwwy984mc1ft | | * 7 | INDEX UNIQUE SCAN | CUSTOMERS_PK | | 8 | TABLE ACCESS BY GLOBAL INDEX ROWID | CUSTOMERS | ---------------------------------------------------------------------------------
  • 33. 33 Automatic Indexing の 検証雑感  まずは動いた事に一安心(新機能は色々アレなんで…  15分~20分ごとにバックグラウンドで何かが 動いている模様?(マニュアル記述は15分)  従来は人間が Try&Error で作成していた索引を、 RDBMS が自動計測して付与するのは画期的!  自動作成された索引は手動では削除不可で、 詳細なログ等も無いので、Blackbox感は凄いwwwww
  • 34. 34 Automatic Indexing の 参考ドキュメント  Oracle Database データベース管理者ガイド 19c – 21.7 自動索引の管理 https://docs.oracle.com/cd/F19136_01/admin/managing-indexes.html#GUID- D1285CD5-95C0-4E74-8F26-A02018EA7999  Oracle Database PL/SQLパッケージおよびタイプ・リファレンス 19c – 30 DBMS_AUTO_INDEX – https://docs.oracle.com/cd/F19136_01/arpls/DBMS_AUTO_INDEX.html#GUID- 78C59A20-2F92-448F-96F7-6C4FBB355E42
  • 35. 35 3. Hybrid Partition の Feedback
  • 36. 36 Hybrid Partition とは?  パーティションの一部を外部表(EXTERNAL TABLE) として定義することができる 19c の 新機能 Partition P201901 Partition P201902 Partition P201903 Partition P201904 File (External Table) Database Hybrid Partition表
  • 37. 37 Autonomous Database の Hybrid Partition  Object Storage の ファイル を Hybrid Partition の 外部表(EXTERNAL TABLE)として定義することが可能 Partition P201901 Partition P201902 Partition P201903 Partition P201904 Database Hybrid Partition表 Object Storage
  • 38. 38 Object Storage にファイル格納して、 Autonomous Databaseで Hybrid Partition を定義してみる。 Hybrid Partition の 検証方法
  • 39. 39 Hybrid Partition の 検証構成  P100, P200 のデータを Object Storage に格納  P300, P400 のデータは Autonomous Database に格納 Partition P100 Partition P200 Partition P300 Partition P400 Autonomous Database Hybrid Partition表 Object Storage
  • 40. 40 Object Storage に 格納したデータ  数値, 文字列, 日付書式文字列の単純なデータ  gzip圧縮して Object Storage にアップロード "ID","HYBRID_STR","HYBRID_DATE" 1,"STR1",2019/12/01 00:00:01 2,"STR2",2019/12/01 00:00:02 3,"STR3",2019/12/01 00:00:03 4,"STR4",2019/12/01 00:00:04 5,"STR5",2019/12/01 00:00:05 6,"STR6",2019/12/01 00:00:06 7,"STR7",2019/12/01 00:00:07 8,"STR8",2019/12/01 00:00:08 9,"STR9",2019/12/01 00:00:09 : :
  • 41. 41 Object Storage の Screenshot  gzip圧縮したファイル を Object Storage にアップロード
  • 42. 42 OCI IAMユーザー の Authtoken を 生成  おまじない・その1
  • 43. 43 Autonomous Database に IAMユーザーの Authtoken を 登録(Credential作成)  おまじない・その2 BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'OCI_CLI_AYS_ATP', -- 任意の文字列 username => 'IAM_USER_AYSHIBAT02', -- IAMユーザー名 password => 'xxxxxxxxxxxxxxxxxxx' -- 生成したAuth Token ); END; /
  • 44. 44 Hybrid Partition表を作成(DBMS_CLOUD)  DBMS_CLOUD.CREATE_HYBRID_PART_TABLEプロシージャで Hybrid Partition表を作成 BEGIN DBMS_CLOUD.CREATE_HYBRID_PART_TABLE( table_name => 'EXT_HYBRID_TEST', --テーブル名 credential_name => 'OCI_CLI_AYS_ATP', --クレデンシャル名 format => json_object( 'characterset' VALUE 'AL32UTF8' -- 文字コードを指定 , 'recorddelimiter' VALUE '''n''' -- 行区切り文字 , 'type' VALUE 'csv' -- ファイルのタイプを指定 , 'skipheaders' VALUE 1 -- 読み飛ばすヘッダ行数を指定 , 'compression' VALUE 'gzip' -- 圧縮形式を指定 , 'dateformat' VALUE 'YYYY/MM/DD HH24:MI:SS' -- DATE型のフォーマットを指定 ) , column_list => 'ID NUMBER, ' || 'HYBRID_STR VARCHAR2(43), ' || 'HYBRID_DATE DATE' , partitioning_clause => 'PARTITION BY RANGE (ID) (' || ' PARTITION P100 VALUES LESS THAN (101) ' || ' EXTERNAL LOCATION(''https://objectstorage.ap-tokyo-1…/hybrid_test_p100.csv.gz'') ' || ' , PARTITION P200 VALUES LESS THAN (201) ' || ' EXTERNAL LOCATION(''https://objectstorage.ap-tokyo-1…/hybrid_test_p200.csv.gz'') ' || ' , PARTITION P300 VALUES LESS THAN (301)' || ' , PARTITION P400 VALUES LESS THAN (401)' || ')' ); END; /
  • 45. 45 Hybrid Partition表にデータをロード  データベース格納部分(P300, P400)のデータをロード INSERT INTO EXT_HYBRID_TEST SELECT LEVEL+200 AS ID , 'STR' || (LEVEL+200) AS HYBRID_STR , TO_DATE('20191201', 'YYYYMMDD') + (LEVEL+200)/24/60/60 AS HYBRID_DATE FROM DUAL CONNECT BY LEVEL <= 200; COMMIT;
  • 46. 46 Hybrid Partition表をGET_DDLしてみる。  Hybrid Partition表をGET_DDLしてみると下記のようになってます。 SELECT DBMS_METADATA.GET_DDL('TABLE','EXT_HYBRID_TEST','AYSHIBAT') FROM DUAL; CREATE TABLE "AYSHIBAT"."EXT_HYBRID_TEST" ( "ID" NUMBER, "HYBRID_STR" VARCHAR2(43) COLLATE "USING_NLS_COMP", "HYBRID_DATE" DATE ) DEFAULT COLLATION "USING_NLS_COMP" EXTERNAL PARTITION ATTRIBUTES ( TYPE ORACLE_LOADER DEFAULT DIRECTORY "DATA_PUMP_DIR" ACCESS PARAMETERS ( RECORDS CHARACTERSET AL32UTF8 DELIMITED BY 'n' IGNORE_HEADER=1 COMPRESSION GZIP NOLOGFILE NOBADFILE NODISCARDFILE READSIZE=10000000 CREDENTIAL 'OCI_CLI_AYS_ATP' FIELDS CSV WITHOUT EMBEDDED DATE_FORMAT DATE MASK 'YYYY/MM/DD HH24:MI:SS' NOTRIM ) REJECT LIMIT 0 ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 PARTITION BY RANGE ("ID") ( PARTITION "P100" VALUES LESS THAN (101) EXTERNAL LOCATION( 'https://objectstorage.ap-tokyo-1.oraclecloud.com/…/hybrid_test_p100.csv.gz'), PARTITION "P200" VALUES LESS THAN (201) EXTERNAL LOCATION( 'https://objectstorage.ap-tokyo-1.oraclecloud.com/…/hybrid_test_p200.csv.gz'), PARTITION "P300" VALUES LESS THAN (301) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 8388608 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "DATA" , PARTITION "P400" VALUES LESS THAN (401) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 8388608 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "DATA" ) PARALLEL
  • 48. 48 Hybrid Partition の 実行計画(2)  外部表(ファイル)の Partiiton をプルーニングした場合の実行計画 SELECT COUNT(*) FROM EXT_HYBRID_TEST WHERE ID BETWEEN 1 AND 100; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR()); COUNT(*) ---------- 100 PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- SQL_ID dwj72nyfta1k4, child number 0 : Plan hash value: 2802513750 -----------------------------------------------------------...---------------------------------------------- | Id | Operation | Name |...| Pstart| Pstop | TQ |IN-OUT| PQ Distrib | -----------------------------------------------------------...---------------------------------------------- | 0 | SELECT STATEMENT | |...| | | | | | | 1 | SORT AGGREGATE | |...| | | | | | | 2 | PX COORDINATOR | |...| | | | | | | 3 | PX SEND QC (RANDOM) | :TQ10000 |...| | | Q1,00 | P->S | QC (RAND) | | 4 | SORT AGGREGATE | |...| | | Q1,00 | PCWP | | | 5 | PX BLOCK ITERATOR | |...| 1 | 1 | Q1,00 | PCWC | | |* 6 | EXTERNAL TABLE ACCESS FULL| EXT_HYBRID_TEST |...| 1 | 1 | Q1,00 | PCWP | | -----------------------------------------------------------...----------------------------------------------
  • 49. 49 Hybrid Partition の 実行計画(3)  データベースの Partition をプルーニングした場合の実行計画 SELECT COUNT(*) FROM EXT_HYBRID_TEST WHERE ID BETWEEN 201 AND 300; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR()); COUNT(*) ---------- 100 PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- SQL_ID a22rszz8wn2b3, child number 0 : Plan hash value: 272980602 ----------------------------------------------------------…---------------------------------------------- | Id | Operation | Name |…| Pstart| Pstop | TQ |IN-OUT| PQ Distrib | ----------------------------------------------------------…---------------------------------------------- | 0 | SELECT STATEMENT | |…| | | | | | | 1 | SORT AGGREGATE | |…| | | | | | | 2 | PX COORDINATOR | |…| | | | | | | 3 | PX SEND QC (RANDOM) | :TQ10000 |…| | | Q1,00 | P->S | QC (RAND) | | 4 | SORT AGGREGATE | |…| | | Q1,00 | PCWP | | | 5 | PX BLOCK ITERATOR | |…| 3 | 3 | Q1,00 | PCWC | | |* 6 | TABLE ACCESS STORAGE FULL| EXT_HYBRID_TEST |…| 3 | 3 | Q1,00 | PCWP | | ----------------------------------------------------------…----------------------------------------------
  • 50. 50 Hybrid Partition の 実行計画(4)  外部表とデータベースを跨るプルーニングをした場合の実行計画 SELECT COUNT(*) FROM EXT_HYBRID_TEST WHERE ID BETWEEN 101 AND 300; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR()); COUNT(*) ---------- 200 PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- SQL_ID avhgg9pamtg34, child number 0 : Plan hash value: 598631855 --------------------------------------------------------------...---------------------------------------------- | Id | Operation | Name |...| Pstart| Pstop | TQ |IN-OUT| PQ Distrib | --------------------------------------------------------------...---------------------------------------------- | 0 | SELECT STATEMENT | |...| | | | | | | 1 | SORT AGGREGATE | |...| | | | | | | 2 | PX COORDINATOR | |...| | | | | | | 3 | PX SEND QC (RANDOM) | :TQ10000 |...| | | Q1,00 | P->S | QC (RAND) | | 4 | SORT AGGREGATE | |...| | | Q1,00 | PCWP | | | 5 | PX BLOCK ITERATOR | |...| 2 | 3 | Q1,00 | PCWC | | |* 6 | TABLE ACCESS HYBRID PART FULL| EXT_HYBRID_TEST |...| 2 | 3 | Q1,00 | PCWP | | |* 7 | TABLE ACCESS STORAGE FULL | EXT_HYBRID_TEST |...| 2 | 3 | Q1,00 | PCWP | | --------------------------------------------------------------...----------------------------------------------
  • 52. 52 Hybrid Partition on Autonomous DB の 検証雑感  下記の図のようなData Lake構築に向いた機能  過去の古いデータをObject Storageに、アクセス頻度の高いホット なデータをAutonomous Databaseに…といった運用が可能  ただ現時点(2019年11月)では既存パーティションの定義を変更して Object Storageを参照させる…というAPIが無いため、今後に期待
  • 53. 53 Hybrid Partition の 参考ドキュメント  Oracle Database VLDBおよびパーティショニング・ガイド 19c – ハイブリッド・パーティション表の管理 https://docs.oracle.com/cd/F19136_01/vldbg/manage_hypt.html#GUID- ACBDB3B2-0A16-4CFD-8FF1-A57C9B3D907F  Oracle Cloud Using Oracle Autonomous Data Warehouse – CREATE_HYBRID_PART_TABLE Procedure https://docs.oracle.com/en/cloud/paas/autonomous-data-warehouse- cloud/user/dbms-cloud.html#GUID-AF2965F5-354C-40E4-B2AA- 3C17D9FA507C
  • 57. 57 統計ベースの問合せ変換 の 仕様(1)  5.6 統計ベースの問合せ変換(マニュアル記述) – https://docs.oracle.com/cd/F19136_01/tgsql/query- transformations.html#GUID-4CB77742-41A2-49D3-A04F-5C79EE237A3A – 場合によっては、表自体ではなく表統計を問い合せることで、Oracle Databaseは問合せを満たすことができます。 – 統計ベースの変換の利点は、一般に表統計は表よりもはるかに小さいことで す。メタデータ問合せのパフォーマンスは、表内の行数に依存しないため、 大規模な表の方がはるかに高速になります。 – (中略) – 集計のタイプ…たとえば、集計はMIN、MAX、COUNTまたは APPROXIMATE_COUNT_DISTINCTです。 – (後略)
  • 58. 58 統計ベースの問合せ変換 の 仕様(2)  5.6 統計ベースの問合せ変換(マニュアル記述)
  • 60. 60 統計ベースの問合せ変換・テストデータ  簡単なテストデータを作成(1000万件)して統計採取 CREATE TABLE STATISTICS_TEST AS SELECT LEVEL AS ID , 'STR' || LEVEL AS STATISTICS_STR , TO_DATE('20191201', 'YYYYMMDD') + LEVEL/24/60/60 AS STATISTICS_DATE FROM DUAL CONNECT BY LEVEL <= 10000000; EXEC DBMS_STATS.GATHER_TABLE_STATS('AYSHIBAT', 'STATISTICS_TEST', METHOD_OPT => 'FOR ALL COLUMNS SIZE AUTO FOR COLUMNS ID SIZE AUTO', NO_INVALIDATE => FALSE, DEGREE => 6);
  • 61. 61 統計ベースの問合せ変換・SQL実行&PLAN確認  COUNT(*)なSQLで実行計画を確認したが…… SET LINESIZE 300; SET PAGESIZE 1000; SELECT COUNT(*) FROM STATISTICS_TEST; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR()); PLAN_TABLE_OUTPUT --------------------------------------------------------------------------- SQL_ID 9w2bk9yx44317, child number 0 ------------------------------------- SELECT COUNT(*) FROM STATISTICS_TEST Plan hash value: 709000224 -------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Cost (%CPU)| Time | -------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | 548 (100)| | | 1 | SORT AGGREGATE | | 1 | | | | 2 | TABLE ACCESS STORAGE FULL| STATISTICS_TEST | 10M| 548 (11)| 00:00:01 | --------------------------------------------------------------------------------------
  • 63. 63 統計ベースの問合せ変換・SQL実行&PLAN確認  MIN や MAXなSQLでも実行計画を確認したけど…… SET LINESIZE 300; SET PAGESIZE 1000; SELECT MIN(ID), MAX(ID) FROM STATISTICS_TEST; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR()); PLAN_TABLE_OUTPUT ---------------------------------------------------------------------------------------------- SQL_ID 90gcva4ba5yut, child number 0 ------------------------------------- SELECT MIN(ID), MAX(ID) FROM STATISTICS_TEST Plan hash value: 709000224 ---------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ---------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 548 (100)| | | 1 | SORT AGGREGATE | | 1 | 6 | | | | 2 | TABLE ACCESS STORAGE FULL| STATISTICS_TEST | 10M| 57M| 548 (11)| 00:00:01 | ----------------------------------------------------------------------------------------------
  • 64. 64 やっぱり 動きませんね??? MIN や MAX でも統計ベースの問合せ変換は……
  • 66. 66 リアルタイム統計 の 仕様(1)  10.3.3.3 リアルタイム統計(マニュアル記述) – https://docs.oracle.com/cd/F19136_01/tgsql/optimizer-statistics- concepts.html#GUID-769E609D-0312-43A7-9581-3F3EACF10BA9 – Oracle Database 19c以降、データベースでは従来型DML操作の 実行中にリアルタイム統計が自動的に収集されます。 – (中略) – DML操作で表を変更している場合、Oracle Databaseによって 最も重要な統計の値が動的に計算されます – (中略)
  • 67. 67 リアルタイム統計 の 仕様(2)  10.3.3.3 リアルタイム統計(マニュアル記述)
  • 69. 69 リアルタイム統計・テストデータ  簡単なテストデータを作成(10000件)して統計採取 CREATE TABLE STATISTICS_TEST AS SELECT LEVEL AS ID , 'STR' || LEVEL AS STATISTICS_STR , TO_DATE('20191201', 'YYYYMMDD') + LEVEL/24/60/60 AS STATISTICS_DATE FROM DUAL CONNECT BY LEVEL <= 10000; EXEC DBMS_STATS.GATHER_TABLE_STATS('AYSHIBAT', 'STATISTICS_TEST', METHOD_OPT => 'FOR ALL COLUMNS SIZE AUTO FOR COLUMNS ID SIZE AUTO', NO_INVALIDATE => FALSE, DEGREE => 6);
  • 70. 70 リアルタイム統計(動作前)・テストデータの表統計  リアルタイム統計動作前の 表統計(DBA_TAB_STATISTICS)は下記の通り ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS'; SELECT TABLE_NAME, NUM_ROWS, LAST_ANALYZED, NOTES FROM DBA_TAB_STATISTICS WHERE TABLE_NAME = 'STATISTICS_TEST' AND OWNER = 'AYSHIBAT'; TABLE_NAME NUM_ROWS LAST_ANALYZED NOTES ------------------------------ ---------- ------------------- ------------------------- STATISTICS_TEST 10000 2019/12/03 07:56:18
  • 71. 71 リアルタイム統計(動作前)・テストデータの列統計  リアルタイム統計動作前の 列統計(DBA_TAB_COL_STATISTICS)は下記の通り SELECT COLUMN_NAME , NUM_DISTINCT , LOW_VALUE , HIGH_VALUE , NOTES FROM DBA_TAB_COL_STATISTICS WHERE TABLE_NAME = 'STATISTICS_TEST' AND OWNER = 'AYSHIBAT'; COLUMN_NAME NUM_DISTINCT LOW_VALUE HIGH_VALUE NOTES -------------------- ------------ ---------------------- ----------------------- -------------------------- ID 10000 C102 C302 HYPERLOGLOG STATISTICS_STR 10000 53545231 53545239393939 HYPERLOGLOG STATISTICS_DATE 10000 78770C01010102 78770C01032F29 HYPERLOGLOG
  • 72. 72 リアルタイム統計(動作前)・サンプルSQLと実行計画  リアルタイム統計動作前のサンプルSQLと実行計画は以下の通り SELECT COUNT(*) FROM STATISTICS_TEST; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR()); : COUNT(*) ---------- 10000 : PLAN_TABLE_OUTPUT --------------------------------------------------------------------------------------- SQL_ID 9w2bk9yx44317, child number 0 : Plan hash value: 709000224 -------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Cost (%CPU)| Time | -------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | 2 (100)| | | 1 | SORT AGGREGATE | | 1 | | | | 2 | TABLE ACCESS STORAGE FULL| STATISTICS_TEST | 10000 | 2 (0)| 00:00:01 | --------------------------------------------------------------------------------------
  • 73. 73 リアルタイム統計・テストデータを追加投入  テストデータを追加投入(100件)+おまじない INSERT INTO STATISTICS_TEST SELECT (LEVEL+10000) AS ID , 'STR' || (LEVEL+10000) AS STATISTICS_STR , TO_DATE('20191201', 'YYYYMMDD') + (LEVEL+10000)/24/60/60 AS STATISTICS_DATE FROM DUAL CONNECT BY LEVEL <= 100; COMMIT; EXEC DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;
  • 74. 74 リアルタイム統計(動作後)・テストデータの表統計  リアルタイム統計動作後の表統計(DBA_TAB_STATISTICS)は 下記の通り、何か追加されてますね……。 ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS'; SELECT TABLE_NAME, NUM_ROWS, LAST_ANALYZED, NOTES FROM DBA_TAB_STATISTICS WHERE TABLE_NAME = 'STATISTICS_TEST' AND OWNER = 'AYSHIBAT'; TABLE_NAME NUM_ROWS LAST_ANALYZED NOTES ------------------------------ ---------- ------------------- ------------------------- STATISTICS_TEST 10000 2019/12/03 07:56:18 STATISTICS_TEST 10100 2019/12/03 07:59:20 STATS_ON_CONVENTIONAL_DML
  • 75. 75 リアルタイム統計(動作後)・テストデータの列統計  リアルタイム統計動作後の列統計(DBA_TAB_COL_STATISTICS)は 下記の通り、こちらにも何か居ますね。。。 SELECT COLUMN_NAME , NUM_DISTINCT , LOW_VALUE , HIGH_VALUE , NOTES FROM DBA_TAB_COL_STATISTICS WHERE TABLE_NAME = 'STATISTICS_TEST' AND OWNER = 'AYSHIBAT'; COLUMN_NAME NUM_DISTINCT LOW_VALUE HIGH_VALUE NOTES -------------------- ------------ -------------------- -------------------- ------------------------- ID 10000 C102 C302 HYPERLOGLOG STATISTICS_STR 10000 53545231 53545239393939 HYPERLOGLOG STATISTICS_DATE 10000 78770C01010102 78770C01032F29 HYPERLOGLOG ID C102 C30202 STATS_ON_CONVENTIONAL_DML STATISTICS_STR 53545231 53545239393939 STATS_ON_CONVENTIONAL_DML STATISTICS_DATE 78770C01010102 78770C01033115 STATS_ON_CONVENTIONAL_DML
  • 76. 76 リアルタイム統計(動作前)・サンプルSQLと実行計画  リアルタイム統計動作前のサンプルSQLと実行計画は以下の通り、 それっぽいの居ますやね……!彡(゚)(゚) SELECT /* AAA */ COUNT(*) FROM STATISTICS_TEST; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR()); : COUNT(*) ---------- 10100 : Plan hash value: 709000224 -------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Cost (%CPU)| Time | -------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | 2 (100)| | | 1 | SORT AGGREGATE | | 1 | | | | 2 | TABLE ACCESS STORAGE FULL| STATISTICS_TEST | 10100 | 2 (0)| 00:00:01 | -------------------------------------------------------------------------------------- Note ----- - dynamic statistics used: statistics for conventional DML
  • 77. 77 統計ベース問合せ変換 and リアルタイム統計の 検証雑感  Oracle Database の Optimizer は実行計画の予測精度を上げると云う 方向性の改善を昔からやっていて、リアルタイム統計はその一環  FLUSH_DATABASE_MONITORING_INFO実行のタイミングでリアル タイム統計が動作していることから、統計の失効の処理にひと手間を 加えているんじゃないかと思う。  統計ベースの問合せ変換は動作させることが出来なかった…… 発動条件に到達してないと予測されるんですが、よく判らんかった。 彡(-)(-)
  • 79. 79 まとめ  一部機能を除き、動作することは確認できたZe! (`・ω・)Ъ  期待の新機能が軒並み Exadata専用という事で、環境入手 のハードルは高かったんですが、Always Free の 登場で敷 居はグッと下がったはず。  DDD 2016で語った「進化する統計」「進化する実行計 画」「進化するSQL性能」に「進化する索引」が追加され て、今後もますます目が離せませんやね!!! 彡(^)(^)  Autonomous Database と Oracle Database 19cに 皆さんも是非触れてみて下さいね。
  • 81. 81 元ネタ (c) 石垣ゆうき・講談社・ MMR マガジンミステリー調査班 (c) 諫山創・講談社・進撃の巨人 (c) 井上雄彦・集英社・スラムダンク