Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 82 Ad
Advertisement

More Related Content

Slideshows for you (20)

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

Advertisement

Recently uploaded (20)

Advertisement

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

  1. 1. JPOUG 15minute #9 Autonomous Database で Oracle Database 19c 新機能 を 味わう。 柴田 歩
  2. 2. 2 自己紹介(柴田 歩)  日本オラクル株式会社 クラウド・テクノロジーコンサルティング事業本部 シニアプリンシパルコンサルタント 柴田 歩(しばた あゆむ)  2007年4月に中途で日本オラクルに入社  DBの製品コンサルとして、DB関連のプロジェクトを歴任  やきうのお兄ちゃん な DBエンジニアとして暗躍中!彡(^)(^) – ねら~ITエンジニア雑記 http://d.hatena.ne.jp/gonsuke777/ – Twitter @ora_gonsuke777 2
  3. 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. 4 免責事項/注意事項/おことわり  本資料において示されている見解は、私自身の “独自研究”, ”独自検証”, ”独自解釈” に基づいた、個人的な見解となります。  従って本資料は Oracle Corporation 及び 日本オラクル の公式見解を必ずしも反映したものではなく、 マニュアル・サポートサイト等で公開されている情報や 実際の製品仕様・動作と異なる可能性があります。  この点は予めご了承ください。  資料は(一部スライドを修正して)公開します。
  5. 5. 5 目次 1. はじめに 2. Automatic Indexeing の Feedback 3. Hybrid Partition の Feedback 4. オプティマイザ統計系の新機能Feedback 5. まとめ
  6. 6. 6 1. はじめに
  7. 7. 7 Oracle Database 19c 新機能検証したろwww Oracle Database 19c 出たての頃のワイ……
  8. 8. 8 マニュアル(19c ライセンス情報)
  9. 9. 9 ファッ!!!!?????
  10. 10. 10 注目の新機能は軒並み Engineered System専用! (MMRの有名なシーンを思い浮かべながら……) キバヤシ「19cの注目新機能は、 軒並みExadat専用だ!」 MMRの面々「な…なんだってー!!!」
  11. 11. 11 捨てる神あれば、 拾う神有り! だがちょっと待って欲しい……
  12. 12. 12 Oracle Cloud Always Free が登場!
  13. 13. 13 Exadata で動作する Autonomous Database Oracle Database Technology Night資料 より
  14. 14. 14 よっしゃ Always Free の Autonomous Database で 19c検証したろ!
  15. 15. 15 ファッ!!!!????? ※判り難いですがグレーアウトしてる
  16. 16. 16 注目の新機能は軒並み Engineered System専用! (進撃の巨人の「何の成果も!!!得られませんでした!!!」 を思い浮かべながら……) キース団長「Always Freeだと!!! 19c Preview版が使えませんでし た!!!」
  17. 17. 17 今回は某所(有償)の 19c Preview環境で検証  今回は某所で借りた(有償の)Autonomous Database 19c Preview環境で検証しています。  近い将来 Always Free でも 19c が使えるようになると 思うので、それまで皆さん正座待機して下さいね彡(-)(-)
  18. 18. 18 2. Automatic Indexing の 検証結果Feedback
  19. 19. 19 Swingbenchで負荷掛けして、 Automatic Indexing動作前後 の傾向を比較 ※具体的な数字は提示するとアレなので 前後の比率を提示 Automatic Indexing の 検証方法
  20. 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. 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. 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. 23. 23 Swingbenchスループット(TPM)の比較  Automatic Indexing後のスループットが向上! Automatic Indexing動作前 Automatic Indexing動作後
  24. 24. 24 SQL実行回数(from AWR)の比較  Automatic Indexing後のスループットが向上! Automatic Indexing動作前 Automatic Indexing動作後
  25. 25. 25 Top10待機イベント(from AWR)の比較  どちらも DB CPU が待機イベントの中心 Automatic Indexing動作前 Automatic Indexing動作後
  26. 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. 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. 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. 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. 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. 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. 32. 32 動いてるぞ!!!(小並 良くなってるぞ!!!(小並2 Automatic Indexing の 検証結果
  33. 33. 33 Automatic Indexing の 検証雑感  まずは動いた事に一安心(新機能は色々アレなんで…  15分~20分ごとにバックグラウンドで何かが 動いている模様?(マニュアル記述は15分)  従来は人間が Try&Error で作成していた索引を、 RDBMS が自動計測して付与するのは画期的!  自動作成された索引は手動では削除不可で、 詳細なログ等も無いので、Blackbox感は凄いwwwww
  34. 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. 35 3. Hybrid Partition の Feedback
  36. 36. 36 Hybrid Partition とは?  パーティションの一部を外部表(EXTERNAL TABLE) として定義することができる 19c の 新機能 Partition P201901 Partition P201902 Partition P201903 Partition P201904 File (External Table) Database Hybrid Partition表
  37. 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. 38 Object Storage にファイル格納して、 Autonomous Databaseで Hybrid Partition を定義してみる。 Hybrid Partition の 検証方法
  39. 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. 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. 41 Object Storage の Screenshot  gzip圧縮したファイル を Object Storage にアップロード
  42. 42. 42 OCI IAMユーザー の Authtoken を 生成  おまじない・その1
  43. 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. 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. 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. 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. 47. 47 Hybrid Partition の実行計画を見てみる。 Hybrid Partition の 実行計画(1)
  48. 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. 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. 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. 51. 51 動いてるぞ!!!(小並3 Hybrid Partition の 検証結果
  52. 52. 52 Hybrid Partition on Autonomous DB の 検証雑感  下記の図のようなData Lake構築に向いた機能  過去の古いデータをObject Storageに、アクセス頻度の高いホット なデータをAutonomous Databaseに…といった運用が可能  ただ現時点(2019年11月)では既存パーティションの定義を変更して Object Storageを参照させる…というAPIが無いため、今後に期待
  53. 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
  54. 54. 54 4. オプティマイザ統計系 の 新機能・検証Feedback
  55. 55. 55 オプティマイザ統計系の新機能群  SQLチューニング・ガイド 19c, 19.1での変更点, 新機能 より
  56. 56. 56 「統計ベースの問合せ変換」 「リアルタイム統計」 を検証してみる。 オプティマイザ統計系の新機能を検証
  57. 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. 58 統計ベースの問合せ変換 の 仕様(2)  5.6 統計ベースの問合せ変換(マニュアル記述)
  59. 59. 59 VW_SQT_~ を狙って行く 統計ベースの問合せ変換を動確するには…
  60. 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. 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. 62. 62 動いてませんね? 統計ベースの問合せ変換は……
  63. 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. 64 やっぱり 動きませんね??? MIN や MAX でも統計ベースの問合せ変換は……
  65. 65. 65 次行ってみましょうか! 人間諦めが肝心なことも… (スラムダンクの涙に暮れながらコートを去り行く 山王ナイン(5人)を思い浮かべながら……) 堂本監督「負けたことがある というのが、 いつか大きな財産になる」
  66. 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. 67 リアルタイム統計 の 仕様(2)  10.3.3.3 リアルタイム統計(マニュアル記述)
  68. 68. 68 DBA_TAB_COL_STATISTICS や DBA_TAB_STATISTICS を追ってみる。 ディクショナリでリアルタイム統計を追跡
  69. 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. 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. 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. 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. 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. 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. 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. 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. 77 統計ベース問合せ変換 and リアルタイム統計の 検証雑感  Oracle Database の Optimizer は実行計画の予測精度を上げると云う 方向性の改善を昔からやっていて、リアルタイム統計はその一環  FLUSH_DATABASE_MONITORING_INFO実行のタイミングでリアル タイム統計が動作していることから、統計の失効の処理にひと手間を 加えているんじゃないかと思う。  統計ベースの問合せ変換は動作させることが出来なかった…… 発動条件に到達してないと予測されるんですが、よく判らんかった。 彡(-)(-)
  78. 78. 78 5. まとめ
  79. 79. 79 まとめ  一部機能を除き、動作することは確認できたZe! (`・ω・)Ъ  期待の新機能が軒並み Exadata専用という事で、環境入手 のハードルは高かったんですが、Always Free の 登場で敷 居はグッと下がったはず。  DDD 2016で語った「進化する統計」「進化する実行計 画」「進化するSQL性能」に「進化する索引」が追加され て、今後もますます目が離せませんやね!!! 彡(^)(^)  Autonomous Database と Oracle Database 19cに 皆さんも是非触れてみて下さいね。
  80. 80. 80 進化したOptimizer で クソSQLを駆逐してやる! (進撃の巨人で5年ぶりに超大型巨人と対峙する エレンさんを思い浮かべながら……) エレン「クソSQLだな……」
  81. 81. 81 元ネタ (c) 石垣ゆうき・講談社・ MMR マガジンミステリー調査班 (c) 諫山創・講談社・進撃の巨人 (c) 井上雄彦・集英社・スラムダンク
  82. 82. 82 おわり ご清聴ありがとうございました!

×