自动段指导任务(Automatic Segment Advisor)
- 2020 年 3 月 26 日
- 筆記
概述
本文主要介绍自动段指导(Automatic Segment Advisor)任务的内容进行详细介绍。
10g
段指导(Segment Advisor)
从Oracle 10g R2开始推出了段指导(Segment Advisor)功能,用于识别是否有可用回收空间的段和有很多行链接的对象,并提出如何消除这些段中的碎片及行链接的建议。
段指导(Segment Advisor)主要生成以下类型的建议:
・当段指导(Segment Advisor)发现某对象的高水位线 (High Water Mark 简称HWM)下 的空余空间特别多时,会推荐online segment shrink; 如果该对象并不适合Shrink(如表不是定义在ASSM的表领域等),段指导会推荐在线重定义对象 (online table redefinition).例如:利用DBMS_REDEFINITION程序包。・当段指导(Segment Advisor)发现某对象的行链接数大于某个临界值时, 会记录下来作为通知内容。
段指导建议的生成级别
通过手动执行段指导(Segment Advisor),可以生成以下3种级别的指导建议: (利用DBMSADVISOR.CREATEOBJECT时,指定的OBJECT_TYPE)
1.段级别: 针对非分区表、分区表的分区以及子分区、索引等个别段对象生成指导建议。2.对象级别: 针对表或索引等整个对象生成指导建议。例如对某分区表进行分析, 会对分区表的所有分区生成知道建议。另外通过EM运行还可以指定对象的所有的依赖对象(如索引等)。3.表空间级别 针对某表空间所有的段对象生成指导建议。
自动段指导(Automatic Segment Advisor)
自动段指导(Automatic Segment Advisor)功能是,在数据库做成时会自动地做成调度作业【GATHERSTATSJOB】,通过预定义的维护窗口(Maintenance Windows)进行执行。
WEEKNIGHT_WINDOW : 周一到周五 每天22:00开始 ~ 次日06:00结束。 WEEKEND_WINDOW :周六和周日的全天
自动段指导的分析对象
自动段指导并不是针对所有的数据库对象进行分析,而是分析数据库的统计信息、段数据的采样,对以下的对象进行分析:
1.超过空间的 critical 或warning阈值的表空间。2.操作活动很多的段3.很高增长率的段
自动段指导的动作确认
和自动统计信息收集一样,自动段指导的相关动作可以通过视图进行查看。 这里不做详细介绍,可参考【自动统计信息收集的动作确认】一节。
手动执行段指导
以下是针对段级别进行手动执行段指导的例子.
variable id number; begin declare name varchar2(100); descr varchar2(500); obj_id number; begin name:='Manual_Employees'; descr:='Segment Advisor Example'; dbms_advisor.create_task ( advisor_name => 'Segment Advisor', task_id => :id, task_name => name, task_desc => descr); dbms_advisor.create_object ( task_name => name, object_type => 'TABLE', attr1 => 'HR', attr2 => 'EMPLOYEES', attr3 => NULL, attr4 => NULL, attr5 => NULL, object_id => obj_id); dbms_advisor.set_task_parameter( task_name => name, parameter => 'recommend_all', value => 'TRUE'); dbms_advisor.execute_task(name); end; end; /
段指导的结果表示
可以通过以下方式查看段指导的结果:
Enterprise ManagerDBA_ADVISOR_* 视图DBMS_SPACE.ASA_RECOMMENDATIONS 程序包
下面简单列举通过DBMSSPACE.ASARECOMMENDATIONS 程序包查看段指导的结果的方法:
SQL> desc dbms_spaceFUNCTION ASA_RECOMMENDATIONS RETURNS DBMS_SPACE Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- ALL_RUNS VARCHAR2 IN DEFAULT SHOW_MANUAL VARCHAR2 IN DEFAULT SHOW_FINDINGS VARCHAR2 IN DEFAULTSQL> select tablespace_name, segment_name, segment_type, recommendations, c1 from table(dbms_space.asa_recommendations('TRUE', 'TRUE', 'FALSE'));
参考: Database Administrator's Guide
>Automatic Segment Advisor Job >Using the Segment Advisor
11g & 12c
自动段指导(Automatic Segment Advisor)建议的拓展
从Oracle 11g R2开始,作为自动段指导(Automatic Segment Advisor)的一部分,追加了段压缩指导(Compression advisor)功能。
因此,11gR2以后,自动段指导(Automatic Segment Advisor)功能主要可以生成以下类型的建议:
・当段指导(Segment Advisor)发现某对象的高水位线 (High Water Mark 简称HWM)下的 空余空间特别多时,会推荐online segment shrink; 如果该对象并不适合Shrink(如表不是定义在ASSM的表领域等), 段指导会推荐在线重定义对象(online table redefinition). 例如:利用DBMS_REDEFINITION程序包。・当段指导(Segment Advisor)发现某对象的行链接数大于某个临界值时, 会记录下来作为通知内容。・当自动段指导(Segment Advisor)发现段可以 从高级行压缩(Advanced row compression 11g版本也称为OLTP压缩)中受益时, 段指导会生成建议指导。(11gR2以后)
段压缩指导(Compression advisor)
通过段压缩指导(Compression advisor)功能,可以评估通过高级行压缩(Advanced row compression以前的11g版本也称为OLTP压缩)方法对段进行压缩时,能够节省的空间大小。
段压缩指导评估对象:
段压缩指导评估对象一般为大小为10MB以上,并且拥有3个以上索引的表。 (除了上面的条件以外,还会根据其他一些内部算法来决定评估对象)
段压缩指导处理逻辑:
・段压缩指导主要使用DBMS_COMPRESSION程序包进行压缩的评估。 ・评估过程中,会建立以下2个内部临时表。 DBMS_TABCOMP_TEMP_UNCMP :默认包含99%的采样块。 DBMS_TABCOMP_TEMP_CMP :包含通过压缩后的DBMS_TABCOMP_TEMP_UNCMP。通过DBMS_TABCOMP_TEMP_UNCMP和 DBMS_TABCOMP_TEMP_CMP计算出压缩比。・评估结束后,删除2个临时表。
手动运行段压缩指导 可以通过以下的方法手动地运行段压缩指导。
例:
sql> set serveroutput on sql> declare v_blkcnt_cmp pls_integer; v_blkcnt_uncmp pls_integer; v_row_cmp pls_integer; v_row_uncmp pls_integer; v_cmp_ratio number; v_comptype_str varchar2(60); begin dbms_compression.get_compression_ratio( scratchtbsname => upper('&ScratchTBS'), ownname => user, tabname => upper('&TableName'), partname => NULL, comptype => dbms_compression.comp_for_query_high, blkcnt_cmp => v_blkcnt_cmp, blkcnt_uncmp => v_blkcnt_uncmp, row_cmp => v_row_cmp, row_uncmp => v_row_uncmp, cmp_ratio => v_cmp_ratio, comptype_str => v_comptype_str, subset_numrows=>&num_rows ); dbms_output.put_line('Estimated Compression Ratio: '||to_char(v_cmp_ratio)); dbms_output.put_line('Blocks used by compressed sample: '||to_char(v_blkcnt_cmp)); dbms_output.put_line('Blocks used by uncompressed sample: '||to_char(v_blkcnt_uncmp)); end; /
参考: Database Administrator's Guide
>Automatic Segment Advisor >Using the Segment Advisor

