寫在前面sql
Oracle 12c 能夠經過熱圖和自動數據優化(ADO)實現信息生命週期的管理(ILM),上篇介紹了熱圖,本篇將對自動數據優化進行展開,經過熱圖和自動數據優化,最終實現信息生命週期管理。數據庫
使用自動數據優化,必須先在系統級別啓用熱圖,經過修改初始化參數heat_map便可,啓用熱圖後,數據庫會自動在段上進行熱圖統計信息的收集,可經過數據字典視圖查看熱圖相關的信息,具體可參考:Oracle 12c Heat Map 熱圖 。oracle
策略能夠在執行create table或alter table時在行、段、表空間級別進行建立,在知足指定的策略時能夠進行數據的自動壓縮和移動,從而完成數據的歸檔。app
經過下面的語法結構咱們能夠知道如下內容。測試
1)ADO主要在兩個層面實現數據的優化,分別爲優化
2)壓縮的類型lua
3)壓縮做用域spa
4)訪問模式.net
5)啓動時機code
ilm_clause::=
ilm_policy_clause::=
ilm_compression_policy::=
table_compression::=
ilm_tiering_policy::=
ilm_time_period::=
0)查看heat_map初始化參數配置
ALEN@PROD2> show parameter heat_map NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ heat_map string ON
1)建立測試表,能夠看出,數據行爲259418,表沒有被壓縮,表佔用空間爲11534336 BYTES
ALEN@PROD2> create table sales_ado as select * from sales; Table created. ALEN@PROD2> select count(1) from sales_ado; COUNT(1) ---------- 259418 ALEN@PROD2> select t.compression,t.compress_for from user_tables t where t.table_name='SALES_ADO'; COMPRESS COMPRESS_FOR -------- ------------------------------ DISABLED ALEN@PROD2> select t.bytes from user_segments t where t.segment_name='SALES_ADO'; BYTES ---------- 11534336
2)建立策略
ALEN@PROD2> alter table sales_ado ilm add policy row store compress advanced segment after 30 days of no modification; Table altered.
3)查看建立的策略
ALEN@PROD2> col policy_name for a10 ALEN@PROD2> col policy_type for a30 ALEN@PROD2> select policy_name,policy_type,enabled,deleted from user_ilmpolicies; POLICY_NAM POLICY_TYPE ENABLED DELETED ---------- ------------------------------ ------- ------- P102 DATA MOVEMENT YES NO
4)查看策略對象
ALEN@PROD2> col object_owner for a10 ALEN@PROD2> col object_name for a20 ALEN@PROD2> set linesize 200 ALEN@PROD2> select policy_name,object_owner,object_name,object_type,inherited_from,enabled,deleted from user_ilmobjects; POLICY_NAM OBJECT_OWN OBJECT_NAME OBJECT_TYPE INHERITED_FROM ENA DEL ---------- ---------- -------------------- ------------------ -------------------- --- --- P102 ALEN SALES_ADO TABLE POLICY NOT INHERITED YES NO
5)查看熱圖信息
ALEN@PROD2> select object_name,track_time,segment_write,full_scan,lookup_scan from user_heat_map_seg_histogram where object_name='SALES_ADO'; OBJECT_NAME TRACK_TIME SEG FUL LOO -------------------- ------------------- --- --- --- SALES_ADO 2020-05-26 18:59:53 NO YES NO ALEN@PROD2> select object_name,segment_write_time,segment_read_time,full_scan,lookup_scan from user_heat_map_segment where object_name='SALES_ADO'; OBJECT_NAME SEGMENT_WRITE_TIME SEGMENT_READ_TIME FULL_SCAN LOOKUP_SCAN -------------------- ------------------- ------------------- ------------------- ------------------- SALES_ADO 2020-05-26 19:01:14
6)由於策略是30天內沒有修改的話,就啓用高級壓縮,下面進行模擬,將時間向前推33天
SYS@PROD2> exec dbms_ilm_admin.set_heat_map_table('ALEN','SALES_ADO','',sysdate-33,2); PL/SQL procedure successfully completed.
7)再次查看熱圖信息,能夠看出 2020-04-23以後沒有對錶作修改
ALEN@PROD2> select object_name,track_time,segment_write,full_scan,lookup_scan from user_heat_map_seg_histogram where object_name='SALES_ADO'; OBJECT_NAME TRACK_TIME SEG FUL LOO -------------------- ------------------- --- --- --- SALES_ADO 2020-05-26 19:06:38 NO YES NO SALES_ADO 2020-04-23 19:06:03 NO NO NO ALEN@PROD2> select object_name,segment_write_time,segment_read_time,full_scan,lookup_scan from user_heat_map_segment where object_name='SALES_ADO'; OBJECT_NAME SEGMENT_WRITE_TIME SEGMENT_READ_TIME FULL_SCAN LOOKUP_SCAN -------------------- ------------------- ------------------- ------------------- ------------------- SALES_ADO 2020-04-23 19:06:03 2020-05-26 19:06:55
8)經過第7步可知,30天內對錶沒有進行修改操做,那麼按照策略,會啓用壓縮,但策略的執行,須要對應的窗口,或時間間隔,下面進行手工觸發策略
ALEN@PROD2> set serveroutput on ALEN@PROD2> declare v_taskid number; begin dbms_ilm.execute_ilm(v_taskid,dbms_ilm.scope_schema,dbms_ilm.ilm_execution_offline); dbms_output.put_line('Task ID is '||v_taskid); end; / Task ID is 63 PL/SQL procedure successfully completed.
9)查看任務的執行狀況,能夠看出任務執行完成
ALEN@PROD2> select task_id,state,creation_time +0 ct,start_time+0 st,completion_time+0 dt from user_ilmtasks where task_id=63; TASK_ID STATE CT ST DT ---------- --------- ------------------- ------------------- ------------------- 63 COMPLETED 2020-05-26 19:12:44 2020-05-26 19:12:44 2020-05-26 19:12:46 ALEN@PROD2> select task_id,policy_name,object_name,object_type,SELECTED_FOR_EXECUTION,job_name from user_ilmevaluationdetails; TASK_ID POLICY_NAM OBJECT_NAME OBJECT_TYPE SELECTED_FOR_EXECUTION JOB_NAME ---------- ---------- -------------------- ------------------ ---------------------------------------- ---------- 63 P102 SALES_ADO TABLE SELECTED FOR EXECUTION ILMJOB608
10)檢查策略執行後,表是否壓縮,以及壓縮比率
ALEN@PROD2> select t.compression,t.compress_for from user_tables t where t.table_name='SALES_ADO'; COMPRESS COMPRESS_FOR -------- ------------------------------ ENABLED ADVANCED ALEN@PROD2> select t.bytes from user_segments t where t.segment_name='SALES_ADO'; BYTES ---------- 4194304
能夠看出,執行策略後,表進行了高級壓縮,4194304/11534336 = 0.36 差很少壓縮到原來的三分之一。
1)建立表空間,分別用於存放數據以及歸檔數據
SYS@PROD2> create tablespace ts_data datafile '/u01/app/oracle/oradata/PROD2/ts_data01.dbf' size 13M; Tablespace created. SYS@PROD2> create tablespace ts_low_store datafile '/u01/app/oracle/oradata/PROD2/ts_low01.dbf' size 50M; Tablespace created.
2)建立測試表,表段佔用空間爲11M,佔用ts_data表空間的85%
ALEN@PROD2> create table sales_ts_ado tablespace ts_data as select * from sales; Table created. ALEN@PROD2> select t.compression,t.compress_for,t.tablespace_name from user_tables t where t.table_name='SALES_TS_ADO'; COMPRESS COMPRESS_FOR TABLESPACE_NAME -------- ------------------------------ ------------------------------ DISABLED TS_DATA ALEN@PROD2> select sum(t.bytes)/1024/1024 from user_segments t where t.segment_name='SALES_TS_ADO'; SUM(T.BYTES)/1024/1024 ---------------------- 11
3)策略默認參數是表空間使用百分比TBS PERCENT USED達到85時,會進行數據移動,這裏爲了實驗的目的,修改該值爲80
SYS@PROD2> exec dbms_ilm_admin.customize_ilm(8,80); PL/SQL procedure successfully completed.
4)建立存儲分層策略,當表空間使用達到80%時,即會進行數據的移動
ALEN@PROD2> alter table sales_ts_ado ilm add policy tier to ts_low_store; Table altered.
5)查看策略
ALEN@PROD2> select policy_name,object_owner,object_name,object_type,inherited_from,enabled,deleted from user_ilmobjects; POLICY_NAM OBJECT_OWN OBJECT_NAME OBJECT_TYPE INHERITED_FROM ENA DEL ---------- ---------- -------------------- ------------------ -------------------- --- --- P102 ALEN SALES_ADO TABLE POLICY NOT INHERITED NO NO P142 ALEN SALES_TS_ADO TABLE POLICY NOT INHERITED YES NO
6)手工觸發策略
ALEN@PROD2> declare v_taskid number; begin dbms_ilm.execute_ilm(v_taskid,dbms_ilm.scope_schema,dbms_ilm.ilm_execution_offline); dbms_output.put_line('Task ID is '||v_taskid); end; / Task ID is 84 PL/SQL procedure successfully completed.
7)查看任務執行狀況,驗證策略執行結果
ALEN@PROD2> select task_id,state,creation_time +0 ct,start_time+0 st,completion_time+0 dt from user_ilmtasks where task_id=84; TASK_ID STATE CT ST DT ---------- --------- ------------------- ------------------- ------------------- 84 COMPLETED 2020-05-26 20:25:19 2020-05-26 20:25:19 2020-05-26 20:25:21 ALEN@PROD2> select t.compression,t.compress_for,t.tablespace_name from user_tables t where t.table_name='SALES_TS_ADO'; COMPRESS COMPRESS_FOR TABLESPACE_NAME -------- ------------------------------ ------------------------------ DISABLED TS_LOW_STORE
能夠看到,執行策略後,表段對應的表空間由TS_DATA移到了TS_LOW_STORE,從而自動完成了數據的存儲分層移動。
ALEN@PROD2> alter table sales_ado ilm disable policy P102; Table altered. ALEN@PROD2> alter table sales_ado ilm enable policy P102; Table altered.
ALEN@PROD2> alter table sales_ado ilm delete policy P102; Table altered.
1)查看ADO參數
ALEN@PROD2> select * from dba_ilmparameters; NAME VALUE ------------------------------ ---------- ENABLED 1 RETENTION TIME 30 JOB LIMIT 2 EXECUTION MODE 2 EXECUTION INTERVAL 15 TBS PERCENT USED 80 TBS PERCENT FREE 25 POLICY TIME 1 8 rows selected.
2)修改參數,使用dbms_ilm_admin.customize_ilm
ALEN@PROD2> conn / as sysdba Connected. SYS@PROD2> exec dbms_ilm_admin.customize_ilm(parameter =>11 , value => 0); PL/SQL procedure successfully completed.
策略的監控主要經過數據字典視圖,分別以下:
1)dba / user_ilmdatamovementpolicies
展現和ILM策略相關的數據移動信息。
2)dba / user_ilmtasks
展現ILM執行的任務信息。
3)dba / user_ilmevaluationdetails
展現ILM任務的評估信息。
4)dba / user_ilmobjects
展現策略和對象信息。
5)dba / user_ilmpolicies
展現策略信息。
6)dba / user_ilmresults
展現數據移動相關的做業信息。
7)dba_ilmparameters
展現ADO相關的參數信息。
以上就是自動數據優化相關的介紹和演示。