- データベース管理者のための主要20c新機能の学習
- データベース管理者のための主要20c新機能の学習
- パフォーマンスおよび高可用性のオプション
- 自動操作
- 自動ゾーン・マップ
- 演習: 自動ゾーン・マップの使用
演習: 自動ゾーン・マップの使用
この演習では、自動ゾーン・マップを有効にする方法と、介入なしにユーザー表に対して自動ゾーン・マップがどのように作成およびメンテナンスされるかを示します。
- 新しい演習を開始する前に、演習の環境の推奨事項を参照してください。
- 演習の第1部では、DBAの介入のもとでゾーン・マップがどのように作成され表示されるかを示します。
/home/oracle/labs/M104784GC10/setup_zonemap.sh
シェル・スクリプトを使用して、PDB20
にSALES.ZM_TABLE
表を作成します。$ cd /home/oracle/labs/M104784GC10 $ /home/oracle/labs/M104784GC10/setup_zonemap.sh SQL*Plus: Release 20.0.0.0.0 - Production on Tue Feb 25 10:37:32 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2020, Oracle. All rights reserved. Connected to: Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 System altered. 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 Tue Feb 25 10:37:33 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2020, 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 immediate Database closed. Database dismounted. ORACLE instance shut down. 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 Tue Feb 25 10:37:58 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2020, Oracle. All rights reserved. Connected to an idle instance. SQL> STARTUP ORACLE instance started. Total System Global Area 1426062424 bytes Fixed Size 9567320 bytes Variable Size 855638016 bytes Database Buffers 553648128 bytes Redo Buffers 7208960 bytes Database mounted. Database opened. SQL> ALTER PLUGGABLE DATABASE all OPEN; Pluggable database altered. 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 Tue Feb 25 10:38:32 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2020, 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> drop user sales cascade; drop user sales cascade * ERROR at line 1: ORA-01918: user 'SALES' does not exist SQL> create user sales identified by password; User created. SQL> grant create session, create table, unlimited tablespace to sales; Grant succeeded. 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 Tue Feb 25 10:38:33 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2020, 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> CREATE TABLE sales_zm (sale_id NUMBER(10), customer_id NUMBER(10)); Table created. SQL> SQL> DECLARE 2 i NUMBER(10); 3 BEGIN 4 FOR i IN 1..80 5 LOOP 6 INSERT INTO sales_zm 7 SELECT ROWNUM, MOD(ROWNUM,1000) 8 FROM dual 9 CONNECT BY LEVEL <= 100000; 10 COMMIT; 11 END LOOP; 12 END; 13 / PL/SQL procedure successfully completed. SQL> SQL> EXEC dbms_stats.gather_table_stats(ownname=>NULL, tabname=>'SALES_ZM') PL/SQL procedure successfully completed. SQL> EXIT Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 $
SALES
としてPDB20
にログインし、統計トレースでセッションを設定し、SALES_ZM
表を数回問い合せて"consistent gets (一貫性読取り)"値を確認します。$ sqlplus sales@PDB20 Enter password: password SQL> SET AUTOTRACE ON STATISTIC SQL> SELECT COUNT(DISTINCT sale_id) FROM sales_zm WHERE customer_id = 50; COUNT(DISTINCTSALE_ID) ---------------------- 100 Statistics ---------------------------------------------------------- 44 recursive calls 12 db block gets 15248 consistent gets 4 physical reads 2084 redo size 582 bytes sent via SQL*Net to client 432 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 2 sorts (memory) 0 sorts (disk) 1 rows processed SQL>
- ゾーン・マップを作成します。属性クラスタリングは表のプロパティであるため、既存の行は並べ替えられません。したがって、表を移動して行をまとめてクラスタ化します。
SQL> ALTER TABLE sales_zm ADD CLUSTERING BY LINEAR ORDER (customer_id) WITH MATERIALIZED ZONEMAP; Table altered. SQL> ALTER TABLE sales_zm MOVE; Table altered. SQL>
- 問合せを再実行して、"consistent gets"値を確認します。
SQL> SELECT COUNT(DISTINCT sale_id) FROM sales_zm WHERE customer_id = 50; COUNT(DISTINCTSALE_ID) ---------------------- 100 Statistics ---------------------------------------------------------- 67 recursive calls 8 db block gets 900 consistent gets 0 physical reads 1464 redo size 582 bytes sent via SQL*Net to client 432 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed SQL>
- この表に対して作成されたゾーン・マップのステータスを表示します。
SQL> SET AUTOTRACE OFF SQL> COL zonemap_name FORMAT A20 SQL> SELECT zonemap_name,automatic,partly_stale, incomplete FROM dba_zonemaps; ZONEMAP_NAME AUTOMATIC PARTLY_STALE INCOMPLETE -------------------- --------- ------------ ------------ ZMAP$_SALES_ZM NO NO NO SQL>
既存のビュー
DBA_ZONEMAPS
に追加された新しい列AUTOMATIC
は、ゾーン・マップが自動的に作成されないことを示しています。
- 演習の第2部では、自動ゾーン・マップを有効にしてから、ゾーン・マップが自動的に作成されていることを確認する方法と、自動ゾーン・マップ・アクティビティ(作成およびメンテナンス)を表示する方法を示します。
- 表を削除します。
SQL> DROP TABLE sales_zm PURGE; Table dropped. SQL> SELECT zonemap_name, automatic, partly_stale, incomplete FROM dba_zonemaps; no rows selected SQL>
- ゾーン・マップの自動作成を有効にします。
SQL> EXEC DBMS_AUTO_ZONEMAP.CONFIGURE('AUTO_ZONEMAP_MODE','ON') PL/SQL procedure successfully completed. SQL>
- 表を再作成し、ダイレクト・ロードを使用して行を挿入し、表統計を収集します。
SQL> CREATE TABLE sales_zm (sale_id NUMBER(10), customer_id NUMBER(10)); Table created. SQL> DECLARE i NUMBER(10); BEGIN FOR i IN 1..80 LOOP INSERT /*+ APPEND */ INTO sales_zm SELECT ROWNUM, MOD(ROWNUM,1000) FROM dual CONNECT BY LEVEL <= 100000; COMMIT; END LOOP; END; / 2 3 4 5 6 7 8 9 10 11 12 13 PL/SQL procedure successfully completed. SQL> EXEC dbms_stats.gather_table_stats(ownname=>NULL, tabname=>'SALES_ZM') PL/SQL procedure successfully completed. SQL>
SALES_ZM
表を20回以上問い合せて、"consistent gets"値を確認します。SQL> SET AUTOTRACE ON STATISTIC SQL> SELECT COUNT(DISTINCT sale_id) FROM sales_zm WHERE customer_id = 50; COUNT(DISTINCTSALE_ID) ---------------------- 100 Statistics ---------------------------------------------------------- 44 recursive calls 12 db block gets 15248 consistent gets 4 physical reads 2084 redo size 582 bytes sent via SQL*Net to client 432 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 2 sorts (memory) 0 sorts (disk) 1 rows processed SQL> / COUNT(DISTINCTSALE_ID) ---------------------- 100 Statistics ---------------------------------------------------------- 44 recursive calls 12 db block gets 15248 consistent gets 4 physical reads 2084 redo size 582 bytes sent via SQL*Net to client 432 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 2 sorts (memory) 0 sorts (disk) 1 rows processed SQL> / COUNT(DISTINCTSALE_ID) ---------------------- 100 Statistics ---------------------------------------------------------- 44 recursive calls 12 db block gets 15248 consistent gets 4 physical reads 2084 redo size 582 bytes sent via SQL*Net to client 432 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 2 sorts (memory) 0 sorts (disk) 1 rows processed SQL>
- ゾーン・マップの作成を担当するバックグラウンド・プロセスのウェイクアップが遅いため、
/home/oracle/labs/M104784GC10/zonemap_exec.sql
SQLスクリプトを使用してウェイクアップを早めます。SQL> @/home/oracle/labs/M104784GC10/zonemap_exec.sql Connected. PL/SQL procedure successfully completed. Connected. SQL>
- 作成されたゾーン・マップのステータスを表示します。
SQL> SELECT zonemap_name, automatic, partly_stale, incomplete FROM dba_zonemaps; ZONEMAP_NAME AUTOMATIC PARTLY_STALE INCOMPLETE -------------------- --------- ------------ ------------ ZMAP$_SALES_ZM YES NO NO SQL>
- 自動ゾーン・マップのタスク・アクションを表示します。自動ゾーン・マップの作成が確認されるまで、
DBA_ZONEMAP_AUTO_ACTIONS
ビューを複数回問い合せます。SQL> SELECT task_id, msg_id, action_msg FROM dba_zonemap_auto_actions; TASK_ID MSG_ID ---------- ---------- ACTION_MSG -------------------------------------------------------------------------------- 6 35 BS:Current execution task id: 6 Execution name: SYS_ZMAP_2020-04-06/07:56:54 Tas k Name: ZMAP_TASK1 6 36 BS:******** Zonemap Background Action Report for Task ID: 6 **************** 6 37 BS:****** End of Zonemap Background Action Report for Task ID: 6 ********** 6 21 BS:Current execution task id: 6 Execution name: SYS_ZMAP_2020-04-06/07:34:36 Tas k Name: ZMAP_TASK1 6 22 BS:******** Zonemap Background Action Report for Task ID: 6 **************** 6 23 TP:Trying to create zonemap on table: SALES_ZM owner:SALES 6 24 AL:Block count : 15447, sample percent is : 3.236874 6 25 TP:col name:CUSTOMER_ID: clustering ratio: .98 6 26 TP:col name:SALE_ID: clustering ratio: .09 6 27 TP:Candidate column list:SALE_ID 6 28 TP:New zonemap name: ZMAP$_SALES_ZM 6 29 TP:Creating new zonemap ZMAP$_SALES_ZM on table SALES_ZM owner SALEStable space USERS 6 30 BS:succesfully created zonemap: ZN:ZMAP$_SALES_ZM BT:SALES_ZM SN:SALES CL:SALE_I D CT:+00 00:00:01.605120 TS:2020-04-06/07:34:39 DP:4 6 31 BS:****** End of Zonemap Background Action Report for Task ID: 6 ********** 6 32 BS:Current execution task id: 6 Execution name: SYS_ZMAP_2020-04-06/07:43:46 Tas k Name: ZMAP_TASK1 6 33 BS:******** Zonemap Background Action Report for Task ID: 6 **************** 6 34 BS:****** End of Zonemap Background Action Report for Task ID: 6 ********** 17 rows selected. SQL>
自動タスク実行のアクティビティ・レポートを表示する別の方法として、
DBMS_AUTO_ZONEMAP.ACTIVITY_REPORT
関数を使用します。SQL> SELECT dbms_auto_zonemap.activity_report(systimestamp-2, systimestamp, 'TEXT') FROM dual; DBMS_AUTO_ZONEMAP.ACTIVITY_REPORT(SYSTIMESTAMP-2,SYSTIMESTAMP,'TEXT') -------------------------------------------------------------------------------- /orarep/autozonemap/main%3flevel%3d GENERAL SUMMARY ------------------------------------------------------------------------------- Activity Start 04-APR-2020 16:45:33.000000000 +00:00 Activity End 06-APR-2020 16:45:33.656170000 +00:00 Total Executions 1 ------------------------------------------------------------------------------- EXECUTION SUMMARY ------------------------------------------------------------------------------- zonemaps created 1 zonemaps compiled 0 zonemaps dropped 0 Stale zonemaps complete refreshed 0 Partly stale zonemaps fast refreshed 0 Incomplete zonemaps fast refreshed 0 ------------------------------------------------------------------------------- NEW ZONEMAPS DETAILS ------------------------------------------------------------------------------- Zonemap Base Table Schema Operation time Date created DOP C olumn list ZMAP$_SALES_ZM SALES_ZM SALES 00:00:01.68 2020-04-06/16:45:04 2 S ALE_ID ------------------------------------------------------------------------------- ZONEMAPS MAINTENANCE DETAILS ------------------------------------------------------------------------------- Zonemap Previous State Current State Refresh Type Operation Time Dop Date Maintained ------------------------------------------------------------------------------- FINDINGS ------------------------------------------------------------------------------- Execution Name Finding Name Finding Reason Finding Type Message SQL>
すべての実行で作成されたゾーン・マップの数を確認する場合は、次の問合せを実行します。
SQL> SELECT * FROM dba_zonemap_auto_actions WHERE action_msg LIKE '%succesfully created zonemap:%' ORDER BY TIME_STAMP; TASK_ID MSG_ID ---------- ---------- EXEC_NAME -------------------------------------------------------------------------------- ACTION_MSG -------------------------------------------------------------------------------- TIME_STAMP --------------------------------------------------------------------------- 6 49 SYS_ZMAP_2020-04-06/16:45:01 BS:succesfully created zonemap: ZN:ZMAP$_SALES_ZM BT:SALES_ZM SN:SALES CL:SALE_I D CT:+00 00:00:01.681134 TS:2020-04-06/16:45:04 DP:2 06-APR-20 04.45.04.000000000 PM SQL>
SALES_ZM
表のSALE_ID
列の値を更新します。/home/oracle/labs/M104784GC10/zonemap_update.sql
SQLスクリプトを実行します。SQL> @/home/oracle/labs/M104784GC10/zonemap_update.sql 8000 rows updated. 8000 rows updated. 8000 rows updated. 8000 rows updated. Commit complete. SQL>
- ゾーン・マップ・メンテナンスのステータスを表示します。
SQL> SELECT zonemap_name, automatic, partly_stale, incomplete FROM dba_zonemaps; ZONEMAP_NAME AUTOMATIC PARTLY_STALE INCOMPLETE -------------------- --------- ------------ ------------ ZMAP$_SALES_ZM YES YES NO SQL>
- 自動ゾーン・マップ・メンテナンスに対するアクションが表示されるまで、アクティビティ・レポートを表示します。
SQL> SELECT dbms_auto_zonemap.activity_report(systimestamp-2, systimestamp, 'TEXT') FROM dual; DBMS_AUTO_ZONEMAP.ACTIVITY_REPORT(SYSTIMESTAMP-2,SYSTIMESTAMP,'TEXT') -------------------------------------------------------------------------------- /orarep/autozonemap/main%3flevel%3d GENERAL SUMMARY ------------------------------------------------------------------------------- Activity Start 04-APR-2020 16:47:10.000000000 +00:00 Activity End 06-APR-2020 16:47:10.417146000 +00:00 Total Executions 1 ------------------------------------------------------------------------------- EXECUTION SUMMARY ------------------------------------------------------------------------------- zonemaps created 1 zonemaps compiled 0 zonemaps dropped 0 Stale zonemaps complete refreshed 0 Partly stale zonemaps fast refreshed 1 Incomplete zonemaps fast refreshed 0 ------------------------------------------------------------------------------- NEW ZONEMAPS DETAILS ------------------------------------------------------------------------------- Zonemap Base Table Schema Operation time Date created DOP C olumn list ZMAP$_SALES_ZM SALES_ZM SALES 00:00:01.60 2020-04-06/07:34:39 4 S ALE_ID ------------------------------------------------------------------------------- ZONEMAPS MAINTENANCE DETAILS ------------------------------------------------------------------------------- Zonemap Previous State Current State Refresh Type Operation Time Do p Date Maintained ZMAP$_SALES_ZM PARTLY_STALE VALID REBUILD 00:00:01.77 0 2020-04-06/08:41:24 ------------------------------------------------------------------------------- FINDINGS ------------------------------------------------------------------------------- Execution Name Finding Name Finding Reason Finding Type Message SQL>
ゾーン・マップのメンテナンスを担当するバックグラウンド・プロセスが非常に迅速にウェイクアップし、ゾーンマップがすでに再構築されている可能性があります。その場合、"
ZONEMAPS MAINTENANCE DETAILS
"に情報が表示されません。 - ゾーン・マップのメンテナンスを担当するバックグラウンド・プロセスのウェイクアップが遅い可能性があります。
/home/oracle/labs/M104784GC10/zonemap_exec.sql
SQLスクリプトを使用して、ウェイクアップを早めます。SQL> @/home/oracle/labs/M104784GC10/zonemap_exec.sql Connected. PL/SQL procedure successfully completed. Connected. SQL>
- アクティビティ・レポートを表示します。
SQL> SELECT zonemap_name, automatic, partly_stale, incomplete FROM dba_zonemaps; ZONEMAP_NAME AUTOMATIC PARTLY_STALE INCOMPLETE -------------------- --------- ------------ ------------ ZMAP$_SALES_ZM YES NO NO SQL> SELECT dbms_auto_zonemap.activity_report(systimestamp-2, systimestamp, 'TEXT') FROM dual; DBMS_AUTO_ZONEMAP.ACTIVITY_REPORT(SYSTIMESTAMP-2,SYSTIMESTAMP,'TEXT') -------------------------------------------------------------------------------- /orarep/autozonemap/main%3flevel%3d GENERAL SUMMARY ------------------------------------------------------------------------------- Activity Start 04-APR-2020 16:51:21.000000000 +00:00 Activity End 06-APR-2020 16:51:21.228968000 +00:00 Total Executions 2 ------------------------------------------------------------------------------- EXECUTION SUMMARY ------------------------------------------------------------------------------- zonemaps created 1 zonemaps compiled 0 zonemaps dropped 0 Stale zonemaps complete refreshed 0 Partly stale zonemaps fast refreshed 1 Incomplete zonemaps fast refreshed 0 ------------------------------------------------------------------------------- NEW ZONEMAPS DETAILS ------------------------------------------------------------------------------- Zonemap Base Table Schema Operation time Date created DOP C olumn list ZMAP$_SALES_ZM SALES_ZM SALES 00:00:01.68 2020-04-06/16:45:04 2 S ALE_ID ------------------------------------------------------------------------------- ZONEMAPS MAINTENANCE DETAILS ------------------------------------------------------------------------------- Zonemap Previous State Current State Refresh Type Operation Time Do p Date Maintained ZMAP$_SALES_ZM PARTLY_STALE VALID REBUILD 00:00:05.25 0 2020-04-06/16:48:30 ------------------------------------------------------------------------------- FINDINGS ------------------------------------------------------------------------------- Execution Name Finding Name Finding Reason Finding Type Message SQL>
- 表を削除します。
SQL> DROP TABLE sales_zm PURGE; Table dropped. SQL> SELECT zonemap_name, automatic, partly_stale, incomplete FROM dba_zonemaps; no rows selected SQL> EXIT $
- 表を削除します。
親トピック: 自動ゾーン・マップ