视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
HeatMapandAutomaticDataOptimization:part-1
2020-11-09 13:08:29 责编:小采
文档


oracle 12c 提供了一个新特性叫 Heat Map,它跟踪和标记数据可以达到row和block level,此特性可以在system和session级别启用。如果要使用ADO(Automatic Data Optimization)必须要在system级别启用。但是此特性 only works in a non-CDB environment,not supp

oracle 12c 提供了一个新特性叫 Heat Map,它跟踪和标记数据可以达到row和block level,此特性可以在system和session级别启用。如果要使用ADO(Automatic Data Optimization)必须要在system级别启用。但是此特性only works in a non-CDB environment,not supported with a multitenant container database (CDB),并且提供了以下视图查看

  • V$HEAT_MAP_SEGMENT:显示实时访问信息,包好object_name,object_number及容器ID
  • DBA_HEAT_MAP_SEGMENT:Displays the latest segment access time for all segments visible to the specified user
  • DBA_HEAT_MAP_SEG_HISTOGRAM:Displays access information for all segments visible to the specific user.
  • DBA_HEATMAP_TOP_OBJECTS:Displays access information for the top 1,000 object
  • DBA_HEATMAP_TOP_TABLESPACES:Displays access information for the top 100 tablespaces
  • Heat_map和ADO 结合使用示意图

    CDB和non-CDB 测试

    non-CDB

    SQL> SELECT cdb FROM v$database ;
    ?
    CDB
    ------
    NO
    ?
    --数据库NON-CDB
    ?
    SQL> GRANT dba TO travel IDENTIFIED BY aa;
    ?
    GRANT succeeded.
    ?
    SQL> conn travel/aa
    Connected.
    ?
    USERNAME INST_NAME HOST_NAME SID SERIAL# VERSION STARTED SPID OPID CPID SADDR PADDR
    -------------------- ------------ ------------------------- ----- -------- ---------- -------- --------------- ----- --------------- ---------------- ----------------
    TRAVEL noncdb localhost.localdomain 33 11 12.1.0.1.0 20140525 4286 7 4259 000000009F68A408 000000009F9865B8
    ?
    ?
    SQL> ALTER system SET heat_map=ON;
    ?
    System altered.
    ?
    SQL> CREATE TABLE heat_test AS SELECT * FROM all_objects;
    ?
    TABLE created.
    ?
    SQL> INSERT /*+ append */ INTO heat_test SELECT * FROM heat_test;
    ?
    855 ROWS created.
    ?
    SQL> commit;
    ?
    Commit complete.
    ?
    SQL> INSERT /*+ append */ INTO heat_test SELECT * FROM heat_test;
    ?
    177910 ROWS created.
    ?
    SQL> commit;
    ?
    Commit complete.
    ?
    --创建一张测试表
    ?
    SQL> ALTER SESSION SET nls_date_format='yyyy-mm-dd hh:mi:ss';
    ?
    SESSION altered.
    ?
    SQL> col OBJECT_NAME FOR a15
    SQL> SELECT OBJECT_NAME,SEGMENT_WRITE_TIME , SEGMENT_READ_TIME, FULL_SCAN FROM dba_heat_map_segment WHERE owner='TRAVEL';
    ?
    OBJECT_NAME SEGMENT_WRITE_TIME SEGMENT_READ_TIME FULL_SCAN
    --------------- ------------------- ------------------- -------------------
    HEAT_TEST 2014-05-25 05:44:00
    ?
    SQL> col "Segment write" format A14
    SQL> col "Full Scan" format A12
    SQL> col "Lookup Scan" format a12
    SQL> SELECT object_name, track_time "Tracking Time",
     2 segment_write "Segment write",
     3 full_scan "Full Scan",
     4 lookup_scan "Lookup Scan"
     5 FROM DBA_HEAT_MAP_SEG_HISTOGRAM
     6 WHERE object_name='HEAT_TEST';
    ?
    OBJECT_NAME Tracking TIME Segment WRITE FULL Scan Lookup Scan
    --------------- ------------------- -------------- ------------ ------------
    HEAT_TEST 2014-05-25 05:45:03 NO YES NO
    ?
    SQL> SELECT compression, compress_for FROM dba_tables WHERE TABLE_NAME = 'HEAT_TEST';
    ?
    COMPRESSION COMPRESS_FOR
    ---------------- ------------------------------------------------------------
    DISABLED
    ?
    SQL> SELECT SUM(bytes)/1048576 FROM user_segments WHERE 
     2 segment_name='HEAT_TEST';
    ?
    SUM(BYTES)/1048576
    ------------------
    ?
    ?
    SQL> SELECT SUM(bytes)/1048576 FROM dba_segments WHERE segment_name='HEAT_TEST';
    ?
    SUM(BYTES)/1048576
    ------------------
     48
    ?
    --查看了数据的heat_map情况和大小
    ?
    添加ADO策略30天内没有修改进行压缩
    SQL> ALTER TABLE travel.HEAT_TEST ILM ADD POLICY ROW STORE 
     2 COMPRESS ADVANCED SEGMENT AFTER 30 DAYS OF NO MODIFICATION;
    ?
    TABLE altered.
    ?
    查看policy
    SQL> 
    SQL> SELECT policy_name, action_type, scope, compression_level,
     2 condition_type, condition_days
     3 FROM dba_ilmdatamovementpolicies
     4 ORDER BY policy_name;
    ?
    POLICY_NAME ACTION_TYPE SCOPE COMPRESSION_LEVEL CONDITION_TYPE CONDITION_DAYS
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------- -------------- ------------------------------------------------------------ -------------------------------------------- --------------
    P1 COMPRESSION SEGMENT ADVANCED LAST MODIFICATION TIME 30
    ?
    SQL> col policy_name FOR a10
    SQL> /
    ?
    POLICY_NAM ACTION_TYPE SCOPE COMPRESSION_LEVEL CONDITION_TYPE CONDITION_DAYS
    ---------- ---------------------- -------------- ------------------------------------------------------------ -------------------------------------------- --------------
    P1 COMPRESSION SEGMENT ADVANCED LAST MODIFICATION TIME 30
    ?
    SQL> col COMPRESSION_LEVEL FOR a20
    SQL> /
    ?
    POLICY_NAM ACTION_TYPE SCOPE COMPRESSION_LEVEL CONDITION_TYPE CONDITION_DAYS
    ---------- ---------------------- -------------- -------------------- -------------------------------------------- --------------
    P1 COMPRESSION SEGMENT ADVANCED LAST MODIFICATION TIME 30
    ?
    SQL> SELECT policy_name, object_name, inherited_from, enabled FROM dba_ilmobjects;
    ?
    POLICY_NAM OBJECT_NAME INHERITED_FROM ENABLED
    ---------- --------------- ---------------------------------------- --------------
    P1 HEAT_TEST POLICY NOT INHERITED YES
    ?
    ?
    ?
    这里由于需要30天,所以通过修改低成表数据实现30天
    ?
    SQL> CREATE OR REPLACE PROCEDURE set_stat (object_id NUMBER,
     2 data_object_id NUMBER,
     3 n_days NUMBER,
     4 p_ts# NUMBER,
     5 p_segment_access NUMBER)
     6 AS
     7 BEGIN
     8 INSERT INTO sys.heat_map_stat$
     9 (obj#,
     10 dataobj#,
     11 track_time,
     12 segment_access,
     13 ts#)
     14 VALUES
     15 (object_id,
     16 data_object_id,
     17 sysdate - n_days,
     18 p_segment_access,
     19 p_ts# );
     20 commit;
     21 END;
     22 /
    ?
    PROCEDURE created.
    ?
    SQL> DECLARE
     2 v_obj# NUMBER;
     3 v_dataobj# NUMBER;
     4 v_ts# NUMBER;
     5 BEGIN
     6 SELECT object_id, data_object_id INTO v_obj#, v_dataobj#
     7 FROM dba_objects
     8 WHERE object_name = 'HEAT_TEST'
     9 AND owner = 'TRAVEL';
     10 SELECT ts# INTO v_ts#
     11 FROM sys.ts$ a,
     12 dba_segments b
     13 WHERE a.name = b.tablespace_name
     14 AND b.segment_name = 'HEAT_TEST';
     15 commit;
     16 sys.set_stat
     17 (object_id => v_obj#,
     18 data_object_id => v_dataobj#,
     19 n_days => 30,
     20 p_ts# => v_ts#,
     21 p_segment_access => 1);
     22 END;
     23 /
    ?
    PL/SQL PROCEDURE successfully completed.
    ?
    SQL> conn travel/aa
    Connected.
    ?
    USERNAME INST_NAME HOST_NAME SID SERIAL# VERSION STARTED SPID OPID CPID SADDR PADDR
    -------------------- ------------ ------------------------- ----- -------- ---------- -------- --------------- ----- --------------- ---------------- ----------------
    TRAVEL noncdb localhost.localdomain 1 7 12.1.0.1.0 20140525 4916 20 4553 000000009F6CA108 000000009F994798
    ?
    ?
    SQL> 
    手工执行
    SQL> DECLARE
     2 v_executionid NUMBER;
     3 BEGIN
     4 dbms_ilm.execute_ILM (ILM_SCOPE => dbms_ilm.SCOPE_SCHEMA,
     5 execution_mode => dbms_ilm.ilm_execution_offline,
     6 task_id => v_executionid);
     7 END;
     8 /
    ?
    PL/SQL PROCEDURE successfully completed.
    ?
    ?
    查看任务执行
    SQL> SELECT task_id, start_time AS start_time FROM user_ilmtasks;
    ?
     TASK_ID START_TIME
    ---------- -----------------------------
     2 25-MAY-14 05.52.39.737942 PM
    ?
    ?
    查看任务详细洗洗
    SQL> SELECT task_id, policy_name, object_name, selected_for_execution, job_name
     2 FROM user_ilmevaluationdetails
     3 WHERE task_id=2;
    ?
     TASK_ID POLICY_NAM OBJECT_NAME SELECTED_FOR_EXECUTION JOB_NAME
    ---------- ---------- --------------- ------------------------ ---------------------------------
     2 P1 HEAT_TEST SELECTED FOR EXECUTION ILMJOB42
    查看结果
    ?
    SQL> SELECT task_id, job_name, job_state, completion_time completion FROM user_ilmresults;
    ?
     TASK_ID JOB_NAME JOB_STATE COMPLETION
    ---------- ----------------------- -------------------------- ---------------------------------------
     2 ILMJOB42 COMPLETED SUCCESSFULLY 25-MAY-14 05.52.43.834452 PM
    ?
    SQL> col JOB_NAME FOR a20
    SQL> SELECT task_id, job_name, job_state, completion_time completion FROM user_ilmresults;
    ?
     TASK_ID JOB_NAME JOB_STATE COMPLETION
    ---------- -------------------- ----------------------------- ---------------------------------------------------------------------------
     2 ILMJOB42 COMPLETED SUCCESSFULLY 25-MAY-14 05.52.43.834452 PM
    ?
    查看表大小
    SQL> SELECT SUM(bytes)/1048576 FROM user_segments WHERE segment_name='HEAT_TEST';
    ?
    SUM(BYTES)/1048576
    ------------------
     13
    数据压缩了35M

    测试下CDB情况下的使用

    SQL> SELECT cdb FROM v$database;
    ?
    CDB
    ---
    YES
    ?
    SQL> ALTER system SET heat_map=ON;
    ?
    System altered.
    ?
    SQL> conn c##travel/aa
    ERROR:
    ORA-28001: the password has expired
    ?
    ?
    Changing password FOR c##travel
    NEW password: 
    Retype NEW password: 
    Password changed
    Connected.
    ?
    USERNAME INST_NAME HOST_NAME SID SERIAL# VERSION STARTED SPID OPID CPID SADDR PADDR
    -------------------- ------------ ------------------------- ----- -------- ---------- -------- --------------- ----- --------------- ---------------- ----------------
    C##TRAVEL orcl localhost.localdomain 57 11 12.1.0.1.0 20140525 5370 7 5067 000000009F711DA8 000000009FA3EB88
    ?
    ?
    SQL> CREATE TABLE heat_test AS SELECT * FROM all_objects;
    ?
    TABLE created.
    ?
    SQL> INSERT /*+ append */ INTO heat_test SELECT * FROM heat_test;
    ?
    347 ROWS created.
    ?
    SQL> commit;
    ?
    Commit complete.
    ?
    SQL> ALTER TABLE HEAT_TEST ILM ADD POLICY ROW STORE 
     2 COMPRESS ADVANCED SEGMENT AFTER 30 DAYS OF NO MODIFICATION;
    ALTER TABLE HEAT_TEST ILM ADD POLICY ROW STORE
    *
    ERROR at line 1:
    ORA-38343: ADO online mode NOT supported WITH supplemental logging enabled
    ?
    ?
    SQL> !oerr ora 38343
    38343, 00000, "ADO online mode not supported with supplemental logging enabled"
    // *Cause: An attempt was made TO perform an automatic DATA optimization (ADO)
    // operation WITH supplemental logging enabled.
    // *Action: Disable supplemental logging OR switch TO ADO offline mode AND retry.
    ?
    SQL> conn / AS sysdba
    Connected.
    ?
    USERNAME INST_NAME HOST_NAME SID SERIAL# VERSION STARTED SPID OPID CPID SADDR PADDR
    -------------------- ------------ ------------------------- ----- -------- ---------- -------- --------------- ----- --------------- ---------------- ----------------
    SYS orcl localhost.localdomain 57 13 12.1.0.1.0 20140525 5455 7 5067 000000009F711DA8 000000009FA3EB88
    ?
    ?
    SQL> ALTER DATABASE DROP supplemental log ;
    ALTER DATABASE DROP supplemental log
     *
    ERROR at line 1:
    ORA-00905: missing keyword
    ?
    ?
    SQL> ALTER DATABASE DROP supplemental log DATA;
    ?
    DATABASE altered.
    ?
    SQL> conn c##travel/aa
    Connected.
    ?
    USERNAME INST_NAME HOST_NAME SID SERIAL# VERSION STARTED SPID OPID CPID SADDR PADDR
    -------------------- ------------ ------------------------- ----- -------- ---------- -------- --------------- ----- --------------- ---------------- ----------------
    C##TRAVEL orcl localhost.localdomain 57 15 12.1.0.1.0 20140525 5467 7 5067 000000009F711DA8 000000009FA3EB88
    ?
    ?
    SQL> ALTER TABLE HEAT_TEST ILM ADD POLICY ROW STORE 
     2 COMPRESS ADVANCED SEGMENT AFTER 30 DAYS OF NO MODIFICATION;
    ALTER TABLE HEAT_TEST ILM ADD POLICY ROW STORE
    *
    ERROR at line 1:
    ORA-38342: heat map NOT enabled
    ?
    ?
    SQL> SHOW parameter heat_map
    ?
    NAME TYPE VALUE
    ------------------------------------ ----------- ----------------------------------------------------------------------------------------------------
    heat_map string ON
    SQL>

    证明了only works in a non-CDB environment,not supported with a multitenant container database (CDB)

    下载本文
    显示全文
    专题