Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Automatic Data Optimization with Oracle Database 12c
As of automatic-data-optimization 12c in relate to Information Lifecy...
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...
10 a.NBLK_ADVANCED,
11 a.NBLK_EHCC,
12 a.NROWS_NC,
13 a.NROWS_ADVANCED,
14 a.NROWS_EHCC
15 from sys.compression_stat$ a,
1...
commit;
end loop;
end;
/
PL/SQL procedure successfully completed.
SQL> select count (*) from sh.sales_ado;
COUNT(*)
------...
OBJECT_NAME Tracking Time Segment write Full Scan Lookup Scan
------------------ -------------- ------------ ------------
...
SQL> select policy_name, object_name, inherited_from, enabled
from user_ilmobjects;
POLICY_NAME OBJECT_NAME INHERITED_FROM...
select object_name, segment_write_time
from dba_heat_map_segment
where object_name='SALES_ADO';
OBJECT_NAME SEGMENT_WRITE_...
SQL> SQL> select task_id, job_name, job_state, completion_time completion
from user_ilmresults;
TASK_ID JOB_NAME JOB_STATE...
+++++++++++++++++++++++++
TESTING: TIER POLICY
+++++++++++++++++++++++++
CLEANUP Existing Policy
Check Current ILM policie...
8 ROUND ((a.bytes_alloc - NVL (b.bytes_free, 0)) / maxbytes * 100, 2)
MAX_PCT_USED
9 FROM (SELECT f.tablespace_name, SUM (...
For testing: Now set the threshold value for TBS_PERCENT_FREE to (97%) and
TBS_PERCENT_USED to 3%
SQL> conn sys/*** as sys...
USERS 40 38 2 95.78 4.22 32767.98 99.99 .01
MGMT_ECM_DEPOT_TS 40 20 20 49.38 50.62 32767.98 99.94 .06
MGMT_TABLESPACE 500 ...
Clean up Heat Map Statistics
-----------------------------------
SQL> exec dbms_ilm_admin.clear_heat_map_all;
PL/SQL proce...
Upcoming SlideShare
Loading in …5
×

Oracle 12c Automatic Data Optimization (ADO) - ILM

1,256 views

Published on

Automatic data optimization with oracle database 12c

Published in: Education, Technology
  • Be the first to comment

Oracle 12c Automatic Data Optimization (ADO) - ILM

  1. 1. Automatic Data Optimization with Oracle Database 12c As of automatic-data-optimization 12c in relate to Information Lifecycle Management (ILM) : In Oracle Database 12c ILM related features Advanced Compression Option. Heat Map automatically tracks modification and query timestamps at the row and segment levels, providing detailed insights into how data is being accessed. Automatic Data Optimization (ADO)automatically moves and compresses data according to user defined policies based on the information collected by Heat Map Heat Map and ADO make it easy to use existing innovations in Oracle Database Compression and Partitioning technologies, which help reduce the cost of managing large amounts of data, while also improving application and database performance. Together these capabilities help to implement first ++++++++++++++++++++++++++++ TESTING: compression policy ++++++++++++++++++++++++++++ Step1: First create tablespace to store SH.SALES data and insert rows: SQL> create tablespace tstado datafile '/BPELAIT2/MONDB01/MONDB01/tstado1.dbf' size 400M reuse autoextend off extent management loc al; Tablespace created. Step2: Then creating another tablespace, space_press where SH.SALES table data may be moved for space pressure SQL> create tablespace space_press datafile '/BPELAIT2/MONDB01/MONDB01/sp1.dbf' size 150M; Tablespace created. SQL> grant dba to sh; Grant succeeded. Step 3: create a procedure which simulates the passage of time in this example so that the table qualifies for ADO action (compression) even though actually 20 days have not elapsed.
  2. 2. 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> grant execute on set_stat to public; Grant succeeded. SQL> grant select any dictionary to SH; Grant succeeded. Step 4: Create a view used based on COMPRESSION_STAT$ table to retrieve segment compression results after ADO action. Grant select on the view to public and create a public synonym for the view. SQL> CREATE OR REPLACE VIEW user_compression_stats 2 (object_name , subobject_name, avgsize_uncomp, avgsize_disk, 3 nblocks_uncmp, nblocks_oltp, nblocks_ehcc, nrows_uncmp, 4 nrows_oltp, nrows_ehcc) 5 as select b.name, 6 b.subname, 7 a.AVGROWSIZE_NC, 8 a.AVGROWSIZE_C, 9 a.NBLK_NC,
  3. 3. 10 a.NBLK_ADVANCED, 11 a.NBLK_EHCC, 12 a.NROWS_NC, 13 a.NROWS_ADVANCED, 14 a.NROWS_EHCC 15 from sys.compression_stat$ a, 16 sys.obj$ b 17 where a.obj# = b.obj# and 18 b.owner# = userenv('SCHEMAID'); View created. SQL> GRANT select ON user_compression_stats TO PUBLIC; Grant succeeded. SQL> CREATE OR REPLACE PUBLIC SYNONYM user_compression_stats FOR sys.user_compression_stats; Synonym created. Step 6: Enable heat map tracking, and set the heat map tracking start time back 25 days to ensure statistics logged after this time are valid and considered by Automatic Data Optimization (ADO). SQL> alter system set heat_map=on scope=both; exec dbms_ilm_admin.set_heat_map_start(start_date => sysdate - 20); SQL> create table sales_ado as select * from sales; Table created. SQL> alter table sales_ado move tablespace tstado; Table altered. Populte the table with some more data : SQL> declare sql_test clob; begin for i in 1..7 loop sql_test := 'insert /*+ append */ into sh.sales_ado select * from sh.sales where CUST_ID=3548'; execute immediate sql_test;
  4. 4. commit; end loop; end; / PL/SQL procedure successfully completed. SQL> select count (*) from sh.sales_ado; COUNT(*) ---------- 920376 Step 7: Verify that heat map tracking collected statistics for the sh.sales_ado table. SQL> select OBJECT_NAME,SEGMENT_WRITE_TIME , SEGMENT_READ_TIME, FULL_SCAN FROM dba_heat_map_segment WHERE OBJECT_NAME='SALES_ADO' AND OWNER = 'SH';SQL> 2 3 4 OBJECT_NAME -------------------------------------------------------------------------------- SEGMENT_WRITE_TIME SEGMENT_READ_TIME FULL_SCAN ------------------ ------------------ ------------------ SALES_ADO 10-oct-13 10:36:25 Check Segment level ----------------------------- col "Segment write" format A14 col "Full Scan" format A12 col "Lookup Scan" format a12 select object_name, track_time "Tracking Time", segment_write "Segment write", full_scan "Full Scan", lookup_scan "Lookup Scan" from DBA_HEAT_MAP_SEG_HISTOGRAM WHERE OBJECT_NAME='SALES_ADO' AND OWNER = 'SH';
  5. 5. OBJECT_NAME Tracking Time Segment write Full Scan Lookup Scan ------------------ -------------- ------------ ------------ SALES_ADO 10-oct-13 10:37:49 NO YES NO CHECK THE COMPRESSION attribute ------------------------------------------------- SQL> select compression, compress_for from dba_tables where table_name ='SALES_ADO'AND OWNER = 'SH'; COMPRESS COMPRESS_FOR -------- ------------------------------ DISABLED Step 8: SQL> analyze table SH.SALES_ADO compute statistics; Table analyzed. SQL> select object_name, nrows_uncmp, nrows_oltp, nrows_ehcc from sys.user_compression_stats;SQL> no rows selected CREATE COMPRESSION POLICY on table SH.SALES_ADO --------------------------------------------------- SQL> alter table SH.SALES_ADO ILM ADD POLICY ROW STORE COMPRESS ADVANCED SEGMENT AFTER 20 DAYS OF NO MODIFICATION; Table altered. SQL> show user USER is "SH" SQL> select policy_name, action_type, scope, compression_level, condition_type, condition_days from user_ilmdatamovementpolicies order by policy_name; POLICY_NAME ACTION_TYPE SCOPE COMPRESSION_LEVEL CONDITION_TYPE CONDITION_DAYS -------------------------------------------------------------------------------------------------------------------------------------------------- P1 COMPRESSION SEGMENT ADVANCED LAST MODIFICATION TIME 20
  6. 6. SQL> select policy_name, object_name, inherited_from, enabled from user_ilmobjects; POLICY_NAME OBJECT_NAME INHERITED_FROM ENA -------------------- ------------------------------------------------ P1 SALES_ADO POLICY NOT INHERITED YES Step 9: We are simulating a situation where no modification has been done on SH.SALES_ADO table for the last 20 days. Use the procedure sys.set_stat to fake the passage of time so that compression policy qualifies for ILM action. We are setting heat map statistics clock back by 20 days. As SYS: SQL> conn sys/*** as sysdba Connected. SQL> alter session set nls_date_format='dd-mon-yy hh:mi:ss'; Session altered. 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 all_objects 8 where object_name = 'SALES_ADO' 9 and owner = 'SH'; 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 = 'SALES_ADO'; 15 commit; 16 sys.set_stat 17 (object_id => v_obj#, 18 data_object_id => v_dataobj#, 19 n_days => 20, 20 p_ts# => v_ts#, 21 p_segment_access => 1); 22 end; 23 / PL/SQL procedure successfully completed.
  7. 7. select object_name, segment_write_time from dba_heat_map_segment where object_name='SALES_ADO'; OBJECT_NAME SEGMENT_WRITE_TIME ------------------------------------------------------------ SALES_ADO 20-sep-13 11:03:46 16 rows selected. SQL> !date Thursday, 10 October 2013 11:05:30 AM EST statistics are showing that the table was last accessed more 20 days back. Step 10: To open and trigger the ADO policies jobs [Note: Not waiting for the maintenance window for testing] ================================================================ SQL> conn sh/sh Connected. SQL> declare v_executionid number; begin dbms_ilm.execute_ILM (ILM_SCOPE => dbms_ilm.SCOPE_SCHEMA, execution_mode => dbms_ilm.ilm_execution_offline, task_id => v_executionid); end; / PL/SQL procedure successfully completed. Step 11: View the results of the job that completed the compression operation. ================================================================ SQL> select task_id, start_time as start_time from user_ilmtasks; TASK_ID ---------- START_TIME --------------------------------------------------------------------------- 2 10-OCT-13 11.09.07.952584 AM
  8. 8. SQL> SQL> select task_id, job_name, job_state, completion_time completion from user_ilmresults; TASK_ID JOB_NAME JOB_STATE COMPLETION --------------------------------------------------------------------------- 2 ILMJOB2 COMPLETED SUCCESSFULLY 10-OCT-13 11.09.14.826402 AM 1 select task_id, policy_name, object_name, 2 selected_for_execution, job_name 3* from user_ilmevaluationdetails SQL> / TASK_ID POLICY_NAME OBJECT_NAME SELECTED_FOR_EXECUTION ------------------------------------------ JOB_NAME ------------------------------------------------------------------------------------------------- 2 P1 SALES_ADO ILMJOB2 Step 12: Check if ADO triggered compression on SH.SALES_ADO segment. SQL> show user USER is "SH" SQL> analyze table SH.SALES_ADO compute statistics; Table analyzed. SQL> select compression, compress_for FROM user_tables where table_name = 'SALES_ADO'; COMPRESS COMPRESS_FOR -------- ------------------------------ ENABLED ADVANCED SQL> select object_name, nrows_uncmp, nrows_oltp, nrows_ehcc from user_compression_stats; OBJECT_NAME NROWS_UNCMP NROWS_OLTP NROWS_EHCC ----------- ---------- ---------- SALES_ADO 0 918843 0 So finish testing compression policy.
  9. 9. +++++++++++++++++++++++++ TESTING: TIER POLICY +++++++++++++++++++++++++ CLEANUP Existing Policy Check Current ILM policies on the SH.SALES_ADO table. SQL> select * from user_ilmpolicies; SQL> select * from user_ilmdatamovementpolicies; Delete all ILM Policies on the SH.SALES_ADO table. SQL> alter table SH.SALES_ADO ilm delete_all; NOW CHECK the threshold value ------------------------------------------- SQL> col name format A21 SQL> col value format 9999 SQL> select * from dba_ilmparameters; NAME VALUE --------------------- ----- ENABLED 1 JOB LIMIT 10 EXECUTION MODE 3 EXECUTION INTERVAL 15 TBS PERCENT USED 15 TBS PERCENT FREE 85 6 rows selected. Tablespace Usage Check ---------------------------------- SQL> set linesize 300; SQL> SELECT a.tablespace_name TBS_NAME, ROUND (a.bytes_alloc / 1024 / 1024, 0) MEGS_ALLOC, 2 ROUND (NVL (b.bytes_free, 0) / 1024 / 1024, 0) MEGS_FREE, 3 ROUND ((a.bytes_alloc - NVL (b.bytes_free, 0)) / 1024 / 1024,0) MEGS_USED, 4 ROUND ((NVL (b.bytes_free, 0) / a.bytes_alloc) * 100, 2) PCT_FREE, 5 100 - ROUND ((NVL (b.bytes_free, 0) / a.bytes_alloc) * 100, 2) PCT_USED, 6 ROUND (maxbytes / 1048576, 2) MAX_MEGS_ALLOC, 7 100 - ROUND ((a.bytes_alloc - NVL (b.bytes_free, 0)) / maxbytes * 100, 2) MAX_PCT_FREE,
  10. 10. 8 ROUND ((a.bytes_alloc - NVL (b.bytes_free, 0)) / maxbytes * 100, 2) MAX_PCT_USED 9 FROM (SELECT f.tablespace_name, SUM (f.BYTES) bytes_alloc, 10 SUM (DECODE (f.autoextensible,'YES',f.maxbytes,'NO', f.BYTES)) maxbytes 11 FROM dba_data_files f 12 GROUP BY tablespace_name) a, 13 (SELECT f.tablespace_name, SUM (f.BYTES) bytes_free 14 FROM dba_free_space f 15 GROUP BY tablespace_name) b 16 WHERE a.tablespace_name = b.tablespace_name(+) 17 ; TBS_NAME MEGS_ALLOC MEGS_FREE MEGS_USED PCT_FREE PCT_USED MAX_MEGS_ALLOC MAX_PCT_FREE MAX_PCT_USED ------------------------------ ---------- ---------- ---------- ---------- ---------- -------------- ------------ ------------ SYSTEM 970 4 966 .37 99.63 32767.98 97.05 2.95 MGMT_AD4J_TS 200 199 1 99.5 .5 32767.98 100 0 TSTADO 400 385 15 96.25 3.75 400 96.25 3.75 SPACE_PRESS 150 149 1 99.33 .67 150 99.33 .67 USERS 40 38 2 95.78 4.22 32767.98 99.99 .01 MGMT_ECM_DEPOT_TS 40 20 20 49.38 50.62 32767.98 99.94 .06 MGMT_TABLESPACE 500 43 457 8.51 91.49 32767.98 98.6 1.4 SYSAUX 830 46 784 5.59 94.41 32767.98 97.61 2.39 EXAMPLE 323 0 323 .02 99.98 32767.98 99.01 .99 UNDOTBS1 330 72 258 21.69 78.31 32767.98 99.21 .79 10 rows selected. Create Policy ----------------------- CREATE A STORAGE TIER POLICY ON TABLE SH.SALES_ADO SQL> ALTER TABLE SH.SALES_ADO ilm ADD POLICY TIER TO SPACE_PRESS; Table altered. SQL> col policy_name format a10 SQL> col tier_tbs format a20 SQL> select POLICY_NAME, ACTION_TYPE, SCOPE, TIER_TABLESPACE 2 from user_ilmdatamovementpolicies 3 order by policy_name; POLICY_NAME ACTION_TYPE SCOPE TIER_TABLESPACE --------------------------------------------------------------------------------- P21 STORAGE SEGMENT SPACE_PRESS
  11. 11. For testing: Now set the threshold value for TBS_PERCENT_FREE to (97%) and TBS_PERCENT_USED to 3% SQL> conn sys/*** as sysdba Connected. SQL> exec dbms_ilm_admin.customize_ilm(dbms_ilm_admin.tbs_percent_free,97) PL/SQL procedure successfully completed. SQL> exec dbms_ilm_admin.customize_ilm(dbms_ilm_admin.tbs_percent_used,3) PL/SQL procedure successfully completed. SQL> col name format A21 SQL> col value format 9999 SQL> select * from dba_ilmparameters; NAME VALUE --------------------- ----- ENABLED 1 JOB LIMIT 10 EXECUTION MODE 3 EXECUTION INTERVAL 15 TBS PERCENT USED 3 TBS PERCENT FREE 97 6 rows selected. maintenance window to open and trigger the ADO policies jobs [Note: Not waiting for the maintenance window for testing] ================================================================ SQL> conn sh/sh Connected. SQL> declare v_executionid number; begin dbms_ilm.execute_ILM (ILM_SCOPE => dbms_ilm.SCOPE_SCHEMA, execution_mode => dbms_ilm.ilm_execution_offline, task_id => v_executionid); end; / Recheck Tablespace Status ------------------------------------ SYSTEM 970 4 966 .37 99.63 32767.98 97.05 2.95 MGMT_AD4J_TS 200 199 1 99.5 .5 32767.98 100 0 TSTADO 400 399 1 99.75 .25 400 99.75 .25 SPACE_PRESS 150 135 15 90 10 150 90 10
  12. 12. USERS 40 38 2 95.78 4.22 32767.98 99.99 .01 MGMT_ECM_DEPOT_TS 40 20 20 49.38 50.62 32767.98 99.94 .06 MGMT_TABLESPACE 500 43 457 8.51 91.49 32767.98 98.6 1.4 SYSAUX 830 36 794 4.34 95.66 32767.98 97.58 2.42 EXAMPLE 323 0 323 .02 99.98 32767.98 99.01 .99 UNDOTBS1 330 85 245 25.83 74.17 32767.98 99.25 .75 10 rows selected. So free space is more on TSTADO tablespace and SPACE_PRESS is showing value for column %used. Check the ADO task Status -------------------------------------- SQL> select task_id, state , COMPLETION_TIME from user_ilmtasks; 2 COMPLETED 10-OCT-13 11.09.14.826402 AM 14 COMPLETED 10-OCT-13 01.53.09.689013 PM 17 COMPLETED 10-OCT-13 02.23.14.231013 PM SQL> select table_name, tablespace_name from user_tables 2 where table_name='SALES_ADO'; TABLE_NAME TABLESPACE_NAME ------------------------------------------- SALES_ADO SPACE_PRESS CleanUP ---------------- Delete all ILM Policies on the SH.SALES_ADO table. SQL> alter table SH.SALES_ADO ilm delete_all; Table altered. Verify that there are no ILM policies on the SH.SALES_ADO table. SQL> select * from user_ilmdatamovementpolicies; no rows selected SQL> select * from user_ilmpolicies; no rows selected SQL> alter system set heat_map=off scope=both; System altered.
  13. 13. Clean up Heat Map Statistics ----------------------------------- SQL> exec dbms_ilm_admin.clear_heat_map_all; PL/SQL procedure successfully completed. SQL> select obj#, ts#, track_time from sys.heat_map_stat$; OBJ# TS# TRACK_TIM ---------- ---------- --------- -1 -1 10-OCT-13 Note: The above value is for the dummy stat. So TIER Policy test has been completed for ADO.

×