- データベース管理者のための主要20c新機能の学習
- データベース管理者のための主要20c新機能の学習
- パフォーマンスおよび高可用性のオプション
- Oracle Database In-Memory
- データベース・インメモリー外部表の拡張
- 演習: ハイブリッド・パーティション表でのインメモリーの使用
演習: ハイブリッド・パーティション表でのインメモリーの使用
この演習では、内部パーティションか外部パーティションかに関係なく、ハイブリッド・パーティション表のINMEMORY
属性が表レベルとパーティション・レベルの両方でどのように処理されるかを示します。
- 新しい演習を開始する前に、演習の環境の推奨事項を参照してください。
- 演習を開始する前に、
/home/oracle/labs/M104784GC10/IM_Hybrid_External_setup.sh
シェル・スクリプトを実行します。このシェル・スクリプトでは、IM列ストアを110Mに構成し、HYPTEXT
ユーザーおよび外部ファイル用のディレクトリを作成します。$ cd /home/oracle/labs/M104784GC10 $ /home/oracle/labs/M104784GC10/IM_Hybrid_External_setup.sh SQL*Plus: Release 20.0.0.0.0 - Production on Wed Jan 15 05:17:45 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to: Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL> SHUTDOWN ABORT ORACLE instance shut down. SQL> STARTUP MOUNT ORACLE instance started. Total System Global Area 851442944 bytes Fixed Size 9571584 bytes Variable Size 432013312 bytes Database Buffers 285212672 bytes Redo Buffers 7204864 bytes In-Memory Area 117440512 bytes Database mounted. SQL> ALTER SYSTEM SET sga_target=812M SCOPE=spfile; System altered. SQL> ALTER SYSTEM SET inmemory_size=110M SCOPE=SPFILE; System altered. SQL> ALTER SYSTEM SET query_rewrite_integrity=stale_tolerated SCOPE=SPFILE; System altered. SQL> SET ECHO OFF System altered. SQL> ALTER SYSTEM SET INMEMORY_AUTOMATIC_LEVEL=LOW SCOPE=SPFILE; System altered. SQL> shutdown immediate ORA-01109: database not open Database dismounted. ORACLE instance shut down. SQL> STARTUP ORACLE instance started. Total System Global Area 851442944 bytes Fixed Size 9571584 bytes Variable Size 432013312 bytes Database Buffers 285212672 bytes Redo Buffers 7204864 bytes In-Memory Area 117440512 bytes Database mounted. Database opened. SQL> ALTER PLUGGABLE DATABASE pdb20 OPEN; Pluggable database altered. SQL> CONNECT sys/password@PDB20 AS SYSDBA Connected. SQL> ALTER SYSTEM SET INMEMORY_AUTOMATIC_LEVEL=LOW SCOPE=SPFILE; System altered. SQL> ALTER SYSTEM SET query_rewrite_integrity=stale_tolerated SCOPE=SPFILE; System altered. SQL> shutdown immediate Pluggable Database closed. SQL> STARTUP Pluggable Database opened. SQL> exit Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL*Plus: Release 20.0.0.0.0 - Production on Wed Jan 15 05:19:12 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to: Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL> ALTER SYSTEM SET db_create_file_dest=''; System altered. SQL> DROP USER hyptext CASCADE; DROP USER hyptext CASCADE * ERROR at line 1: ORA-01918: user 'HYPTEXT' does not exist SQL> DROP TABLESPACE imtbs INCLUDING CONTENTS AND DATAFILES cascade constraints; DROP TABLESPACE imtbs INCLUDING CONTENTS AND DATAFILES cascade constraints * ERROR at line 1: ORA-00959: tablespace 'IMTBS' does not exist SQL> CREATE TABLESPACE imtbs DATAFILE '/u02/app/oracle/oradata/imtbs1.dbf' SIZE 10G; Tablespace created. SQL> CREATE USER hyptext IDENTIFIED BY password DEFAULT TABLESPACE imtbs; User created. SQL> GRANT create session, create table, unlimited tablespace TO hyptext; Grant succeeded. SQL> HOST mkdir -p /home/oracle/labs/M104784GC10/CENT17 SQL> HOST mkdir -p /home/oracle/labs/M104784GC10/CENT18 SQL> HOST mkdir -p /home/oracle/labs/M104784GC10/CENT19 SQL> HOST mkdir -p /home/oracle/labs/M104784GC10/CENT20 SQL> HOST mv /home/oracle/labs/M104784GC10/cent17.dat /home/oracle/labs/M104784GC10/CENT17 SQL> HOST mv /home/oracle/labs/M104784GC10/cent19.dat /home/oracle/labs/M104784GC10/CENT19 SQL> HOST mv /home/oracle/labs/M104784GC10/cent20.dat /home/oracle/labs/M104784GC10/CENT20 SQL> CREATE OR REPLACE DIRECTORY cent17 AS '/home/oracle/labs/M104784GC10/CENT17'; Directory created. SQL> CREATE OR REPLACE DIRECTORY cent18 AS '/home/oracle/labs/M104784GC10/CENT18'; Directory created. SQL> CREATE OR REPLACE DIRECTORY cent19 AS '/home/oracle/labs/M104784GC10/CENT19'; Directory created. SQL> CREATE OR REPLACE DIRECTORY cent20 AS '/home/oracle/labs/M104784GC10/CENT20'; Directory created. SQL> GRANT read, write ON DIRECTORY cent17 TO hyptext; Grant succeeded. SQL> GRANT read, write ON DIRECTORY cent18 TO hyptext; Grant succeeded. SQL> GRANT read, write ON DIRECTORY cent19 TO hyptext; Grant succeeded. SQL> GRANT read, write ON DIRECTORY cent20 TO hyptext; Grant succeeded. SQL> exit Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 $
- 演習の第1部では、ハイブリッド・パーティション表の
INMEMORY
属性が、内部パーティションまたは外部パーティションを含む表レベルでどのように処理されるかを示します。SYSTEM
としてPDB20
に接続します。$ sqlplus system@PDB20 SQL*Plus: Release 20.0.0.0.0 - Production on Thu Jan 9 04:08:41 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Enter password: password Last Successful login time: Wed Jan 08 2020 12:03:56 +00:00 Connected to: Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL> COL partition_name FORMAT A14 SQL> COL segment_name FORMAT A14 SQL>
- インメモリー・ハイブリッド・パーティション表を作成します。
INMEMORY
属性を表レベルで適用します。SQL> CREATE TABLE hyptext.inmem_tab (history_event NUMBER , time_id DATE) TABLESPACE imtbs EXTERNAL PARTITION ATTRIBUTES (TYPE ORACLE_LOADER DEFAULT DIRECTORY cent20 ACCESS PARAMETERS (FIELDS TERMINATED BY ',' (history_event , time_id DATE 'dd-MON-yyyy')) REJECT LIMIT UNLIMITED ) PARTITION BY RANGE (time_id) (PARTITION cent18 VALUES LESS THAN (TO_DATE('01-Jan-1800','dd-MON-yyyy')) EXTERNAL, PARTITION cent19 VALUES LESS THAN (TO_DATE('01-Jan-1900','dd-MON-yyyy')) EXTERNAL DEFAULT DIRECTORY cent19 LOCATION ('cent19.dat'), PARTITION cent20 VALUES LESS THAN (TO_DATE('01-Jan-2000','dd-MON-yyyy')) EXTERNAL LOCATION('cent20.dat'), PARTITION y2000 VALUES LESS THAN (TO_DATE('01-Jan-2001','dd-MON-yyyy')), PARTITION pmax VALUES LESS THAN (MAXVALUE)) INMEMORY MEMCOMPRESS FOR QUERY HIGH; Table created. SQL>
- インメモリー・セグメントとして定義されているパーティションはどれですか。
SQL> SELECT partition_name, inmemory, inmemory_compression FROM dba_tab_partitions WHERE table_name = 'INMEM_TAB'; PARTITION_NAME INMEMORY INMEMORY_COMPRESS -------------- -------- ----------------- CENT18 CENT19 CENT20 PMAX ENABLED FOR QUERY HIGH Y2000 ENABLED FOR QUERY HIGH SQL>
内部パーティションはインメモリーとして定義されます。外部パーティションは、インメモリーとしても非インメモリーとしても定義されません。
DBA_XTERNAL_TAB_PARTITIONS
ビューを使用して、外部パーティションのインメモリー・ステータスを表示します。SQL> SELECT partition_name, inmemory, inmemory_compression FROM dba_xternal_tab_partitions WHERE TABLE_NAME='INMEM_TAB'; PARTITION_NAME INMEMORY INMEMORY_COMPRESS -------------- -------- ----------------- CENT19 ENABLED FOR QUERY HIGH CENT20 ENABLED FOR QUERY HIGH SQL>
/home/oracle/labs/M104784GC10/insert_select.sql
SQLスクリプトを実行します。このスクリプトでは、表のパーティションに行を挿入し、表を問い合せてデータをインメモリー列ストアに移入します。インメモリー列ストアに移入されるパーティションはどれですか。SQL> @/home/oracle/labs/M104784GC10/insert_select.sql SQL> INSERT INTO hyptext.inmem_tab VALUES (21,to_date('31.12.2000', 'dd.mm.yyyy')); 1 row created. SQL> INSERT INTO hyptext.inmem_tab VALUES (22,to_date('31.10.2000', 'dd.mm.yyyy')); 1 row created. SQL> INSERT INTO hyptext.inmem_tab VALUES (23,to_date('01.02.2000', 'dd.mm.yyyy')); 1 row created. SQL> INSERT INTO hyptext.inmem_tab VALUES (24,to_date('27.03.2000', 'dd.mm.yyyy')); 1 row created. SQL> INSERT INTO hyptext.inmem_tab VALUES (25,to_date('31.03.2000', 'dd.mm.yyyy')); 1 row created. SQL> INSERT INTO hyptext.inmem_tab VALUES (26,to_date('15.04.2000', 'dd.mm.yyyy')); 1 row created. SQL> INSERT INTO hyptext.inmem_tab VALUES (27,to_date('02.09.2000', 'dd.mm.yyyy')); 1 row created. SQL> INSERT INTO hyptext.inmem_tab VALUES (29,to_date('12.08.2018', 'dd.mm.yyyy')); 1 row created. SQL> INSERT INTO hyptext.inmem_tab VALUES (30,to_date('15.09.2017', 'dd.mm.yyyy')); 1 row created. SQL> COMMIT; Commit complete. SQL> SELECT * FROM hyptext.inmem_tab; HISTORY_EVENT TIME_ID ------------- --------- 11 01-JAN-76 12 01-JAN-15 13 01-JAN-28 14 01-JAN-37 15 01-JAN-49 16 01-FEB-59 17 01-FEB-96 18 01-FEB-97 19 01-FEB-98 20 01-FEB-98 1 01-JAN-76 2 01-JAN-15 3 01-JAN-28 4 01-JAN-37 5 01-JAN-49 6 01-FEB-59 7 01-FEB-96 8 01-FEB-97 9 01-FEB-98 10 01-FEB-98 21 31-DEC-00 22 31-OCT-00 23 01-FEB-00 24 27-MAR-00 25 31-MAR-00 26 15-APR-00 27 02-SEP-00 29 12-AUG-18 30 15-SEP-17 29 rows selected. SQL>
SQL> SELECT segment_name, partition_name FROM v$im_segments; SEGMENT_NAME PARTITION_NAME -------------- -------------- INMEM_TAB PMAX INMEM_TAB CENT19 INMEM_TAB Y2000 INMEM_TAB CENT20 SQL19>
INMEMORY
属性が表レベルで設定されたため、すべての内部パーティションおよび外部パーティションがインメモリー列ストアに移入されます。- 実行計画には、パーティションへの様々なタイプのアクセスが表示されますか。
SQL> EXPLAIN PLAN FOR SELECT * FROM hyptext.inmem_tab; Explained. SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); PLAN_TABLE_OUTPUT -------------------------------------------------------------------- Plan hash value: 2513257138 -------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | -------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 188K | 4057K| 105 (1)| 00:00:01 | | | | 1 | PARTITION RANGE ALL | | 188K | 4057K| 105 (1)| 00:00:01 | 1 | 5 | | 2 | TABLE ACCESS HYBRID PART INMEMORY FULL| INMEM_TAB | 188K | 4057K| 105 (1)| 00:00:01 | 1 | 5 | | 3 | TABLE ACCESS INMEMORY FULL | INMEM_TAB | | | | | 1 | 5 | -------------------------------------------------------------------- 10 rows selected. SQL> EXPLAIN PLAN FOR SELECT * FROM hyptext.inmem_tab PARTITION (CENT19); Explained. SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); PLAN_TABLE_OUTPUT -------------------------------------------------------------------- Plan hash value: 938963152 -------------------------------------------------------------------- | Id | Operation | Name | Rows | B ytes | Cost (%CPU)| Time | Pstart| Pstop | -------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 8169 | 175K| 29 (0)| 00:00:01 | | | | 1 | PARTITION RANGE SINGLE | | 8169 | 175K| 29 (0)| 00:00:01 | 2 | 2 | | 2 | EXTERNAL TABLE ACCESS INMEMORY FULL| INMEM_TAB | 8169 | 175K| 29 (0)| 00:00:01 | 2 | 2 | -------------------------------------------------------------------- 9 rows selected. SQL>
アクセス・パスには、
TABLE ACCESS HYBRID PART INMEMORY FULL
(NO INMEMORY
およびINMEMORY
アクセス対象セグメント)または選択した外部パーティションのEXTERNAL TABLE ACCESS INMEMORY FULL
(INMEMORY
)のいずれかが表示されます。 HYPTEXT.INMEM_TAB
表を削除します。SQL> DROP TABLE hyptext.inmem_tab; Table dropped. SQL>
- 演習の第2部では、ハイブリッド・パーティション表の内部パーティションまたは外部パーティションの
INMEMORY
属性がどのように処理されるかを示します。- インメモリー・ハイブリッド・パーティション表を作成します。パーティション・レベルで、内部パーティションおよび外部パーティションに
INMEMORY
属性を適用します。SQL> CREATE TABLE hyptext.inmem_tab (history_event NUMBER , time_id DATE) TABLESPACE imtbs EXTERNAL PARTITION ATTRIBUTES (TYPE ORACLE_LOADER DEFAULT DIRECTORY cent20 ACCESS PARAMETERS (FIELDS TERMINATED BY ',' (history_event , time_id DATE 'dd-MON-yyyy')) REJECT LIMIT UNLIMITED ) PARTITION BY RANGE (time_id) (PARTITION cent18 VALUES LESS THAN (TO_DATE('01-Jan-1800','dd-MON-yyyy')) EXTERNAL, PARTITION cent19 VALUES LESS THAN (TO_DATE('01-Jan-1900','dd-MON-yyyy')) EXTERNAL DEFAULT DIRECTORY cent19 LOCATION ('cent19.dat') INMEMORY MEMCOMPRESS FOR QUERY HIGH, PARTITION cent20 VALUES LESS THAN (TO_DATE('01-Jan-2000','dd-MON-yyyy')) EXTERNAL LOCATION('cent20.dat'), PARTITION y2000 VALUES LESS THAN (TO_DATE('01-Jan-2001','dd-MON-yyyy')) INMEMORY MEMCOMPRESS FOR CAPACITY LOW, PARTITION pmax VALUES LESS THAN (MAXVALUE)); Table created. SQL>
- インメモリーとして定義されているパーティションはどれですか。
SQL> SELECT partition_name, inmemory, inmemory_compression FROM dba_tab_partitions WHERE table_name = 'INMEM_TAB'; PARTITION_NAME INMEMORY INMEMORY_COMPRESS -------------- -------- ----------------- CENT18 CENT19 CENT20 PMAX DISABLED Y2000 ENABLED FOR CAPACITY LOW SQL>
INMEMORY
属性が設定された内部パーティションのみがインメモリーとして定義されます。外部パーティションは、INMEMORY
属性が設定されていても、インメモリーとしても非インメモリーとしても定義されません。DBA_XTERNAL_TAB_PARTITIONS
ビューを使用して、外部パーティションのインメモリー・ステータスを表示します。SQL> SELECT partition_name, inmemory, inmemory_compression FROM dba_xternal_tab_partitions WHERE TABLE_NAME='INMEM_TAB'; PARTITION_NAME INMEMORY INMEMORY_COMPRESS -------------- -------- ----------------- CENT19 ENABLED FOR QUERY HIGH CENT20 DISABLED SQL>
/home/oracle/labs/M104784GC10/insert_select.sql
SQLスクリプトを実行します。このスクリプトでは、表のパーティションに行を挿入し、表を問い合せてデータをインメモリー列ストアに移入します。インメモリー列ストアに移入されるパーティションはどれですか。SQL> @/home/oracle/labs/M104784GC10/insert_select.sql SQL> SET ECHO ON SQL> SQL> INSERT INTO hyptext.inmem_tab VALUES (21,to_date('31.12.2000', 'dd.mm.yyyy')); 1 row created. SQL> INSERT INTO hyptext.inmem_tab VALUES (22,to_date('31.10.2000', 'dd.mm.yyyy')); 1 row created. SQL> INSERT INTO hyptext.inmem_tab VALUES (23,to_date('01.02.2000', 'dd.mm.yyyy')); 1 row created. SQL> INSERT INTO hyptext.inmem_tab VALUES (24,to_date('27.03.2000', 'dd.mm.yyyy')); 1 row created. SQL> INSERT INTO hyptext.inmem_tab VALUES (25,to_date('31.03.2000', 'dd.mm.yyyy')); 1 row created. SQL> INSERT INTO hyptext.inmem_tab VALUES (26,to_date('15.04.2000', 'dd.mm.yyyy')); 1 row created. SQL> INSERT INTO hyptext.inmem_tab VALUES (27,to_date('02.09.2000', 'dd.mm.yyyy')); 1 row created. SQL> INSERT INTO hyptext.inmem_tab VALUES (29,to_date('12.08.2018', 'dd.mm.yyyy')); 1 row created. SQL> INSERT INTO hyptext.inmem_tab VALUES (30,to_date('15.09.2017', 'dd.mm.yyyy')); 1 row created. SQL> COMMIT; Commit complete. SQL> SELECT * FROM hyptext.inmem_tab; HISTORY_EVENT TIME_ID ------------- --------- 11 01-JAN-76 12 01-JAN-15 13 01-JAN-28 14 01-JAN-37 15 01-JAN-49 16 01-FEB-59 17 01-FEB-96 18 01-FEB-97 19 01-FEB-98 20 01-FEB-98 1 01-JAN-76 2 01-JAN-15 3 01-JAN-28 4 01-JAN-37 5 01-JAN-49 6 01-FEB-59 7 01-FEB-96 8 01-FEB-97 9 01-FEB-98 10 01-FEB-98 21 31-DEC-00 22 31-OCT-00 23 01-FEB-00 24 27-MAR-00 25 31-MAR-00 26 15-APR-00 27 02-SEP-00 29 12-AUG-18 30 15-SEP-17 29 rows selected. SQL>
SQL> SELECT segment_name, partition_name FROM v$im_segments; SEGMENT_NAME PARTITION_NAME -------------- -------------- INMEM_TAB CENT19 INMEM_TAB Y2000 SQL>
Oracle Database 20cセッションでは、インメモリーとして定義された内部パーティションおよび外部パーティションがインメモリー列ストアに移入されます。
- 実行計画には、パーティションへの様々なタイプのアクセスが表示されますか。
SQL> EXPLAIN PLAN FOR SELECT * FROM hyptext.inmem_tab; Explained. SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); PLAN_TABLE_OUTPUT -------------------------------------------------------------------- Plan hash value: 2513257138 -------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | -------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 188K | 4057K| 367 (1)| 00:00:01 | | | | 1 | PARTITION RANGE ALL | | 188K | 4057K| 367 (1)| 00:00:01 | 1 | 5 | | 2 | TABLE ACCESS HYBRID PART INMEMORY FULL| INMEM_TAB | 188K | 4057K| 367 (1)| 00:00:01 | 1 | 5 | | 3 | TABLE ACCESS INMEMORY FULL | INMEM_TAB | | | | | 1 | 5 | -------------------------------------------------------------------- 10 rows selected. SQL> EXPLAIN PLAN FOR SELECT * FROM hyptext.inmem_tab PARTITION (CENT19); Explained. SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); PLAN_TABLE_OUTPUT -------------------------------------------------------------------- Plan hash value: 938963152 -------------------------------------------------------------------- | Id | Operation | Name | Rows | B ytes | Cost (%CPU)| Time | Pstart| Pstop | -------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 8169 | 175K| 29 (0)| 00:00:01 | | | | 1 | PARTITION RANGE SINGLE | | 8169 | 175K| 29 (0)| 00:00:01 | 2 | 2 | | 2 | EXTERNAL TABLE ACCESS INMEMORY FULL| INMEM_TAB | 8169 | 175K| 29 (0)| 00:00:01 | 2 | 2 | -------------------------------------------------------------------- 9 rows selected. SQL>
SQL> EXPLAIN PLAN FOR SELECT * FROM hyptext.inmem_tab PARTITION (CENT20); Explained. SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); PLAN_TABLE_OUTPUT -------------------------------------------------------------------- Plan hash value: 938963152 -------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Co st (%CPU)| Time | Pstart| Pstop | -------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 8169 | 175K| 29 (0)| 00:00:01 | | | | 1 | PARTITION RANGE SINGLE | | 8169 | 175K| 29 (0)| 00:00:01 | 3 | 3 | | 2 | EXTERNAL TABLE ACCESS FULL| INMEM_TAB | 8169 | 175K| 29 (0)| 00:00:01 | 3 | 3 | -------------------------------------------------------------------- 9 rows selected. SQL>
アクセス・パスには、
TABLE ACCESS HYBRID PART INMEMORY FULL
(NO INMEMORY
およびINMEMORY
アクセス対象セグメント)または選択した外部パーティションのEXTERNAL TABLE ACCESS INMEMORY FULL
(INMEMORY
)または選択した外部パーティションのEXTERNAL TABLE ACCESS FULL
(NO INMEMORY
)のいずれかが表示されます。 HYPTEXT.INMEM_TAB
表を削除します。SQL> DROP TABLE HYPTEXT.INMEM_TAB PURGE; Table dropped. SQL> EXIT $
- インメモリー・ハイブリッド・パーティション表を作成します。パーティション・レベルで、内部パーティションおよび外部パーティションに
親トピック: データベース・インメモリー外部表の拡張